> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dataspike.io/llms.txt
> Use this file to discover all available pages before exploring further.

# UK Company Registry Check

> Verify that a company is registered with Companies House, the UK company register.

The check returns the company's registration status together with its profile, officers, persons with significant control (beneficial owners), and registered charges.

## Step 1: Create an applicant

Create an applicant to associate the verification with.

**Curl**

```bash theme={null}
export API_KEY=<YOUR_API_KEY>

curl -H "ds-api-token: $API_KEY" \
  -H "Content-Type: application/json" \
  -X POST "https://api.dataspike.io/api/v3/applicants" \
  --data '{"external_id": "company-456", "applicant_type": "Organization"}'
```

Response:

```json theme={null}
{
  "id": "01827ed4-c928-7a3c-9a30-7ab7cc169d11"
}
```

**Python**

```python theme={null}
import requests

API_KEY = "<YOUR_API_KEY>"
BASE = "https://api.dataspike.io"
HEADERS = {"ds-api-token": API_KEY, "Content-Type": "application/json"}

resp = requests.post(f"{BASE}/api/v3/applicants", headers=HEADERS, json={"external_id": "company-456", "applicant_type": "Organization"})
applicant_id = resp.json()["id"]
```

## Step 2: Submit registry check request

Provide the company number, the company name, or both. When the number is provided, the company is looked up by it, and the name, if given, is checked against the registered name. Without a number, the company is searched by name.

**Curl**

```bash theme={null}
APPLICANT_ID="01827ed4-c928-7a3c-9a30-7ab7cc169d11"

curl -H "ds-api-token: $API_KEY" \
  -H "Content-Type: application/json" \
  -X POST "https://api.dataspike.io/api/v4/kyb/$APPLICANT_ID/uk-registry-check" \
  --data '{
    "company_number": "01234567",
    "company_name": "Acme Trading Limited"
  }'
```

Response (HTTP 202):

```json theme={null}
{
  "request_id": "019c9e79-4d64-73e1-9f30-5374f0f57975",
  "status": "initial"
}
```

**Python**

```python theme={null}
resp = requests.post(
    f"{BASE}/api/v4/kyb/{applicant_id}/uk-registry-check",
    headers=HEADERS,
    json={"company_number": "01234567", "company_name": "Acme Trading Limited"},
)
request_id = resp.json()["request_id"]
```

### Request body

| Field | Type | Required | Description |
| - | - | - | - |
| `company_number` | string | Conditional | Companies House company number: 8 letters or digits (e.g. `01234567`, `SC123456`). Spaces are ignored, and a shorter all-digit number is padded with leading zeros. Required if `company_name` is not provided. |
| `company_name` | string | Conditional | Company name. Searched when `company_number` is empty; otherwise checked against the registered name. Required if `company_number` is not provided. |

## Step 3: Poll for the result

Poll the result endpoint until the status changes from `initial`.

**Curl**

```bash theme={null}
REQUEST_ID="019c9e79-4d64-73e1-9f30-5374f0f57975"

curl -H "ds-api-token: $API_KEY" \
  "https://api.dataspike.io/api/v4/kyb/result/$REQUEST_ID"
```

Example response (verified). Fields with no value are omitted, including flags that are `false` and counts that are zero.

```json theme={null}
{
  "request_id": "019c9e79-4d64-73e1-9f30-5374f0f57975",
  "status": "verified",
  "verification_type": "uk_company_registry_check",
  "response_data": {
    "message": "'ACME TRADING LIMITED' was found in the UK Companies House register and is active / in good standing.",
    "company": {
      "base_info": {
        "company_name": "ACME TRADING LIMITED",
        "registration_number": "01234567",
        "status": "active",
        "company_type": "ltd",
        "registration_date": "2015-04-20",
        "jurisdiction": "england-wales",
        "registered_address": {
          "street": "10, High Street",
          "city": "London",
          "postal_code": "EC1A 1AA",
          "country": "England"
        }
      },
      "company_status": "active",
      "sic_codes": ["46900"],
      "previous_company_names": [
        { "name": "ACME IMPORTS LIMITED", "effective_from": "2015-04-20", "ceased_on": "2019-06-01" }
      ],
      "accounts_next_due": "2027-01-31",
      "accounts_last_made_up_to": "2025-04-30",
      "confirmation_statement_next_due": "2027-05-04"
    },
    "officers": [
      {
        "name": "SMITH, Jane",
        "officer_role": "director",
        "appointed_on": "2015-04-20",
        "nationality": "British",
        "country_of_residence": "England",
        "occupation": "Company Director",
        "birth_month": 3,
        "birth_year": 1980,
        "address": { "street": "10, High Street", "city": "London", "postal_code": "EC1A 1AA", "country": "England" }
      }
    ],
    "pscs": [
      {
        "name": "Mrs Jane Smith",
        "kind": "individual-person-with-significant-control",
        "notified_on": "2016-04-06",
        "nationality": "British",
        "country_of_residence": "England",
        "birth_month": 3,
        "birth_year": 1980,
        "natures_of_control": ["ownership-of-shares-75-to-100-percent", "voting-rights-75-to-100-percent"]
      }
    ],
    "charges": [
      {
        "charge_code": "012345670001",
        "charge_number": 1,
        "status": "outstanding",
        "classification": "A registered charge",
        "created_on": "2020-02-10",
        "delivered_on": "2020-02-14",
        "persons_entitled": ["Big Bank PLC"],
        "contains_fixed_charge": true,
        "contains_floating_charge": true,
        "floating_charge_covers_all": true,
        "contains_negative_pledge": true
      }
    ],
    "counts": {
      "officers_active": 1,
      "pscs_active": 1,
      "charges_total": 1
    }
  },
  "created_at": "2026-10-20T09:41:15.822681Z",
  "completed_at": "2026-10-20T09:41:18.583502Z"
}
```

