{"slug": "ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents", "title": "ukintel.uk: UK company, tender and grant data as paid JSON for agents", "summary": "UKintel has launched api.ukintel.uk, a paid JSON API that aggregates UK public registers—Companies House, FCA Register, Find a Tender, Contracts Finder, and GOV.UK Find a Grant—into eleven x402 endpoints for AI agents. The service charges per request in USDC on Base, eliminating the need for accounts or API keys, and claims to reduce costs by up to 6x on frontier models by returning concise structured verdicts instead of raw data.", "body_md": "UK public registers are free and public. Companies House, the FCA register,\n\nFind a Tender, Contracts Finder, GOV.UK Find a Grant. All of it is open data\n\nunder the Open Government Licence, and none of it is usable by an AI agent\n\nwithout a human in the loop.\n\nCompanies House needs an API key from a human dashboard. The FCA Register\n\nAPI needs a developer account and written permission. Find a Tender publishes an OCDS feed with no keyword\n\nsearch at all. GOV.UK Find a Grant has no API of any kind — it is HTML, and\n\nthat is the whole interface. An agent that tries to do this itself either\n\nstops at a signup form or starts scraping.\n\n`api.ukintel.uk`\n\nis those five sources behind eleven x402 endpoints. Call it,\n\nget a 402 with payment terms, pay in USDC on Base, retry. No account, no API\n\nkey, no rate-limit negotiation.\n\nThis is the part worth checking rather than believing.\n\nAn agent answering \"is this UK supplier legitimate?\" by browsing does roughly\n\nfive page-loads — Companies House search, company profile, filing history,\n\nofficers, FCA register — about 34,000 input tokens, plus ~2,500 tokens of\n\ntool-call overhead and ~2,500 output tokens of reasoning.\n\nOn a mid-tier model at $2/M in and $10/M out, that is **$0.098 per attempt**.\n\nApply a realistic 30% retry-and-blocked-page factor and it is **~$0.13**,\n\ntaking 30–90 seconds. On a frontier model at $10/M and $50/M it is **$0.49 per\nattempt, ~$0.64 with retries**.\n\n`GET /v1/company/{number}/verdict`\n\ncosts **$0.10** and returns roughly 800\n\nstructured tokens. Reading them costs $0.0016–$0.008 depending on the model.\n\nCall it **$0.102–$0.108, in about two seconds.**\n\nSo: modestly cheaper on a mid-tier model, roughly **6× cheaper on a frontier\nmodel**, and in both cases the DIY route also burns ~36,000 tokens of context\n\nThere is a sharper version of this. A raw Companies House filing-history JSON\n\nfor a mid-sized company is about 60KB — around 15,000 tokens. Merely *reading*\n\nthat free file costs $0.030 on a mid-tier model and **$0.150 on a frontier\nmodel**, every single time, before any thinking happens. The verdict endpoint\n\nThat is the entire product thesis: sell fewer tokens that say more.\n\nEvery endpoint returns the same envelope — `query`\n\n, `result`\n\n, `verdict`\n\n,\n\n`confidence`\n\n, `as_of`\n\n, `sources`\n\n, `attribution`\n\n, `notice`\n\n, `cost`\n\n. Deterministic\n\nkey order, explicit nulls rather than missing keys, no HTML anywhere, ~800\n\ntokens by default with `?detail=full`\n\nto lift the cap.\n\n`as_of`\n\nis when *we* fetched the underlying data, never when you asked.\n\nHere is a real grant eligibility verdict, returned free from\n\n`/v1/preview?wing=grants`\n\ntoday — a live DfE school-based nursery capital\n\ngrant against a showcase project profile:\n\n```\n\"verdict\": {\n  \"score\": 64,\n  \"band\": \"eligible\",\n  \"flags\": [\n    { \"code\": \"MISSING_DECLARATION\",\n      \"detail\": \"net_increase_childcare_places not declared; Proposed project will result in a net increase in the number of childcare places, accounting for existing provisions on site or nearby\" },\n    { \"code\": \"MISSING_DECLARATION\",\n      \"detail\": \"landowner_permission not declared; Written permission from relevant freehold landowner to use land for nursery provision and carry out proposed works\" },\n    { \"code\": \"REVIEW_REMAINING\",\n      \"detail\": \"3 criteria cannot be auto-assessed (OPERATIONAL_BY_SEPTEMBER_2030, PROJECT_CLASSIFICATION, PREVIOUS_GRANT_ADDITIONALITY) - review them against the source page.\" }\n  ],\n  \"rules_version\": \"1.0.0\"\n}\n```\n\nNote what it does *not* do. It does not guess. `score: 64`\n\nis not confidence in\n\neligibility — it is the share of criteria affirmatively passed, with undeclared\n\nfacts counting half and named in `missing[]`\n\n. Declare them and call again and\n\nthe score firms up. A criterion nobody can auto-assess says so and points at\n\nthe source page.\n\nThe rules are published. Any hard criterion failing means `ineligible`\n\n, score\n\n0, failing codes listed. No fails means `eligible`\n\n. Unparseable criteria means\n\n`uncertain`\n\n— never a fabricated verdict.\n\nA language model writes the optional two-sentence `narrative`\n\nfield on company\n\nverdicts, the one-sentence `emphasise`\n\nnote on top tender matches, and it\n\nperforms a single text-to-criteria conversion once per grant at ingest time.\n\nIt touches no score, on any endpoint, ever. Every 0–100 number comes from a\n\ndeterministic rule table that ships in the docs, versioned, with each rule that\n\nfired named in the response. You can audit any score by hand, and you can\n\ndisagree with a rule and re-weight it — the tender fit-score returns every\n\nfactor's numerator *and* denominator so you can re-weight client-side without\n\ncalling us again.\n\nThis is a deliberate constraint, not a limitation we are apologising for. A\n\nscore an agent cannot audit is a score an agent should not act on.\n\n| Endpoint | Price | What it answers |\n|---|---|---|\n`GET /v1/company/search` |\n$0.005 | Find a UK company by name |\n`GET /v1/company/{number}` |\n$0.02 | Structured profile, filing dates, officer counts |\n`GET /v1/company/{number}/verdict` |\n$0.10 | 0–100 legitimacy verdict, named flags |\n`GET /v1/company/{number}/fca` |\n$0.02 | FCA register status only |\n`GET /v1/tenders/search` |\n$0.05 | Live UK tenders as briefs |\n`GET /v1/tenders/{ocid}/brief` |\n$0.10 | One tender, full dossier |\n`POST /v1/tenders/fit-score` |\n$0.20 | Supplier profile → scored matches |\n`GET /v1/grants/search` |\n$0.10 | Live GOV.UK grant calls |\n`POST /v1/grants/match` |\n$0.15 | Project profile → eligible grants, ranked |\n`GET /v1/grants/{id}/eligibility` |\n$0.15 | One grant, one project, criteria table |\n`GET /v1/funders/{name}` |\n$0.20 | Funder giving history from 360Giving |\n\nFree, because frameworks probe before they route money: `/v1/health`\n\n,\n\n`/v1/preview`\n\n(a real, freshly-computed sample in the exact paid shape,\n\nrotating daily — add `?wing=tenders`\n\nor `?wing=grants`\n\n), and `/v1/feedback`\n\n.\n\nAlso available as an MCP server at `https://api.ukintel.uk/mcp`\n\n(13 tools,\n\nlisted in the official MCP registry as `uk.ukintel/ukintel`\n\n).\n\nCompanies House is fetched live, cached six hours per company number. Find a\n\nTender and Contracts Finder are indexed on a six-hour cycle — 3,590 notices\n\nright now; an index older than twelve hours drops `confidence`\n\nto medium and\n\nraises an `INGEST_STALE`\n\nflag rather than quietly serving old data. Find a\n\nGrant is a polite daily scrape — sequential, identified user-agent, robots.txt\n\nhonoured every cycle, and if robots ever disallows us we stop and say so with\n\na `SCRAPE_BLOCKED`\n\nflag.\n\nThree things we would rather you heard from us than discovered:\n\n`fca.checked: false`\n\n, the\nfinancial-services rules are skipped, and no FCA claim is made. We never\nassert \"not regulated\" from a failed lookup, only from a successful lookup\nthat found nothing.`eligible`\n\n`PARTIAL_CRITERIA`\n\nand\nstays `uncertain`\n\nrather than being talked up, because those two fields are\nnot the whole rulebook. `result.criteria_provenance.complete`\n\nsays which you\ngot. Coverage is public rather than a number we are asking you to trust:\n`GET /v1/health`\n\nreports `grants_index.with_criteria`\n\nand\n`grants_index.awaiting_criteria`\n\nagainst `grants_index.grants`\n\n(today:\n109 of 120 at full depth).CPV codes are `null`\n\nwhen the source release carries none. We report the\n\nregister; we do not guess.\n\nCompanies House, Find a Tender, Contracts Finder and Find a Grant are Open\n\nGovernment Licence v3.0, attributed in every response. 360Giving publisher\n\ndatasets carry mixed open licences — the funder corpus aggregates 516 of 874\n\npublished datasets across 229 funders, CC-BY-SA datasets are excluded from the\n\nnumbers entirely by policy, exclusions are counted in the response, and every\n\nrecent-award row carries its own source licence. Dossiers describe the covered\n\ncorpus, never the whole sector.\n\nOfficer names and dates of birth are deliberately not returned. Officer counts\n\nand resignation churn are.\n\n```\ncurl https://api.ukintel.uk/v1/preview\ncurl https://api.ukintel.uk/v1/preview?wing=tenders\ncurl https://api.ukintel.uk/v1/preview?wing=grants\n```\n\nReal data, freshly computed, rotating daily, in the exact shape the paid\n\nendpoints return.\n\nIf you use Claude Code, one line connects all 13 tools:\n\n```\nclaude mcp add --transport http ukintel https://api.ukintel.uk/mcp\n```\n\nMachine docs: `/llms.txt`\n\n· `/openapi.json`\n\n· `/.well-known/x402`\n\n·\n\n`/.well-known/agent-card.json`\n\n· MCP at `/mcp`\n\nSomething missing? `POST /v1/feedback`\n\nwith `{\"message\": \"...\"}`\n\nis free, read\n\nby a human, and is the fastest way to get a field added. Or email\n\n`hello@ukintel.uk`\n\n.\n\n**Information, not advice.** These are public register facts and rules-based\n\nscores. A fit-score means fit, never \"you will win\". A grant eligibility\n\nverdict means the stated criteria pass, never \"you will get this grant\" —\n\neligibility is not award, and the funder's assessment decides.", "url": "https://wpnews.pro/news/ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents", "canonical_source": "https://dev.to/ukintel-uk/ukinteluk-uk-company-tender-and-grant-data-as-paid-json-for-agents-4o02", "published_at": "2026-08-24 19:14:28+00:00", "updated_at": "2026-08-24 19:44:14.290356+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["UKintel", "Companies House", "FCA Register", "Find a Tender", "Contracts Finder", "GOV.UK Find a Grant", "DfE"], "alternates": {"html": "https://wpnews.pro/news/ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents", "markdown": "https://wpnews.pro/news/ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents.md", "text": "https://wpnews.pro/news/ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents.txt", "jsonld": "https://wpnews.pro/news/ukintel-uk-uk-company-tender-and-grant-data-as-paid-json-for-agents.jsonld"}}