PSC

Get persons with significant control

Get the PSC (Persons with Significant Control) register for a company.

Returns all active and ceased PSCs, split into categories. kind is a closed enum decided by an explicit allow-list of every Companies House PSC kind:

  • individual - a natural person with significant control
  • corporate-entity - a company with significant control
  • legal-person - a legal person (e.g., government body) with significant control
  • super-secure - a person whose details are protected by court order
  • unknown - Companies House returned a kind we have not classified. Nothing is inferred from it: no verification status, no chain traversal.

Every PSC also carries kind_raw - the verbatim Companies House kind string (e.g. individual-beneficial-owner). Before 2026-08-01 an unrecognised kind was echoed into kind itself; it is now normalised to unknown and the original value is always available in kind_raw.

Corporate-entity PSCs - which register the number belongs to. Companies House stores a corporate PSC's number as the entity's number at whatever registry identification.place_registered names, which is often not Companies House (Guernsey Registry, Jersey Financial Services Commission, Commercial Register Of Liechtenstein, ...). Four fields make this explicit:

  • registry_number - the number exactly as filed, at whatever registry issued it
  • registry_name - that registry's name as filed
  • registry_is_companies_house - true (confirmed UK register), null (a number is present but cannot be tied to the UK register), false (no registration number filed at all)
  • company_number - populated only when registry_is_companies_house is true, and always in canonical Companies House form (zero-padded, upper-cased), so it can be passed straight back to this API

Before 2026-08-01 company_number carried the raw filed value whatever register it came from, so a foreign number could zero-pad onto an unrelated UK company (CH-Api#59). Clients that need the old raw behaviour should read registry_number.

Each PSC includes decoded natures_of_control_decoded with human-readable descriptions of the control type (e.g., "Owns 25-50% of shares" instead of ownership-of-shares-25-to-50-percent).

Companies exempt from PSC filing (e.g., listed PLCs on regulated markets) return has_psc_exemption: true with empty PSC lists.

Data is cached for 30 days. If the Companies House API is down, stale cached data is returned with cached: true in the response.

Example: /v1/company/12345678/psc


Upstream usage: 1 upstream call per unique company on first fetch (cached for 30 days). Companies with >100 PSCs require additional pagination calls.

get/v1/company/{company_number}/psc

Request

  • Base URL: https://api.registrum.co.uk
  • URL: https://api.registrum.co.uk/v1/company/{company_number}/psc
  • Auth: API key in header X-API-Key

Path parameters

company_numberstring required

The Companies House company number. 8 alphanumeric characters (e.g., 00445790 for Tesco PLC). Numeric-only numbers are automatically zero-padded.

Example:00445790

Response

PSC register returned successfully

statusstring

'success' or 'error'

cachedboolean

True if this response was served from cache rather than fetched live

cache_age_secondsinteger nullable

How many seconds ago this data was fetched from Companies House (null if not cached)

fetched_atstring nullable

ISO 8601 instant (UTC) when this data was actually fetched from Companies House. Use this, not cache_age_seconds, to show a user when the data was last checked: an age is measured at the moment this response was produced, so anything that caches the response downstream will overstate freshness by however long it held it. This instant does not drift. Null when unknown - render nothing rather than a guessed date.

data_sourcestring

'live' - fetched from Companies House right now; 'cached' - served from local cache (data is recent, no upstream call needed); 'cached_rate_conserved' - served from cache because the CH API budget is above 70% utilisation; data may be up to 30 days old in this state

credits_usedinteger

Number of API credits consumed by this request

credits_remaininginteger nullable

API credits remaining this month (null in dev mode)

Example response

{
  "cache_age_seconds": 3421,
  "cached": true,
  "credits_remaining": 487,
  "credits_used": 1,
  "data": {
    "company_age_years": 78,
    "company_name": "TESCO PLC",
    "company_number": "00445790",
    "company_status": "active",
    "company_type": "plc"
  },
  "data_source": "cached",
  "status": "success"
}

Changes

No recorded changes to this operation across all 1 revision of this API.