# Director ID Verification Check

Every director and PSC of a UK company: is a verified identity showing, and by when must it be?

For each UK company: every director and PSC, whether a verified identity is showing on the Companies House register, the company's own date as the register gives it (the earliest still owed: a director's is the company's confirmation statement filing date, a PSC who isn't a director verifies in the first 14 days of their birth month), and a count of who isn't showing yet. Up to 50 companies per call.

Since 18 November 2025 every new director and person with significant control must verify their identity with Companies House, and every existing director by their own date: the filing deadline of the company's first confirmation statement after that (the last fall on 1 December 2026); a PSC who isn't a director verifies in the first 14 days of their birth month. The register now shows who has, and each person's date. Accountants, company secretaries and formation agents are checking whole client books by hand, one company page at a time. This endpoint reads the register for up to 25 companies per call and returns, for each: every director and PSC, whether a verified identity shows against them, and the deadline that applies to that company. Status is phrased as the register shows it, never as a finding about anyone.

- Price: 1 credit
- Page: https://meetkatalis.com/apis/idv-check
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/idv-check?company=…` — One company, by number or name
- `POST /api/v1/idv-check` — Body: { "companies": ["01234567", …] } — up to 50 company numbers

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/idv-check?company=00502851"
```

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/idv-check?company=00502851", {
  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/idv-check?company=00502851",
    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": "GREGGS PLC", "number": "00502851", "status": "active", "confirmationNextDue": "2027-04-28" },
  "registerRead": true,
  "active": true,
  "deadline": { "backstop": "2026-12-01", "effective": "2027-04-28", "daysLeft": 203, "source": "confirmation-statement", "confirmationOverdue": false, "pscsOwnDate": { "count": 0, "notShowing": 0, "windowPassedNotShowing": 0 } },
  "summary": { "total": 8, "verified": 8, "notShowing": 0 },
  "people": [
    { "name": "(shown to verified accounts)", "role": "director", "appointedOn": "2022-02-01", "verifiedOnRegister": true, "verificationShownFrom": "2026-04-16" },
    { "name": "(shown to verified accounts)", "role": "director", "appointedOn": "2026-07-01", "verifiedOnRegister": true, "verificationShownFrom": "2026-07-03" },
    "… 6 more"
  ]
}
```

## What you'd build with it

- **Accountants' client books.** Check every client company and its own date, and write to the ones with people not showing, in one run.
- **Company secretarial software.** Put a verification column next to every officer in the portal, refreshed weekly.
- **Formation agents and banks.** Confirm that the people on a new customer's company show as verified before onboarding.

## Why this one

- **The date that actually applies.** Not "18 November for everyone": each person's own date, read from the register (with the confirmation statement as the fallback), and an overdue filing kept separate from the ID date.
- **Bulk, not one page at a time.** 50 companies per call, with the count of companies that have people not showing, ready for a mail-merge.
- **Honest wording built in.** "Not showing on the register", never "unverified": the register can lag, and the response says so.
- **Straight from the register.** Read live from Companies House (Open Government Licence), attributed in every response.

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