KybDiff v1

Stop polling Companies House. Get a webhook the moment a company status changes.

Authentication

Pass your key in every request header:

X-Api-Key: kybd_<your_key>

Successful JSON responses use a top-level data field. Errors use error.code and error.message (optional details for validation). Authenticated routes return X-RateLimit-* headers.

Endpoints

GET /v1/companies/:id Fetch latest company state
ParamInDescription
idpathCompanies House number (e.g. 12345678)
curl https://api.kybdiff.com/v1/companies/12345678 \
  -H "X-Api-Key: kybd_your_key"
{
  "data": {
    "company_number": "12345678",
    "data": { "CompanyName": "ACME LTD", "CompanyStatus": "Active", ... },
    "updated_at": "2026-05-02T20:00:00.000Z"
  }
}
GET /v1/companies/:id/changes List change history (RFC 6902 patches), cursor pagination
ParamInDescription
idpathCompany number
limitqueryMax results (default 20, max 100)
cursorqueryOptional: diff_log.id from meta.next_cursor for the next page
curl "https://api.kybdiff.com/v1/companies/12345678/changes?limit=5" \
  -H "X-Api-Key: kybd_your_key"
{
  "data": {
    "company_number": "12345678",
    "changes": [
      { "id": 42, "company_number": "12345678", "change_set": [...], "created_at": "..." }
    ]
  },
  "meta": { "has_next": true, "next_cursor": "41" }
}
GET /v1/webhooks List your subscriptions
curl https://api.kybdiff.com/v1/webhooks \
  -H "X-Api-Key: kybd_your_key"
{ "data": [ { "id": 7, "company_number": "12345678", "url": "https://…", "created_at": "…" } ] }
POST /v1/webhooks Create subscription (watch a company)
FieldTypeDescription
company_number requiredstringCompanies House number
url requiredstringHTTPS endpoint to receive events
curl -X POST https://api.kybdiff.com/v1/webhooks \
  -H "X-Api-Key: kybd_your_key" \
  -H "Content-Type: application/json" \
  -d '{"company_number":"12345678","url":"https://yourapp.com/hooks/kyb"}'

Returns 201 with Location: /v1/webhooks/:id.

// Payload delivered to your URL on every change:
{
  "event": "company.updated",
  "company_number": "12345678",
  "diff_log_id": 42,
  "patch": [{ "op": "replace", "path": "/CompanyStatus", "value": "Dissolved" }],
  "data": { ... },
  "delivered_at": "2026-05-02T20:00:00.000Z"
}
DELETE /v1/webhooks/:id Cancel a subscription
curl -X DELETE https://api.kybdiff.com/v1/webhooks/7 \
  -H "X-Api-Key: kybd_your_key"

Returns 204 No Content on success.

Pricing

Metered at $49 / 1 000 deliveries. You're only charged for events that actually fire.