Documentation menu
Getting started
QuickstartEndpoints
GET/sourcesPOST/tender/estimatePOST/tender/compsGET/vendorsGET/departmentsGET/expiringGET/tender/feedGET/tender/{record_id}/documents/{doc_index}GET/department/{name}GET/process/{process_key}GET/vendor/{name}GET/contractGET/tenderGET/awardGET/disclosureGET/standing_offerGET/pre_solicitationGET/contract/statsGET/tender/statsGET/award/statsGET/disclosure/statsGET/standing_offer/statsGET/pre_solicitation/statsGET/contract/coverageGET/tender/coverageGET/award/coverageGET/disclosure/coverageGET/standing_offer/coverageGET/pre_solicitation/coverageGET/procurement/{solicitation_number}GET/contract/{record_id}GET/tender/{record_id}GET/award/{record_id}GET/disclosure/{record_id}GET/standing_offer/{record_id}GET/pre_solicitation/{record_id}Pro: comparable awarded contracts + bid-around guide for 1..N tenders
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
| Field | Type | Description |
|---|---|---|
record_ids | array of string | Tender 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).
| Status | When |
|---|---|
400 | The 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. |
403 | Missing 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. |
404 | No such endpoint, or no record with that id. |
422 | A 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. |
429 | Rate limit or plan quota exceeded. |
500 | Unexpected server error. |
504 | The 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 →