Procurement API Reference
Search UK Find a Tender and Contracts Finder releases for sourcing, market analysis, and supplier due diligence.
Base URL: https://api.govdata.dev/v1
Search notices
GET /v1/procurement/notices returns paginated OCDS releases. Use buyer prefixes and CPV codes to identify opportunities, or supplier numbers to inspect awards.
/v1/procurement/notices
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
source |
string | Yes | — | Source discriminator: fts or contracts_finder. |
buyer_name |
string | Yes | — | Case-insensitive buyer-name prefix. |
cpv_code |
string | Yes | — | Exact CPV code. |
tag |
string | Yes | — | OCDS 1.1 release tag. |
notice_type |
string | Yes | — | FTS type such as UK4 or UK7. |
value_min |
decimal | Yes | — | Inclusive minimum in the published currency. |
value_max |
decimal | Yes | — | Inclusive maximum in the published currency. |
date_from |
date | Yes | — | Inclusive release date, YYYY-MM-DD. |
date_to |
date | Yes | — | Inclusive release date, YYYY-MM-DD. |
supplier_company_number |
string | Yes | — | Exact GB Companies House number. |
page |
integer | Yes | 1 | One-based page. |
per_page |
integer | Yes | 25 | Results per page, maximum 100. |
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.govdata.dev/v1/procurement/notices?source=contracts_finder&buyer_name=Cabinet%20Office"
uri = URI("https://api.govdata.dev/v1/procurement/notices?buyer_name=Buckinghamshire&cpv_code=71200000")\nres = Net::HTTP.get_response(uri, {"Authorization" => "Bearer YOUR_API_KEY"})
response = requests.get("https://api.govdata.dev/v1/procurement/notices", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"buyer_name": "Buckinghamshire", "cpv_code": "71200000"})
const response = await fetch("https://api.govdata.dev/v1/procurement/notices?buyer_name=Buckinghamshire&cpv_code=71200000", { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Response captured after reset and real fixture import
{"data":[{"ocid":"ocds-h6vhtk-06de7f","release_id":"075022-2026","tags":["award","contract"],"notice_type":"UK5","title":"Architectural Services - RIBA Stages 3-6","buyer":{"name":"Buckinghamshire New University","identifier":"GB-PPON-PZTZ-8956-MMQT"},"value":{"amount":375000.0,"currency":"GBP"},"cpv_codes":[{"code":"71200000","description":"Architectural and related services"}],"awards":[{"id":"1","suppliers":[{"name":"RUFFARCHITECTS LIMITED","company_number":"08951903"}]}]}],"meta":{"api_version":"v1","licence":"Open Government Licence v3.0","source":"Find a Tender OCDS releases"},"pagination":{"total":1,"page":1,"per_page":25,"total_pages":1}}
A release can have several tags and awards. Amounts are decimal major currency units; the adjacent currency is authoritative.
Show latest release by OCID
GET /v1/procurement/notices/:ocid returns the newest release for a contracting process, useful for current process status and award review.
/v1/procurement/notices/ocds-h6vhtk-06de7f
No parameters required.
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
ocid |
string | Yes | — | Open Contracting process identifier in the URL path. |
source |
string | Yes | — | Optional source discriminator: fts or contracts_finder. |
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.govdata.dev/v1/procurement/notices/ocds-h6vhtk-06de7f"
Net::HTTP.get_response(URI("https://api.govdata.dev/v1/procurement/notices/ocds-h6vhtk-06de7f"), {"Authorization" => "Bearer YOUR_API_KEY"})
requests.get("https://api.govdata.dev/v1/procurement/notices/ocds-h6vhtk-06de7f", headers={"Authorization": "Bearer YOUR_API_KEY"})
await fetch("https://api.govdata.dev/v1/procurement/notices/ocds-h6vhtk-06de7f", {headers:{Authorization:"Bearer YOUR_API_KEY"}});
Errors
{"error":{"code":"invalid_parameter","message":"Dates must be YYYY-MM-DD and values must be non-negative numbers with valid ranges.","documentation_url":"https://docs.govdata.dev/errors/invalid_parameter"}}
{"error":{"code":"not_found","message":"No procurement notice found for ocid missing.","documentation_url":"https://docs.govdata.dev/errors/not_found"}}
Malformed dates, negative values, and reversed ranges return 400. Unknown OCIDs return 404. No request body is accepted, so 422 is not applicable.
Data notes
Coverage and cadence: Both sources receive a 12-month initial load in month-sized checkpoints, then sync daily. The checked-in real-data fixtures contain 121 FTS and 100 Contracts Finder releases. Live volume measurements and their exact windows are recorded below so fixture size is not confused with production coverage.
Source split: fts is the statutory UK Find a Tender service, principally covering higher-value regulated procurement. contracts_finder complements it with England-focused lower-value opportunities and awards; overlap is possible and records remain source-discriminated.
Contracts Finder API: The canonical route is /Published/Notices/OCDS/Search. It uses publishedFrom/publishedTo, a 1–100 limit, and an opaque cursor returned in links.next. The package declares OGL v3. Its documentation specifies HTTP 403 without a Retry-After header when throttled and instructs clients to wait five minutes. Production spaces CF pages by 3.1 seconds and honours that five-minute cooldown, bounded to five retries.
Measured backfill volume: Approximately 114,520 Find a Tender releases and approximately 43,096 Contracts Finder releases were published in their measured 12-month windows. The Contracts Finder measurement covers 2025-08-01 through 2026-08-01 (from live cursor ID boundaries on 2026-08-08). Both are well below the 500,000-release guardrail, so the initial backfill remains 12 months rather than six.
Licence: Open Government Licence v3.0, with Cabinet Office/Find a Tender attribution.
Caveats: missing values remain null; non-GBP currencies are not converted; supplier company links exist only for published GB-COH identifiers. Multiple releases can share an OCID, and search returns releases rather than compiled processes.