VellumKite / API v1

A quiet contract for live data.

Use one bearer key to query a refreshed, normalized public-register snapshot. Every record carries its source, provenance, refresh time, and schema version.

REST / JSON / bearer API key / schema v1

GET /api/vellumkite-register/{registrationId}

Normalized record
200 / JSON
{
  "id": "normalized-record-id",
  "sourceRecordId": "08209948",
  "operatorName": "Example Operator Ltd",
  "registrationId": "08209948",
  "status": "active",
  "sourceUrl": "https://download.companieshouse.gov.uk/BasicCompanyData-2026-09-01-part1_7.zip",
  "refreshedAt": "2026-09-14T02:00:19.365Z",
  "licenseNote": "Companies House register data provenance.",
  "schemaVersion": "v1"
}

Copy, then adapt

The useful failure modes are documented too.

Lookup one record

Fetch a normalized record by registration ID.

request / response
curl --request GET \
  --url 'https://your-app.example/api/vellumkite-register/08209948' \
  --header 'Authorization: Bearer vk_live_your_api_key'

Search with pagination

Search operator names or IDs with one-based pagination.

request / response
curl --request GET \
  --url 'https://your-app.example/api/vellumkite-register?q=northline&page=1&pageSize=25' \
  --header 'Authorization: Bearer vk_live_your_api_key'

401 · authentication failure

Missing, invalid, or revoked bearer keys are rejected before lookup.

request / response
HTTP/1.1 401 Unauthorized

{"error":"A valid API key is required."}

400 · validation failure

page must be at least 1 and pageSize must be between 1 and 100.

request / response
HTTP/1.1 400 Bad Request

{"errors":{"page":"Number must be greater than or equal to 1.","pageSize":"Number must be less than or equal to 100."}}
Rate limits

Each API key may make 100 authenticated GET requests per one-minute window. Responses include X-RateLimit-* headers.

When the quota is exhausted, the API returns 429, a Retry-After header, and a JSON body with the number of seconds to wait.