Public procurement of a UK company
The Cabinet Office publishes UK public-procurement notices in OCDS under OGL v3: Find a Tender above threshold (since 2021), Contracts Finder below (read since 2023). This route finds a company by its company number, as a supplier (buyer, subject, contract, value in GBP, dates, status, official link) and as a buyer — published facts, never a score.
See a real response (free) Get the quote for /v1/eu/entreprise/GB/{company_number}/marches-publics
What the route returns
Catalogue description, exactly as agents read it:
Public-procurement record of a UK company from Find a Tender (above-threshold notices since 2021) and Contracts Finder (below-threshold since 2023), Cabinet Office OCDS feeds under OGL v3: contracts WON matched by company number — buyer, subject, contract value in GBP, award and signature dates, period, status, official notice link — and notices ISSUED as a buyer, newest first, with totals. Only half of suppliers carry a company number: zero is a non-conclusive absence. Facts, never a score.
Expected identifier
8-character company number, leading zeros included (e.g. 10868035, SC540982).
A wrongly formatted identifier in the path returns 400 and is not billed — but it costs you a round trip. It is the leading cause of failed calls on the foreign routes. A search parameter, by contrast, is cleaned up: unsupported characters are stripped and the usable query is served.
Extract from a genuinely paid response
Dated snapshot from 2026-09-17, truncated to one item per array. It is not live data. The full extract is served free of charge from the samples surface, and the schema from the OpenAPI document.
{
"pays": "GB",
"company_number": "10868035",
"attributions": [
{
"ocid": "ocds-h6vhtk-0773eb",
"award_id": "1",
"source": "fts",
"publie_le": "2026-09-16",
"titre": "Facilitate Away Days and LGR Transition",
"valeur": 36606.36,
"devise": "GBP",
"date_attribution": null,
"date_signature": "2026-07-27",
"debut": "2026-07-27",
"fin": "2028-04-01",
"statut": "active",
"acheteur": {
"id": "GB-PPON-PGGG-5373-XYZX",
"company_number": null,
"nom": "Dacorum Borough Council"
},
"fournisseur": {
"nom_publie": "CHANGEMAKER ASSOCIATES LIMITED",
"id": "GB-COH-10868035"
},
"lien": "https://www.find-tender.service.gov.uk/Notice/087976-2026"
}
],
"nombre_attributions": 1,
"valeur_totale_gbp": 36606.36,
"tronque_attributions": false,
"aucune_attribution": false,
"avis_emis": [],
"nombre_avis_emis": 0,
"tronque_avis_emis": false,
"aucun_marche": false,
"existence_verifiee": false,
"stock": {
"fts": {
"depuis": "2021-01-01",
"dernier_jour_collecte": "2026-09-16"
},
"cf": {
"depuis": "2023-01-01",
"dernier_jour_collecte": "2026-09-16"
}
}
}
Price and billing
Price: $0.02. The authoritative amount is the one in the 402 quote returned by the route itself — not this text, which derives from the same grid but is still just a page.
An error response cancels the payment: a 400, 404 or 503 is never billed. An upstream outage closes the route with a 503 rather than serving a degraded response.
Calling the route
# 1. Le devis, sans rien payer : la route répond 402 avec son montant
curl -i https://api.sirenic.eu/v1/eu/entreprise/GB/{company_number}/marches-publics
# 2. L'appel réglé — le client x402 paie le devis et rejoue la requête
npx x402-fetch https://api.sirenic.eu/v1/eu/entreprise/GB/{company_number}/marches-publics
# 3. Ou en MCP, dans Claude Code / Cursor / un agent
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
What this route does not do
Partial coverage by construction: only half of suppliers carry a company number (the others a PPON identifier or none); zero never means “never won a contract”. A company confirmed at Companies House with no contract gets a bounded positive answer. Never a natural-person supplier.
Neighbouring routes
/v1/eu/entreprise/GB/{company_number}/annonces— $0.02/v1/eu/entreprise/GB/{company_number}/dirigeants— $0.01/v1/entreprise/{siren}/marches-publics-ue— $0.02
How you pay
Every route is paid per call, in USDC or EURC on the Base network, over the x402 protocol: no account to create, no API key, no subscription. The first call returns a 402 quote your client settles, then replays the call. A failed call is never billed.
Would you rather have a euro invoice and prepaid credits? That is in preparation, and we will not announce a date until it is open. Write to contact@sirenic.eu and we will let you know when it opens.
Paid responses are Ed25519-signed: you can later prove what was served to you, and when. The whole catalogue is free to read in the OpenAPI document and in llms.txt.
One call, end to end
# Client x402 (npm) — le devis 402 est réglé et l'appel rejoué automatiquement
npx x402-fetch https://api.sirenic.eu/v1/entreprise/552032534
# Ou en MCP, dans Claude Code / Cursor
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
Routes used and pricing
| Route | Price | Sample | What it returns |
|---|---|---|---|
/v1/eu/entreprise/GB/{company_number}/marches-publics | $0.02 | free sample | Public-procurement record of a UK company from Find a Tender (above-threshold notices since 2021) and Contracts Finder (below-threshold since 2023), Cabinet Office OCDS feeds under OGL v3: contracts WON matched by company number — buyer, subject, contract value in GBP, award and signature dates, period, status, official notice link — and notices ISSUED as a buyer, newest first, with totals. Only half of suppliers carry a company number: zero is a non-conclusive absence. Facts, never a score. |
Contract end dates are estimates, computed from the notification date and the declared duration. This is not an official re-tendering calendar.
Take it further
No account to create, no key to request: the first step is free and shows you exactly what you would be buying.
See a real response (free) Get the quote for /v1/eu/entreprise/GB/{company_number}/marches-publics Get notified about euro packs
Read next
Volume figures on this page were measured in our database on 2026-08-19. They are dated snapshots, not live counters. · OpenAPI · llms.txt · Full route catalogue and pricing