---
title: "Score live tenders against a supplier profile, 0-100 with per-factor breakdown"
method: POST
path: "/v1/tenders/fit-score"
tags: ["wing-2"]
---

# Score live tenders against a supplier profile, 0-100 with per-factor breakdown

`POST /v1/tenders/fit-score`

## Request

- Base URL: `https://api.ukintel.uk`
- URL: `https://api.ukintel.uk/v1/tenders/fit-score`
- Auth: none declared

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.

Returns: 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 } }.

## 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)
