Compliance

Get ECCTA identity verification compliance snapshot

ECCTA identity verification compliance snapshot for a company.

Returns a verification health report for all current directors and active individual PSCs under the Economic Crime and Corporate Transparency Act 2023. Mandatory identity verification was introduced in November 2025, with enforcement beginning 18 November 2026.

Fields:

  • directors_total / pscs_total - count of persons ECCTA identity verification actually applies to: current (non-resigned) directors minus corporate officers and secretaries, and active individual PSCs minus corporate/legal-person PSCs. Not the board size. It is smaller than /company/{number}/directors' total_current, which counts every current officer including secretaries and corporate officers.
  • directors_verified / pscs_verified - count Companies House's public register shows as verified: either an identity_verified_on date (verified through an ACSP) or an open-ended verification window (verified directly with Companies House, which publishes no date).
  • directors_pending / pscs_pending - count with a verification deadline that has NOT yet passed. Nothing has been missed; during the Nov 2025 - Nov 2026 transition this is the majority state for UK directors.
  • directors_overdue / pscs_overdue - count whose deadline has passed with no verification recorded.
  • directors_unknown / pscs_unknown - count where identity_verification_details is entirely absent from the CH API response (pre-ECCTA data, not evidence of non-compliance).
  • directors_unverified / pscs_unverified - deprecated aliases, kept only for backwards compatibility. They now mean exactly overdue (CH-Api#52, fixed 2026-07-30); before that fix they also counted pending people, which branded roughly 70% of UK directors non-compliant during the transition. Use directors_pending/directors_overdue (or the PSC equivalents) instead.
  • verification_rate - verified / (verified + pending + overdue), directors and PSCs combined into one figure. Unknowns are excluded from both the numerator and the denominator. 0.0 when nobody is verified, pending or overdue.
  • verification_risk - compliant | pending | partial | high_risk | unknown. A future deadline is deliberately not treated as risk on its own (pending); only a passed deadline with no verification drives high_risk.
  • risk_score - 1.0 - verification_rate, or null when no person has a known status (verified, pending or overdue) - i.e. everyone is unknown.
  • unverified_persons - every director/PSC who is pending or overdue (both, not overdue-only), each carrying its own status (pending | overdue) and deadline. Read status before describing anyone here as non-compliant - a pending entry has missed nothing. deadline may be null (an open-ended verification window with no printable date); never substitute a fallback date for a null one. This list is longer than the *_unverified counts by design: the deprecated aliases count overdue only, this list carries pending too - comparing len(unverified_persons) to directors_unverified + pscs_unverified and expecting them to match is the mistake to avoid.
  • eccta_enforcement_deadline - 2026-11-18

Corporate entity and legal person PSCs are exempt from individual verification and are excluded from all counts.

Plan gating: Pro or Enterprise only. Free and Web plan requests return 403.

Cache: 30-day TTL. Officers and PSC are fetched concurrently.

Credits: 1 credit per call.

Example: /v1/company/00445790/compliance

get/v1/company/{company_number}/compliance

Request

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

Path parameters

company_numberstring required

Companies House company number (e.g. 00445790 for Tesco PLC). Numeric-only numbers are zero-padded.

Example:00445790

Response

Compliance snapshot 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.