{"openapi":"3.1.0","info":{"title":"ukintel.uk","version":"1.3.0","description":"Pay-per-call UK intelligence for AI agents, as clean JSON. Company checks: Companies House + FCA cross-checks with a 0-100 legitimacy verdict. Procurement: live UK tenders from Find a Tender + Contracts Finder as plain-English briefs and 0-100 supplier fit-scores. Grants: live GOV.UK funding calls matched to a project profile with ELIGIBLE/UNCERTAIN/INELIGIBLE verdicts, plus funder giving-history from the 360Giving open-data corpus. No signup, no API key.\n\nPayment is per call in USDC over x402 (HTTP 402). No signup and no API key.\n\nInformation, not advice.","contact":{"url":"https://api.ukintel.uk","email":"hello@ukintel.uk"},"license":{"name":"Open Government Licence v3.0 (source data)","url":"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/"}},"servers":[{"url":"https://api.ukintel.uk"}],"paths":{"/v1/company/search":{"get":{"operationId":"companySearch","summary":"Search UK companies by name","description":"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.\n\nReturns: results[] of { company_number, name, status, incorporated, address_snippet }, plus total_matches.","tags":["wing-1"],"parameters":[{"name":"q","in":"query","required":true,"description":"Company name or fragment to search for.","schema":{"type":"string","minLength":2,"maxLength":160},"example":"brewdog"},{"name":"limit","in":"query","required":false,"description":"Number of matches to return, 1-5. Defaults to 5.","schema":{"type":"integer","minimum":1,"maximum":5,"default":5}}],"x-x402":{"price":"$0.005","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/company/{number}":{"get":{"operationId":"companyProfile","summary":"Structured UK company profile","description":"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.\n\nReturns: result = { name, company_number, status, type, incorporated, registered_office, sic_codes[], accounts{}, confirmation_statement{}, officers{ active, total, resigned_last_12m }, age_years }.","tags":["wing-1"],"parameters":[{"name":"number","in":"path","required":true,"description":"UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP).","schema":{"type":"string","pattern":"^([A-Z]{2})?[0-9]{6,8}$"},"example":"SC311560"},{"name":"detail","in":"query","required":false,"description":"Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap.","schema":{"type":"string","enum":["full"]}}],"x-x402":{"price":"$0.02","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/company/{number}/verdict":{"get":{"operationId":"companyVerdict","summary":"0-100 legitimacy verdict on a UK company","description":"Should an agent trust this UK company? Returns a 0-100 verdict and low_risk/caution/high_risk band, with every rule that fired named in the response and the register value that triggered it: STATUS_DISSOLVED, STRIKE_OFF_ACTIVE, ACCOUNTS_OVERDUE, NO_ACTIVE_DIRECTORS, OFFICER_CHURN, FS_SIC_NOT_FCA and 9 more. Rules are deterministic and published, so you can audit the verdict or re-weight it. Never model-scored.\n\nReturns: Everything the profile returns, plus verdict = { score 0-100, band low_risk|caution|high_risk, flags[{code,detail}], fca{}, narrative }.","tags":["wing-1"],"parameters":[{"name":"number","in":"path","required":true,"description":"UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP).","schema":{"type":"string","pattern":"^([A-Z]{2})?[0-9]{6,8}$"},"example":"SC311560"},{"name":"detail","in":"query","required":false,"description":"Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap.","schema":{"type":"string","enum":["full"]}}],"x-x402":{"price":"$0.10","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/company/{number}/fca":{"get":{"operationId":"companyFca","summary":"FCA Financial Services Register status only","description":"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.\n\nReturns: 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.","tags":["wing-1"],"parameters":[{"name":"number","in":"path","required":true,"description":"UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP).","schema":{"type":"string","pattern":"^([A-Z]{2})?[0-9]{6,8}$"},"example":"SC311560"}],"x-x402":{"price":"$0.02","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/tenders/search":{"get":{"operationId":"tendersSearch","summary":"Search live UK tenders as agent-ready briefs","description":"Live UK public-sector tenders from Find a Tender and Contracts Finder in one call. Returns the top 10 matching notices as one-paragraph plain-English briefs with buyer, value, deadline, CPV codes (honest null when the notice carries none) and the official notice link. Searches a 6-hourly refreshed index - no signup with either portal needed.\n\nReturns: result = { total_matched, returned, notices[] of { ocid, title, buyer, value, stage, published, deadline, days_remaining, region, cpv, summary, source{name, notice_url} }, excluded{} } - excluded{} reports notices honest-nulled out by cpv/region/value/deadline filters.","tags":["wing-2"],"parameters":[{"name":"q","in":"query","required":false,"description":"Keywords, synonym-expanded (e.g. 'cleaning' also finds janitorial and hygiene services). At least one of q, cpv or region is required.","schema":{"type":"string","maxLength":200},"example":"cleaning"},{"name":"cpv","in":"query","required":false,"description":"CPV code prefix filter, comma-separated (e.g. 909,45233). Notices without CPV codes are excluded and counted.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"UK nation or English region: scotland, wales, northern-ireland, london, north-east, north-west, yorkshire, east-midlands, west-midlands, east-of-england, south-east, south-west, england.","schema":{"type":"string"},"example":"scotland"},{"name":"value_min","in":"query","required":false,"description":"Minimum stated contract value in GBP.","schema":{"type":"integer","minimum":0}},{"name":"value_max","in":"query","required":false,"description":"Maximum stated contract value in GBP.","schema":{"type":"integer","minimum":0}},{"name":"deadline_after","in":"query","required":false,"description":"Only notices whose submission deadline is on or after this date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"stage","in":"query","required":false,"description":"tender (open competitions, default both) or planning (early engagement).","schema":{"type":"string","enum":["tender","planning"]}}],"x-x402":{"price":"$0.05","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/tenders/fit-score":{"post":{"operationId":"tendersFitScore","summary":"Score live tenders against a supplier profile, 0-100 with per-factor breakdown","description":"Send a supplier profile (what you do, keywords, regions, value band, certifications) and get the best-fitting live UK tenders, each scored 0-100 by deterministic published rules across five factors - relevance, value fit, geography, timeline, buyer history - each with its numerator AND denominator so you can re-weight client-side, plus a what-to-emphasise note on the top matches. Rules score; a model never does.\n\nReturns: result = { considered, matches[] of { ...notice brief..., fit: { score, band strong|possible|weak, factors{ relevance/of, value_fit/of_v, geography/of_g, timeline/of_t, buyer_history/of_b }, flags[], rules_version }, emphasise } }.","tags":["wing-2"],"parameters":[],"x-x402":{"price":"$0.20","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/tenders/{ocid}/brief":{"get":{"operationId":"tenderBrief","summary":"Full dossier on one tender","description":"One tender as a full agent-ready dossier: parsed requirements summary, buyer, value, complete timeline with working-days-remaining, lots, document links, submission route and the official notice URL. CPV codes are null when the source release carries none - we report the register, we never guess.\n\nReturns: result = { ocid, title, buyer, value, stage, published, deadline, days_remaining, region, cpv, summary, description, lots, documents[], submission_url, timeline{}, source{} }.","tags":["wing-2"],"parameters":[{"name":"ocid","in":"path","required":true,"description":"The OCDS contracting-process id, e.g. ocds-h6vhtk-06df8b (FTS) or ocds-b5fd17-… (Contracts Finder). Exactly as returned by /v1/tenders/search.","schema":{"type":"string","pattern":"^ocds-[a-z0-9]{6}-[A-Za-z0-9][A-Za-z0-9-]{0,80}$"},"example":"ocds-h6vhtk-06df8b"}],"x-x402":{"price":"$0.10","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/grants/search":{"get":{"operationId":"grantsSearch","summary":"Search live UK grants","description":"Live UK grant funding calls from GOV.UK Find a Grant in one call: name, funder, amount range, opening/closing dates, who can apply, one-line summary and the official source link. Filter by keywords, nation, applicant type and amount band. Indexed daily from the official listing - the service has no API of its own, so this is the machine-readable version.\n\nReturns: result = { total_matched, returned, grants[] of { id, name, funder, amounts{min,max,text}, window{opens,closes,open_now,days_to_close}, who_can_apply, org_types, regions, summary, criteria_parsed, criteria_basis seed|llm|listing|null, source_url }, excluded{} }.","tags":["wing-3"],"parameters":[{"name":"q","in":"query","required":false,"description":"Keywords matched against grant names, summaries, funders and descriptions (light stemming). At least one criterion is required.","schema":{"type":"string","maxLength":200},"example":"woodland"},{"name":"region","in":"query","required":false,"description":"UK nation: england, scotland, wales, northern-ireland (or uk for UK-wide only).","schema":{"type":"string"},"example":"england"},{"name":"org_type","in":"query","required":false,"description":"Applicant type: individual, business, charity, community_group, public_body, local_authority, education (synonyms like sole-trader, cic, council are mapped).","schema":{"type":"string"},"example":"charity"},{"name":"min","in":"query","required":false,"description":"Only grants whose maximum award is at least this many GBP.","schema":{"type":"integer","minimum":0}},{"name":"max","in":"query","required":false,"description":"Only grants whose minimum award is at most this many GBP.","schema":{"type":"integer","minimum":0}},{"name":"open_now","in":"query","required":false,"description":"Default true: only grants currently open for applications. Set to false to include closed/not-yet-open listings.","schema":{"type":"string","enum":["true","false"]}}],"x-x402":{"price":"$0.10","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/grants/match":{"post":{"operationId":"grantsMatch","summary":"Match a project profile to eligible UK grants, ranked","description":"Send a project profile (what it is, who you are, where, how much you need) and get back the live UK grants it could actually get - ranked eligible-first with a per-criterion pass/fail table for every match, from criteria parsed once at ingest from each grant's own eligibility text. Ineligible grants are excluded and counted, never dressed up as options. Deterministic rules; no language model touches the verdicts.\n\nReturns: result = { considered, matches[] of { grant summary + eligibility { band eligible|uncertain, score, criteria[{code,requirement,pass,detail}], missing[], flags[] } , relevance }, excluded{ineligible, closed} }.","tags":["wing-3"],"parameters":[],"x-x402":{"price":"$0.15","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/grants/{id}/eligibility":{"get":{"operationId":"grantEligibility","summary":"ELIGIBLE / UNCERTAIN / INELIGIBLE verdict for one grant, one project","description":"One grant, one project: a deterministic eligibility verdict with the full criteria table - each criterion quoted from the grant's own eligibility text, marked pass/fail/undeclared - plus what is missing to firm it up and indicative funding. Criteria are parsed once at ingest, never guessed at request time; if the full text is not parsed yet the verdict uses Find a Grant's listing fields, flagged PARTIAL_CRITERIA, and criteria_provenance says so.\n\nReturns: result = { grant{name,funder,window,amounts,source_url}, criteria[{code,requirement,pass,detail}], missing[], failed[], indicative_funding, criteria_provenance{source,complete,parsed_at,eligibility_text_available} }, verdict = { score, band eligible|uncertain|ineligible, flags[] }.","tags":["wing-3"],"parameters":[{"name":"id","in":"path","required":true,"description":"Grant id: the Find a Grant slug exactly as returned by /v1/grants/search (e.g. england-woodland-creation-offer-ewco-1), or a curated short alias like ewco.","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,120}$"},"example":"ewco"},{"name":"org_type","in":"query","required":false,"description":"Applicant type slug (individual, business, charity, community_group, public_body, local_authority, education).","schema":{"type":"string"},"example":"individual"},{"name":"region","in":"query","required":false,"description":"Where the project is: england, scotland, wales, northern-ireland.","schema":{"type":"string"},"example":"england"}],"x-x402":{"price":"$0.15","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/funders/{name}":{"get":{"operationId":"funderDossier","summary":"Funder dossier from 1.4M+ published UK grants","description":"Who actually funds things like yours: one UK funder's giving history aggregated from the 360Giving open-data corpus - grants made, total and typical award, size distribution, yearly pattern, most recent named awards - plus any of their grant schemes live on Find a Grant right now. Licences are respected per dataset (share-alike data is excluded from the numbers, and every recent-award row carries its source licence).\n\nReturns: result = { funder{name,ids}, match_quality, giving { grants_made, total_awarded_gbp, years, size_distribution_gbp{min,p25,median,p75,max,mean}, yearly{}, typical_award_gbp }, recent_awards[] (each with licence + publisher), live_grants_now[], coverage }.","tags":["wing-3"],"parameters":[{"name":"name","in":"path","required":true,"description":"Funder name or slug, e.g. national-lottery-heritage-fund, \"Esmée Fairbairn Foundation\", or a GB-CHC-… org id.","schema":{"type":"string","minLength":2,"maxLength":120},"example":"national-lottery-heritage-fund"}],"x-x402":{"price":"$0.20","currency":"USDC","network":"eip155:8453","payTo":"0x8aa6a85a2723e2816204f3cf48d76b84bafdaab4","scheme":"exact"},"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"402":{"description":"Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found on the register."}}}},"/v1/health":{"get":{"operationId":"health","summary":"Service status (free)","description":"Liveness and upstream health. Free, because frameworks probe before they route money.\n\nReturns: status, version, network, upstreams{}, rules_version, warnings[].","tags":["free"],"parameters":[],"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"404":{"description":"Not found on the register."}}}},"/v1/preview":{"get":{"operationId":"preview","summary":"A real sample answer, rotating daily (free)","description":"A genuine, freshly-computed sample so an agent can see the exact response shape before spending anything. Default: a real company verdict, rotating daily. Add ?wing=tenders for a real live-tender brief, or ?wing=grants for a real grant eligibility verdict - all rotating daily. Every response carries the same envelope: query, result, verdict, confidence, as_of, sources, attribution, notice, cost.\n\nReturns: The identical envelope returned by the paid endpoints: /v1/company/{number}/verdict by default, /v1/tenders/{ocid}/brief with ?wing=tenders, /v1/grants/{id}/eligibility with ?wing=grants.","tags":["free"],"parameters":[{"name":"wing","in":"query","required":false,"description":"Which product family to sample: company (default), tenders or grants.","schema":{"type":"string","enum":["company","tenders","grants"]}}],"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"404":{"description":"Not found on the register."}}}},"/v1/feedback":{"post":{"operationId":"feedback","summary":"Tell us what you wish this returned (free)","description":"Agent wish-list intake. Send { message, endpoint?, contact? } and it lands in our inbox. Free, and it directly shapes what gets built next.\n\nReturns: { received: true, id }.","tags":["free"],"parameters":[],"responses":{"200":{"description":"Success. The shared response envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Malformed request (for example, an invalid company number)."},"404":{"description":"Not found on the register."}}}}},"components":{"schemas":{"Flag":{"type":"object","required":["code","detail"],"properties":{"code":{"type":"string","examples":["ACCOUNTS_OVERDUE"]},"detail":{"type":"string"}}},"Verdict":{"type":"object","required":["score","band","flags","narrative"],"properties":{"score":{"type":["integer","null"],"minimum":0,"maximum":100},"band":{"type":["string","null"],"enum":["low_risk","caution","high_risk",null]},"flags":{"type":"array","items":{"$ref":"#/components/schemas/Flag"}},"narrative":{"type":["string","null"],"description":"At most two sentences. Written by a language model, which never affects the score. Null if unavailable."}}},"Source":{"type":"object","required":["name","fetched","url"],"properties":{"name":{"type":"string"},"fetched":{"type":["string","null"],"format":"date-time"},"url":{"type":["string","null"]}}},"Envelope":{"type":"object","required":["query","result","verdict","confidence","as_of","sources","attribution","notice","cost"],"properties":{"query":{"type":"object"},"result":{"type":["object","null"]},"verdict":{"$ref":"#/components/schemas/Verdict"},"confidence":{"type":"string","enum":["high","medium","low"]},"as_of":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"attribution":{"type":"string"},"notice":{"type":"string","const":"Information, not advice."},"cost":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string"},"currency":{"type":"string","const":"USDC"}}}}}}}}