# Public Contracts Won

What public-sector work has this company won? Every published award, totalled and read.

The public-sector contracts a UK company has been awarded (Contracts Finder and Find a Tender): count, notified value, top buyers and the latest awards with links. History is about two years and growing (complete from September 2025).

Every contract a public body awards has to be published, on Contracts Finder or Find a Tender, but the notices are listed by buyer and date, not by who won them. This endpoint turns that round: give it a company and it returns the public-sector awards it has won, how much they're worth as notified, which buyers it wins from most, and the latest few with links to the notices. A notice is matched to the company by its company number where the notice gives one, else by the exact registered name, never a looser match, and each award says which.

- Price: 1 credit
- Page: https://meetkatalis.com/apis/contracts-won
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/contracts-won?company=…` — By company number or name; optional &months=1–60 (default 24)

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/contracts-won?company=02174990"
```

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/contracts-won?company=02174990", {
  headers: { "x-api-key": process.env.KATALIS_API_KEY },
});
if (!res.ok) throw new Error(`Katalis ${res.status}: ${await res.text()}`);
console.log(await res.json());
```

```python
import os, requests

r = requests.get(
    "https://meetkatalis.com/api/v1/contracts-won?company=02174990",
    headers={"x-api-key": os.environ["KATALIS_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
print(r.json())
```

## Example response (a real reply)

```json
{
  "company": { "name": "CIVICA UK LIMITED", "number": "01628868" },
  "months": 24,
  "awards": 202,
  "notifiedValueGBP": 242219126,
  "topBuyers": [
    { "buyer": "BANK OF ENGLAND", "awards": 5, "notifiedValue": 180956297 },
    { "buyer": "Home Office", "awards": 2, "notifiedValue": 7635060 },
    { "buyer": "Westmorland and Furness Council", "awards": 3, "notifiedValue": 3966318 }
  ],
  "reading": "CIVICA UK LIMITED has 202 published public-sector awards in the last 24 months, with a notified value of £242.2m; its biggest buyer is BANK OF ENGLAND. The latest: "iCasework" from Greater Manchester Combined Authority (2026-10-01).",
  "latest": [
    { "title": "iCasework", "buyer": "Greater Manchester Combined Authority", "date": "2026-10-01", "value": 417163, "currency": "GBP", "sme": false, "source": "Find a Tender", "matchedBy": "number" },
    { "title": "Legal Case Management Software", "buyer": "Bournemouth, Christchurch and Poole Council", "date": "2026-09-29", "value": 135675, "currency": "GBP", "sme": false, "source": "Find a Tender", "matchedBy": "number" }
  ],
  "disclaimer": "Built from published award notices on Contracts Finder and Find a Tender since we started collecting them. Not every contract is published, values are as notified (framework values are often ceilings, not spend), and a notice is matched to a company by its company number or its exact registered name."
}
```

## What you'd build with it

- **Bid teams sizing competitors.** See who keeps winning the frameworks you're going for, and which buyers they're strongest with.
- **Sales to public-sector suppliers.** Find companies that have just won public work and will be hiring, buying and subcontracting.
- **Due diligence.** A supplier's public track record in one call, next to its Companies House record.

## Why this one

- **Turned round to the winner.** The feeds list notices by buyer; this answers "what has this company won".
- **Both national feeds.** Contracts Finder and Find a Tender award notices, loaded every week.
- **Strict matching, shown.** Company number first, exact registered name second, never fuzzy; every award says how it was matched.
- **Honest about values.** Notified values, with the caveat that framework values are often ceilings, not spend.

## Conventions

- Auth: `x-api-key: kat_live_…` on every request (free key at https://meetkatalis.com/developers: a verified email and mobile, 100 credits a month, no card).
- One credit balance across every API; each endpoint's price is on its page and in `x-credits` in https://meetkatalis.com/openapi.yaml.
- Keys are camelCase everywhere. A registered company is `company: { name, number, status, statusDetail?, filingsOverdue? }` on the register endpoints; the enrichment family (enrich, score, assess, brand-kit, ai-visibility, tender-match) keeps `business` / `profile` with `companyNumber`.
- Every error has `code` and `requestId`; every reply an `x-request-id` header; a charged reply `x-credits-remaining`; a reply that gave credits back `x-credits-refunded`. Missing = 404 with `query`.
- Burst ceiling 60 requests a minute per key (429, `Retry-After`, no credits used). A failure on our side (5xx) gives the call's credits back.
- Company data contains public sector information licensed under the Open Government Licence v3.0.

Provided "as is"; results come from public sources and, in places, AI, and may be inaccurate or out of date; not legal, professional or credit advice. Terms: https://meetkatalis.com/apis/terms