# Company Deadlines

Every date a UK company has, in one call, and a calendar feed you subscribe to.

Accounts, confirmation statement, identity-verification dates (as counts), ICO fee renewal, payment practices and gender pay gap reporting: one sorted list with days left, and a free calendar feed.

Companies House gives two dates. A company has more: accounts and the confirmation statement, yes, but also each director's and PSC's identity-verification date (the last of them falls on 1 December 2026), the ICO data protection fee renewal, and, where the company reports them, the next payment practices report and the next gender pay gap report. This endpoint reads all of them from the public registers and services we already hold and gives them back as one sorted list with days left, overdue first. It also gives you a calendar feed address for the company, free, that Outlook, Google Calendar and Apple Calendar refresh by themselves. People are counted, never named.

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

## Endpoints

- `GET /api/v1/deadlines?company=…` — By company number or name; the reply carries the calendar feed's address
- `GET /api/v1/deadlines.ics?company=…&t=…` — The calendar feed (text/calendar), free: subscribe to it

## Call it

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

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/deadlines?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/deadlines?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" },
  "deadlines": [
    { "kind": "idv", "title": "1 of 10 people still to show a verified identity", "due": "2026-11-27", "daysLeft": 51, "status": "upcoming", "source": "Companies House" },
    { "kind": "accounts", "title": "Annual accounts due at Companies House", "due": "2027-04-03", "daysLeft": 178, "status": "upcoming", "source": "Companies House" },
    { "kind": "confirmation_statement", "title": "Confirmation statement due at Companies House", "due": "2027-04-28", "daysLeft": 203, "status": "upcoming", "source": "Companies House" }
  ],
  "next": { "title": "1 of 10 people still to show a verified identity", "due": "2026-11-27", "daysLeft": 51 },
  "calendar": { "url": "https://meetkatalis.com/api/v1/deadlines.ics?company=00502851&t=cal_…" }
}
```

## What you'd build with it

- **Accountants' practice tools.** Every client company's dates in the tool your staff already live in, with the ID-verification countdown their own software doesn't show.
- **Client reminders.** A practice subscribes each client's feed and the dates sit in the shared calendar; a reminder goes out before the register says overdue.
- **Onboarding checks.** A supplier or borrower with an overdue filing shows it on day one.

## Why this one

- **Beyond the register's two dates.** ID verification per person, the ICO fee, payment practices and pay gap reporting: dates nobody else joins up.
- **A feed, not a lookup.** One free calendar address per company that refreshes itself twice a day; the dates live where the work is planned.
- **Honest statuses.** overdue, due soon, upcoming, ok, or 'check' when a register entry couldn't be found: never a guess dressed as a date.

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