# Company Distress Signals

Is this customer or supplier in trouble? What the Companies House register shows, in one call.

Status (liquidation, administration, dissolved), strike-off proposals, insolvency cases with dates, overdue accounts or confirmation statement, recent charges and directors leaving, each graded serious / watch / information, with a one-line summary. Up to 50 companies per call.

Before you extend credit, sign a supplier or chase a debt, the warning signs are usually already public: an insolvency case, a proposal to strike the company off, accounts months overdue, new charges against its assets, directors leaving. They sit across four different Companies House pages. This endpoint reads them all for a company number and returns each signal with its date and a clear level (serious, watch or information), plus one plain summary. If part of the register couldn't be read just now, the overall level says "unread" and lists which part, never a false all-clear. Matching is by company number only, so a company with a similar name is never caught up in someone else's trouble.

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

## Endpoints

- `GET /api/v1/distress-signals?company=…` — One company, by number or name (a name resolves to one company, named in the reply)
- `POST /api/v1/distress-signals` — Body: { "companies": ["01234567", …] } — up to 50 company numbers

## Call it

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

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/distress-signals?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/distress-signals?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": "SUNDERLAND MARINE INSURANCE COMPANY LIMITED", "number": "00016432", "status": "dissolved", "incorporatedOn": "1882-02-17" },
  "level": "serious",
  "signals": [
    { "code": "status:dissolved", "level": "serious", "says": "The company has been dissolved: it no longer exists.", "date": "2023-05-02" }
  ],
  "summary": "Serious signals on the register: The company has been dissolved: it no longer exists.",
  "partial": []
}
```

## What you'd build with it

- **Credit control.** Check every debtor weekly; the ones that move to watch or serious go to the top of the chase list.
- **Supplier onboarding.** Screen a new supplier before the first order, and again before the big one.
- **Trade credit and invoice finance.** A register read with dates, next to every application, in the format your rules already use.

## Why this one

- **Four register pages, one answer.** Profile, insolvency, charges and officers read together, graded, dated and summarised.
- **By number, never by name.** No fuzzy name matching into someone else's insolvency: the reply always names the company it read.
- **Worded as the record shows it.** "An insolvency case is recorded", never "this company is going bust": facts with dates, not verdicts about people.
- **Bulk for credit teams.** 50 companies per call, with counts of serious and watch, ready for a weekly debtor check.

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