# ukintel.uk > Pay-per-call UK intelligence for AI agents. Companies House + FCA cross-checks with a 0-100 legitimacy verdict, as clean JSON. No signup, no API key. Pay per call in USDC over the x402 protocol (HTTP 402). No account, no API key, no rate-limit negotiation: call the endpoint, get a 402 with payment terms, pay, retry. That is the whole integration. Base URL: https://api.ukintel.uk Payment network: eip155:84532 (Base Sepolia testnet) Asset: USDC · Pay to: 0x1Da3f92E65659acBF0Bf1a739ba3Bc72E5eF7C1d Machine docs: https://api.ukintel.uk/openapi.json · https://api.ukintel.uk/.well-known/x402 ## Why an agent would pay for this Companies House and the FCA register are free but awkward: you need an account you cannot create mid-task, the shapes differ, and turning raw filings into a judgement costs you thousands of tokens per company. This returns the judgement, already made, in about 800 tokens, with every rule that fired named so you can audit or override it. ## The response envelope - identical on every endpoint ```json { "query": { ...echo of what was asked... }, "result": { ...the endpoint payload... }, "verdict": { "score": 0-100 | null, "band": "low_risk|caution|high_risk" | null, "flags": [ { "code": "...", "detail": "..." } ], "narrative": "<= 2 sentences, may be null" }, "confidence": "high | medium | low", "as_of": "ISO-8601 - when WE fetched the underlying data, not when you asked", "sources": [ { "name": "Companies House", "fetched": "ISO-8601", "url": "..." } ], "attribution": "Open Government Licence v3.0 ...", "notice": "Information, not advice.", "cost": { "amount": "0.10", "currency": "USDC" } } ``` Guarantees: deterministic key order · explicit nulls, never missing keys · no HTML anywhere · about 800 tokens by default, `?detail=full` lifts the cap · `as_of` is our fetch time, never your request time. `confidence` is high when every source was fetched fresh or served from cache within its window; medium when a source was stale; low when a source failed and we answered from cache - and then the failure is named in `flags`. We serve slightly old data rather than a 500. ## Paid endpoints ### GET /v1/company/search — $0.005 Find a UK company by name. Returns the top 5 matches from the Companies House register with number, name, status and incorporation date. Taster tier - cheap enough to try on a whim before paying for a full profile or verdict. Returns: results[] of { company_number, name, status, incorporated, address_snippet }, plus total_matches. Parameters: - `q` (query, required) — Company name or fragment to search for. - `limit` (query, optional) — Number of matches to return, 1-5. Defaults to 5. ### GET /v1/company/{number} — $0.02 One UK company as clean structured JSON: status, incorporation date, company type, SIC codes, registered office, accounts and confirmation-statement due dates with overdue booleans, and officer counts. Sourced live from Companies House. Returns: result = { name, company_number, status, type, incorporated, registered_office, sic_codes[], accounts{}, confirmation_statement{}, officers{ active, total, resigned_last_12m }, age_years }. Parameters: - `number` (path, required) — UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP). - `detail` (query, optional) — Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap. ### GET /v1/company/{number}/verdict — $0.10 Check any UK company is real, active and safe to deal with. One call returns Companies House registration, filing health, officer stability and an FCA-regulation cross-check as clean JSON with a 0-100 risk verdict, named flags you can audit, and a two-sentence plain-English narrative. Scores are computed by deterministic rules, never by a language model. Returns: Everything the profile returns, plus verdict = { score 0-100, band low_risk|caution|high_risk, flags[{code,detail}], fca{}, narrative }. Parameters: - `number` (path, required) — UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP). - `detail` (query, optional) — Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap. ### GET /v1/company/{number}/fca — $0.02 Is this UK company regulated by the Financial Conduct Authority? Returns register status, a permissions summary and any warnings - sold separately from the full verdict because fintech-vetting agents often want only this. Returns: result.fca = { checked, regulated, frn, firm_name, status, permissions_summary, warnings[], note }. When the register is unavailable, checked=false and the reason is named - never a 500. Parameters: - `number` (path, required) — UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP). ## Free endpoints - `GET /v1/health` — Liveness and upstream health. Free, because frameworks probe before they route money. - `GET /v1/preview` — A genuine, freshly-computed verdict for a rotating real UK company, so an agent can see the exact response shape before spending anything. Every response carries the same envelope: query, result, verdict, confidence, as_of, sources, attribution, notice, cost. - `POST /v1/feedback` — Agent wish-list intake. Send { message, endpoint?, contact? } and it lands in our inbox. Free, and it directly shapes what gets built next. Probe before you route money: `GET https://api.ukintel.uk/v1/preview` returns a real, freshly-computed verdict for a rotating company, in the exact response shape, for nothing. ## How the verdict score is computed Rules version 1.0.0. Every score is produced by the deterministic table below - a language model writes the `narrative` field and nothing else. Score starts at 100, deductions apply, then any status cap is applied, then the result is clamped to 0-100. | Flag code | Trigger | Effect | |---|---|---| | STATUS_DISSOLVED | Companies House status is dissolved, converted-closed, removed or closed | cap score at 5 | | STATUS_ADMINISTRATION | Companies House status is administration, liquidation, receivership or insolvency-proceedings | cap score at 20 | | STRIKE_OFF_ACTIVE | Status detail is active-proposal-to-strike-off | cap score at 35 | | ACCOUNTS_OVERDUE | Annual accounts are past their due date and not filed | -25 | | CONF_STATEMENT_OVERDUE | Confirmation statement is past its due date and not filed | -15 | | YOUNG_COMPANY | Incorporated less than 12 months ago | -10 | | DORMANT | Latest accounts filed are of type dormant | -10 | | OFFICER_CHURN | Two or more officer resignations in the trailing 12 months | -10 | | NO_ACTIVE_DIRECTORS | Zero active directors listed | -20 | | FS_SIC_NOT_FCA | A SIC code in the 64/65/66 financial-services range with no match on the FCA register (only applied when the FCA register was actually consulted) | -20 | | FCA_WARNING | On the FCA register with restrictions or warnings | -15 | | CHARGES_INFO | Outstanding charges registered - informational only, normal for financed firms | informational only (0) | | STATUS_VOLUNTARY_ARRANGEMENT | Companies House status is voluntary-arrangement (a formal insolvency procedure) | -25 | | INSOLVENCY_HISTORY | Register records prior insolvency history - informational only | informational only (0) | | OFFICERS_UNAVAILABLE | Officer data could not be fetched - the two officer rules are skipped and confidence drops | informational only (0) | Bands: 80-100 low_risk · 50-79 caution · 0-49 high_risk. ## Data sources, freshness and licensing - Companies House Public Data API — fetched live, cached 6 hours per company number. - FCA Financial Services Register — currently in fallback mode on this deployment: not consulted, `fca.checked` is false, and the financial-services rules are skipped. No FCA claim is made. - Contains public sector information licensed under the Open Government Licence v3.0 (Companies House). - FCA register data (c) FCA. - Information, not advice. We return public register facts and a rules-based score, not advice. Officer names and dates of birth are deliberately not returned. Officer counts and resignation churn are. ## Something missing? `POST https://api.ukintel.uk/v1/feedback` with `{ "message": "..." }` is free and read by a human. It is the fastest way to get a field added.