Stratum
API reference · version 1.0.0

UK Companies House Watch

The PSC ownership tree, the disqualified directors register and a daily change feed, by API.

Base address
https://api.stratumapis.com/v1/ch
Your key
The X-Stratum-Key header, with the key from your API page. Paid per call from your API balance, with no plan (add money on your API page).
Prices
  • A company’s record, its ownership changes, or a disqualified directors check5p (2p from 1,000 a month)
  • The ownership tree (owners through every layer)£1.49 (79p from 1,000 a month)
  • The company watchlist and its changesFor keys that hold an older per-API plan; use the transactions API’s daily watch instead
Every reply carries X-Stratum-Credit-Balance-Pence; a refusal or a source failure is never charged. Limits and prices.
OpenAPI
Download the OpenAPI file (JSON)

Endpoints

gethttps://api.stratumapis.com/v1/ch/companies/{number}

Single company lookup, cached

Returns a normalised company profile plus active officers plus flag fields, fetched live from Companies House and cached for 24 hours.

Parameters
  • numberrequiredin path · Companies House number (eight chars; SC, NI, OC prefixes preserved; bare digits left-padded to eight)
Example request
curl -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/companies/00445790"
Errors
  • 401 Missing or invalid API key
  • 404 No such company
  • 503 Companies House could not be read just now (error code companies_house_unavailable). Not charged; try again shortly.
gethttps://api.stratumapis.com/v1/ch/companies/{number}/psc-tree

PSC tree + UBO computation (B-CH-2)

Walks the Persons-with-Significant-Control structure for a UK company, recursing into corporate PSCs that are themselves UK-registered, up to the requested depth limit (capped at 5). Computes UBOs (≥25% effective ownership through the chain, or a control nature like right-to-appoint-and-remove-directors per MLR-2017 reg 5(1)(c)). Cycle + depth-limit cases are flagged via unresolved + unresolvedUboReason so the caller can surface the warning to the customer. Cached server-side for 1 day.

Parameters
  • numberrequiredin path · Companies House number of the corporate landlord / customer
  • depthin query · Maximum recursion depth. Defaults to 5 hops.
Example request
curl -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/companies/00445790/psc-tree"
Errors
  • 404 No such company
  • 503 Companies House could not be read just now (error code companies_house_unavailable). Not charged; try again shortly.
gethttps://api.stratumapis.com/v1/ch/monitored

List monitored Companies House numbers for this API key

Example request
curl -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/monitored"
puthttps://api.stratumapis.com/v1/ch/monitored

Replace the full set of monitored Companies House numbers

Example request
curl -X PUT -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/monitored"
Request body
{
  "type": "object",
  "required": [
    "numbers"
  ],
  "properties": {
    "numbers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 0,
      "maxItems": 1000
    }
  }
}
Errors
  • 413 Tier cap exceeded
deletehttps://api.stratumapis.com/v1/ch/monitored/{number}

Remove a single Companies House number from the monitored set

Parameters
  • numberrequiredin path
Example request
curl -X DELETE -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/monitored/00445790"
Errors
  • 404 Not in the monitored set
gethttps://api.stratumapis.com/v1/ch/changes

Changes feed for monitored companies since a given date

Parameters
  • sincerequiredin query · Lower bound (YYYY-MM-DD). Capped at the tier history window (Starter 14d, Growth 90d, Pro 365d).
  • limitin query
Example request
curl -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/changes?since=Jane%20Smith"
gethttps://api.stratumapis.com/v1/ch/companies/{number}/psc-velocity

PSC ownership-velocity flag (W30 iter 3)

Counts PSC notification + cessation events on the company over the trailing 12-month window. Severity bands: low (0-1 changes: stable BTL territory), medium (2 changes: one normal ownership transfer = cessation+notification pair), high (3+ changes: restructure or fraud signal worth investigating). Fast path: one CH /psc fetch, no walk. Returns { changesIn12m, totalChangesObserved, lastChangeDate, severity, hasActivePscs, message, generatedAt }.

Parameters
  • numberrequiredin path · Companies House number
Example request
curl -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/companies/00445790/psc-velocity"
Errors
  • 404 No company with that number
posthttps://api.stratumapis.com/v1/ch/disqualifications

People on the Companies House register of disqualified directors

Looks up each person (up to 50, for example a company's directors and owners) on the register of disqualified directors. A register entry counts only when the first name and surname agree and, when both sides give one, the birth month and year agree (Companies House publishes the month and year for officers and owners). status is disqualified (a disqualification in force, or one not yet started), previously-disqualified (ended), none, or not-checked (the register did not answer; never read it as none). nameOnly: true means the match rests on the name alone because there was no birth date to compare. Acting as a director while disqualified is an offence (Company Directors Disqualification Act 1986 s13). One call against your plan.

Example request
curl -X POST -H "X-Stratum-Key: $STRATUM_KEY" \
  "https://api.stratumapis.com/v1/ch/disqualifications"
Request body
{
  "type": "object",
  "required": [
    "people"
  ],
  "properties": {
    "people": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "example": "John Albert Smith"
          },
          "dateOfBirth": {
            "type": "object",
            "properties": {
              "month": {
                "type": "integer",
                "minimum": 1,
                "maximum": 12
              },
              "year": {
                "type": "integer",
                "minimum": 1900
              }
            }
          }
        }
      }
    }
  }
}
Errors
  • 400 Missing or invalid people list