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.

BASE URL https://api.procurebase.io
Data is published under the Open Government Licence v3.0. Every response includes an 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.

PlanRequests / minuteBulk export
Free60
Starter300
Pro1,200CSV / JSONL
ScalecustomCSV / 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.

CodeMeaning
200OK
401Missing or invalid API key
404Entity or endpoint not found
429Rate limit exceeded (see Retry-After)
500Internal error

Stats

GET/v1/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

GET/v1/suppliers

Search and filter resolved supplier entities.

ParameterTypeDescription
qstringCase-insensitive name search (matches canonical name).
chstringFilter by exact Companies House number.
portalstringOnly entities present in this portal: fts, scotland, wales.
limitintPage size, max 200 (default 25).
offsetintRows 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

GET/v1/suppliers/{entity_id}

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

GET/v1/buyers

Search and filter contracting authorities. Same paging as suppliers.

ParameterTypeDescription
qstringCase-insensitive name search.
portalstringfts, scotland, wales.
limit / offsetintPaging (limit max 200).
curl "https://api.procurebase.io/v1/buyers?q=council&limit=1" \
  -H "Authorization: Bearer pk_live_..."

Get a buyer

GET/v1/buyers/{entity_id}

Fetch a single contracting authority by its stable ID.

Attribution

GET/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

FieldTypeDescription
entity_idstringStable ID. COH:<number> if resolved to Companies House, else PB:<hash>.
canonical_namestringBest display name for the entity.
ch_numberstring|nullCompanies House number, or null if unresolved.
resolution_methodstringnative_id, name_match, variant_*, rapidfuzz or unresolved.
portalsobjectPortal → occurrence count, e.g. {"fts":22,"scotland":3}.
name_variantsarrayAll spellings seen for this entity across portals.

Buyer object

FieldTypeDescription
entity_idstringStable ID for the contracting authority.
canonical_namestringAuthority name.
scheme / org_idstringOrganisation identifier scheme and value, when published.
resolution_methodstringnative_id or name_only.
portalsobjectPortal → occurrence count.
Ready to build? Get an API key →

Contains public sector information licensed under the Open Government Licence v3.0. © 2026 ProcureBase.