Documentation menu
Docs / Reference / Pro: comparable awarded contracts + bid-around guide for 1..N tenders

Pro: comparable awarded contracts + bid-around guide for 1..N tenders

POST/tender/comps

Comparable awarded contracts for a tender and a bid-around guide built from them: what this buyer paid for the same category before. Send up to 25 tender record ids per call. Paid plans only; a free key gets 403.

Request body

FieldTypeDescription
record_idsarray of stringTender record ids, as /tender returns them.

Request

curl --request POST \
  --url 'https://api.procuredata.ca/tender/comps' \
  --header 'X-API-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"record_ids": ["SSC-26-00035065:T:000"]}'
import requests

url = "https://api.procuredata.ca/tender/comps"
headers = {"X-API-Key": "YOUR_API_KEY"}
body = {
  "record_ids": [
    "SSC-26-00035065:T:000"
  ]
}
resp = requests.post(url, headers=headers, json=body)
print(resp.json())
const res = await fetch("https://api.procuredata.ca/tender/comps", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "record_ids": [
    "SSC-26-00035065:T:000"
  ]
}),
});
console.log(await res.json());

Example response

{
  "results": [
    {
      "record_id": "SSC-26-00035065:T:000",
      "bid_guide": {
        "median": 49949,
        "low": 9105,
        "high": 134293,
        "n": 186,
        "confidence": "Low",
        "basis": "186 comparable awards in GD for this buyer"
      },
      "comparables": [
        {
          "title": "SIERRA SYSTEMS GROUP INC (51019-053457/001/XL~043)",
          "vendor": "Sierra Systems Group Inc.",
          "value": 127125,
          "award_date": "",
          "buyer": "Shared Services Canada"
        },
        {
          "title": "NORTHERN MICRO (2B0KB-140504/001/EJ~002)",
          "vendor": "Northern Micro Inc",
          "value": 149617,
          "award_date": "",
          "buyer": "Shared Services Canada"
        }
      ]
    }
  ],
  "count": 1
}

Errors

Every error returns {"detail": "…"}, a sentence naming what was wrong and, where there is one, the fix, plus docs and, when they apply, did_you_mean (the nearest valid value) and valid (the accepted values).

StatusWhen
400The request is understood but cannot be served as asked, e.g. offset above 9500, or cursor combined with sort_by=value. The message names the fix.
403Missing or invalid API key; a route that needs a paid plan, called with a free key; or, on a free key, a record first seen inside the last 30 days, asked for by id. The message says which.
404No such endpoint, or no record with that id.
422A parameter is invalid: an unknown city slug, an impossible date, a limit above 500, an unrecognised sort field, or a misspelled parameter name. The message names the parameter and, where there is one, the nearest valid value.
429Rate limit or plan quota exceeded.
500Unexpected server error.
504The query took too long. Narrow it with a municipality or a date range.
Ready to build?Create a free key and start calling ProcureData in minutes. No card required.
Get your API key →