---
title: "Is the Companies House API down?"
method: GET
path: "/v1/health/companies-house"
tags: ["Health"]
---

# Is the Companies House API down?

`GET /v1/health/companies-house`

## Request

- Base URL: `https://api.registrum.co.uk`
- URL: `https://api.registrum.co.uk/v1/health/companies-house`
- Auth: none required

Measured status of the official Companies House REST API.

Registrum samples Companies House every few minutes from its own servers
and keeps the results. This endpoint turns them into a status (up,
degraded, down or unknown), recent latency, 24-hour uptime and a list of
incidents from the last 7 days. It is what the public page at
https://registrum.co.uk/companies-house-api-status shows.

- **up** - the latest sample was a fast 200
- **degraded** - slow (over 2s), a 429, or a single failed sample
- **down** - two consecutive samples got a 5xx or no answer
- **unknown** - no sample in the last 15 minutes; nothing is claimed

An incident is two or more consecutive failing samples, so one blip is
not reported as an outage. This measures reachability from Registrum, not
every Companies House endpoint.

No authentication required. Responses are cacheable for 60 seconds.

**Upstream usage:** 0 - reads stored samples only.

## Response `200`

Measured Companies House status. `unknown` when there is no recent sample; never assumed to be up.

- CHStatusResponse: Measured status of the official Companies House REST API.
  - `status` string, required: 'up', 'degraded' (slow, 429, or one failed sample), 'down' (two consecutive failed samples), or 'unknown' (no recent sample, so nothing is claimed)
  - `checked_at` string, nullable: ISO 8601 time of the most recent sample, or null if there is none
  - `latency_ms` number, nullable: Response time of the most recent sample in milliseconds, null if it got no answer
  - `latency_p50_ms_24h` number, nullable: Median response time over the last 24 hours, in milliseconds
  - `latency_p95_ms_24h` number, nullable: 95th percentile response time over the last 24 hours, in milliseconds
  - `uptime_24h_percent` number, nullable: Share of samples in the last 24 hours that were fully healthy, 0-100
  - `samples_24h` integer, required: Number of samples behind the 24-hour figures
  - `incidents` CHIncident[]: Incidents in the last 7 days, newest first (at most 20)
    - `started_at` string, required: ISO 8601 time of the first failing sample
    - `ended_at` string, nullable: ISO 8601 time of the first healthy sample after it, or null while the incident is ongoing
    - `duration_seconds` integer, required: Seconds from the first failing sample to recovery (or to now, if ongoing)
    - `severity` string, required: 'down' if any sample got a 5xx or no answer, otherwise 'degraded' (slow responses or 429)
    - `samples` integer, required: Number of failing samples in the incident
    - `status_codes` integer[]: Distinct non-200 HTTP status codes Companies House returned during it (timeouts and slow 200s have none)
  - `sample_interval_minutes` integer, required: How often Companies House is sampled
  - `measured_from` string, required: Plain-language statement of what is measured and how
  - `generated_at` string, required: ISO 8601 time this response was computed

## Other responses

- `500`: Unexpected server error while computing the status. Retry shortly; do not read this as a Companies House outage.
- `503`: Registrum's own request deadline was exceeded. This says nothing about Companies House; retry shortly.

---

[API](https://skmtc.dev/registrum/apis/registrum-api.md) · [All operations](https://skmtc.dev/registrum/apis/registrum-api/llms.txt) · [OpenAPI document](https://skmtc.dev/registrum/apis/registrum-api/revisions/2bf0ecf7cc02?raw)