**Python**

```python theme={null}
import time

while True:
    resp = requests.get(f"{BASE}/api/v4/kyb/result/{request_id}", headers=HEADERS)
    result = resp.json()
    if result["status"] != "initial":
        break
    time.sleep(3)

print(result)
```

## Response data

`response_data.message` describes the outcome in one sentence; which other fields are present depends on the outcome (see [Result statuses](#result-statuses)). The full schema is in the [API reference](https://docs.dataspike.io/api-reference#tag/KYB-Single-Checks/operation/kyb-get-result).

### Company profile

| Field | Description |
| - | - |
| `base_info.company_name` | Registered company name |
| `base_info.registration_number` | Company number |
| `base_info.status`, `company_status` | Company status, e.g. `active`, `dissolved`, `liquidation`, `administration` |
| `company_status_detail` | Extra status detail, e.g. `active-proposal-to-strike-off` |
| `base_info.company_type` | Company type, e.g. `ltd`, `plc`, `llp` |
| `subtype` | Company subtype, e.g. `community-interest-company` |
| `base_info.registration_date` | Date of incorporation |
| `date_of_cessation` | Date the company was dissolved or closed |
| `base_info.jurisdiction` | Jurisdiction of registration, e.g. `england-wales`, `scotland` |
| `base_info.registered_address` | Registered office address (object: `street`, `city`, `state_or_province`, `postal_code`, `country`) |
| `sic_codes` | Nature of business (SIC 2007 codes) |
| `previous_company_names[]` | Former names: `name`, `effective_from`, `ceased_on` |

### Risk indicators

| Field | Description |
| - | - |
| `has_insolvency_history` | The company has gone through insolvency proceedings |
| `has_been_liquidated` | The company has been liquidated |
| `registered_office_is_in_dispute` | The registered office address is disputed |
| `undeliverable_registered_office_address` | Mail to the registered office address cannot be delivered |
| `accounts_overdue`, `accounts_next_due`, `accounts_last_made_up_to` | Whether annual accounts are overdue, when the next ones are due, and the date the last ones were made up to |
| `confirmation_statement_overdue`, `confirmation_statement_next_due` | Whether the annual confirmation statement is overdue and when the next one is due |

Each flag is present only when it is `true`. These indicators are returned as data and do not change the check status.

### Officers

Directors, secretaries and other officers, current and resigned, up to 100 entries. Current officers are listed first.

| Field | Description |
| - | - |
| `name`, `officer_role` | Officer name and role, e.g. `director`, `secretary`, `corporate-director` |
| `appointed_on`, `resigned_on` | Appointment and resignation dates |
| `nationality`, `country_of_residence`, `occupation` | Personal details, when provided |
| `birth_month`, `birth_year` | Month and year of birth |
| `address` | Correspondence address |
| `identification` | Corporate officers only: `identification_type`, `registration_number`, `place_registered`, `legal_form`, `legal_authority` |

### Persons with significant control

Beneficial owners and controlling entities, current and ceased, up to 100 entries.

| Field | Description |
| - | - |
| `name`, `kind` | Name and kind, e.g. `individual-person-with-significant-control`, `corporate-entity-person-with-significant-control` |
| `natures_of_control` | How control is held, e.g. `ownership-of-shares-75-to-100-percent`, `voting-rights-50-to-75-percent`, `right-to-appoint-and-remove-directors` |
| `notified_on`, `ceased_on` | Dates the control was notified and ceased |
| `is_sanctioned` | Present and `true` when the PSC register records the person as sanctioned. This is registry data, not a Dataspike AML screening result; its absence does not mean the person was screened |
| `nationality`, `country_of_residence`, `birth_month`, `birth_year`, `address` | Personal details, when provided |
| `identification` | Corporate entities only, same shape as for officers |

### Charges

Charges (security interests such as mortgages and debentures) registered against the company, up to 100 entries.

| Field | Description |
| - | - |
| `charge_code`, `charge_number` | Charge identifiers |
| `status` | e.g. `outstanding`, `fully-satisfied`, `part-satisfied` |
| `classification`, `particulars` | Charge type and description of the secured property |
| `created_on`, `delivered_on`, `satisfied_on` | Creation, filing and satisfaction dates |
| `persons_entitled` | Names of the lenders the charge secures |
| `contains_fixed_charge`, `contains_floating_charge`, `floating_charge_covers_all`, `contains_negative_pledge` | Charge terms |

### Counts

Total counts, including entries beyond the 100 returned: `officers_active`, `officers_resigned`, `pscs_active`, `pscs_ceased`, `charges_total`, `charges_satisfied`, `charges_part_satisfied`.

### Similar companies

Up to 5 candidates, returned when the exact company was not matched by name: `company_number`, `company_name`, `company_status`, `date_of_creation`, `address`.

## Result statuses

| Situation | Status | `response_data` contains |
| - | - | - |
| Company found and active | `verified` | Full record: `company`, `officers`, `pscs`, `charges`, `counts` |
| Company found, the register holds no status for it | `verified` | Full record |
| Company found but not active: dissolved, in liquidation, administration or similar | `not_verified` | Full record; the reason is in `company.company_status` |
| Name did not match the company, or no exact match by name | `not_verified` | `message` and up to 5 similar companies in `alternative_results` |
| Company not found | `not_verified` | `message`; a search by name may also list other companies from the search in `alternative_results` |
| Technical error | `failed` | — |

> [!NOTE]
>
> `not_verified` covers both an inactive company and a company that was not found. Check whether `response_data.company` is present to tell them apart.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.