ProcureBase API
A unified, entity-resolved REST API over UK public procurement. One request, one clean answer — JSON over HTTPS.
Introduction
The ProcureBase API exposes suppliers and contracting authorities resolved to stable IDs across Find a Tender, Contracts Finder, Public Contracts Scotland and Sell2Wales, linked to Companies House where possible. All responses are JSON.
attribution field and an X-Attribution header — see /attribution.Authentication
All requests require an API key, sent as a bearer token. Create a key on signup (free tier available).
# pass your key on every request curl https://api.procurebase.io/v1/stats \ -H "Authorization: Bearer pk_live_your_key_here"
Keep keys server-side. Requests without a valid key return 401 Unauthorized.
Rate limits
Limits depend on your plan. When you exceed them the API returns 429 Too Many Requests with a Retry-After header (seconds). Back off and retry.
| Plan | Requests / minute | Bulk export |
|---|---|---|
| Free | 60 | — |
| Starter | 300 | — |
| Pro | 1,200 | CSV / JSONL |
| Scale | custom | CSV / JSONL |
Response format
List endpoints return a paged envelope; single-object endpoints return the object directly. Control paging with limit (max 200) and offset.
{
"total": 44,
"limit": 25,
"offset": 0,
"results": [ /* objects */ ],
"attribution": "Contains public sector information licensed under the OGL v3.0."
}
Errors
Standard HTTP status codes. Error bodies are JSON with an error message.
| Code | Meaning |
|---|---|
| 200 | OK |
| 401 | Missing or invalid API key |
| 404 | Entity or endpoint not found |
| 429 | Rate limit exceeded (see Retry-After) |
| 500 | Internal error |
Stats
Dataset-level counts: distinct entities, how many are resolved to Companies House, and a per-portal breakdown.
# response { "suppliers": { "distinct_entities": 32277, "resolved_to_companies_house": 24907, "by_portal": { "fts": 31760, "scotland": 1778, "wales": 415 } }, "buyers": { "distinct_authorities": 4806 } }
List / search suppliers
Search and filter resolved supplier entities.
| Parameter | Type | Description |
|---|---|---|
| q | string | Case-insensitive name search (matches canonical name). |
| ch | string | Filter by exact Companies House number. |
| portal | string | Only entities present in this portal: fts, scotland, wales. |
| limit | int | Page size, max 200 (default 25). |
| offset | int | Rows to skip (default 0). |
# request curl "https://api.procurebase.io/v1/suppliers?q=capita&limit=1" \ -H "Authorization: Bearer pk_live_..." # response { "total": 44, "limit": 1, "offset": 0, "results": [{ "entity_id": "COH:02299747", "canonical_name": "Capita Business Services Ltd", "ch_number": "02299747", "resolution_method": "native_id", "portals": { "fts": 22 }, "name_variants": ["Capita Business Services Ltd", "CAPITA BUSINESS SERVICES LIMITED"] }] }
Get a supplier
Fetch a single supplier entity by its stable ID, e.g. COH:02299747 or PB:0e82dd0d457d.
curl https://api.procurebase.io/v1/suppliers/COH:02299747 \
-H "Authorization: Bearer pk_live_..."
List / search buyers
Search and filter contracting authorities. Same paging as suppliers.
| Parameter | Type | Description |
|---|---|---|
| q | string | Case-insensitive name search. |
| portal | string | fts, scotland, wales. |
| limit / offset | int | Paging (limit max 200). |
curl "https://api.procurebase.io/v1/buyers?q=council&limit=1" \ -H "Authorization: Bearer pk_live_..."
Get a buyer
Fetch a single contracting authority by its stable ID.
Attribution
Returns the required OGL v3.0 attribution statements for every data source. You must display or link to these when using the data (see the licence).
Supplier object
| Field | Type | Description |
|---|---|---|
| entity_id | string | Stable ID. COH:<number> if resolved to Companies House, else PB:<hash>. |
| canonical_name | string | Best display name for the entity. |
| ch_number | string|null | Companies House number, or null if unresolved. |
| resolution_method | string | native_id, name_match, variant_*, rapidfuzz or unresolved. |
| portals | object | Portal → occurrence count, e.g. {"fts":22,"scotland":3}. |
| name_variants | array | All spellings seen for this entity across portals. |
Buyer object
| Field | Type | Description |
|---|---|---|
| entity_id | string | Stable ID for the contracting authority. |
| canonical_name | string | Authority name. |
| scheme / org_id | string | Organisation identifier scheme and value, when published. |
| resolution_method | string | native_id or name_only. |
| portals | object | Portal → occurrence count. |
Contains public sector information licensed under the Open Government Licence v3.0. © 2026 ProcureBase.