---
title: "Match a project profile to eligible UK grants, ranked"
method: POST
path: "/v1/grants/match"
tags: ["wing-3"]
---

# Match a project profile to eligible UK grants, ranked

`POST /v1/grants/match`

## Request

- Base URL: `https://api.ukintel.uk`
- URL: `https://api.ukintel.uk/v1/grants/match`
- Auth: none declared

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.

Returns: result = { considered, matches[] of { grant summary + eligibility { band eligible|uncertain, score, criteria[{code,requirement,pass,detail}], missing[], flags[] } , relevance }, excluded{ineligible, closed} }.

## Response `200`

Success. The shared response envelope.

- Envelope
  - `query` object, required
  - `result` object, nullable, required
  - `verdict` Verdict, required
    - `score` integer, nullable, required
    - `band` 'low_risk' | 'caution' | 'high_risk' | 'null', nullable, required
    - `flags` Flag[], required
      - `code` string, required
      - `detail` string, required
    - `narrative` string, nullable, required: At most two sentences. Written by a language model, which never affects the score. Null if unavailable.
  - `confidence` 'high' | 'medium' | 'low', required
  - `as_of` string, date-time, required
  - `sources` Source[], required
    - `name` string, required
    - `fetched` string, date-time, nullable, required
    - `url` string, nullable, required
  - `attribution` string, required
  - `notice` 'Information, not advice.', required
  - `cost` object, required
    - `amount` string, required
    - `currency` 'USDC', required

## Other responses

- `400`: Malformed request (for example, an invalid company number).
- `402`: Payment required. The PAYMENT-REQUIRED response carries the accepted payment terms; pay and retry the identical request.
- `404`: Not found on the register.

---

[API](https://skmtc.dev/ukintel/apis/ukintel-uk.md) · [All operations](https://skmtc.dev/ukintel/apis/ukintel-uk/llms.txt) · [OpenAPI document](https://skmtc.dev/ukintel/apis/ukintel-uk/revisions/0eed96aea8af?raw)
