FilingPing

FilingPing API

Get a key from the home page, then send it as Authorization: Bearer <key>.

curl -X POST https://filingping.co.uk/v1/watchlist -H "Authorization: Bearer fp_..." -H "Content-Type: application/json" -d '{"company_number":"00445790","label":"Tesco"}'
curl https://filingping.co.uk/v1/events -H "Authorization: Bearer fp_..."

Webhook signatures: header x-filingping-signature: t=<unix>,v1=<hex> where v1 = HMAC_SHA256(secret, "<t>.<raw body>"). Reject if t is more than 5 minutes old.

Endpoints

All endpoints except signup need Authorization: Bearer <key>. The limit is 120 requests per minute per account.

Method and path Purpose
POST /v1/signup {email, accept_terms: true} Records acceptance of the terms (version stored), then emails an API key (at most one every 10 minutes per address; 5 signups per hour per IP)
GET /v1/account Plan, limit, usage, features, subscription and digest settings
PATCH /v1/account {email_digest?, digest_event_types?} Turn the daily email off or filter it
GET /v1/keys · POST /v1/keys · DELETE /v1/keys/:id List, create (shown once, maximum 5) and revoke API keys; the last key can't be revoked
DELETE /v1/account Deletes all data (cancel the subscription first)
GET /v1/watchlist?limit&offset List watched companies
POST /v1/watchlist {company_number,label?} or {companies:[...]} (up to 1000) Add companies. Returns 402 if over the plan limit
POST /v1/watchlist/csv (Content-Type: text/csv) Spreadsheet upload: column 1 = company number, column 2 = label (optional); header row optional; up to 5,000 rows
DELETE /v1/watchlist/:company_number Remove a company
GET /v1/events?after=<cursor>&limit&company_number Pull feed of events, newest after the cursor
POST /v1/webhooks {url, event_types?} Pro+. Register an https endpoint (maximum 5 destinations in total). The secret is shown once
POST /v1/slack {url, event_types?} Starter+. Slack incoming-webhook URL; plain-English alerts with a Companies House link
GET /v1/webhooks · PATCH /v1/webhooks/:id {event_types} · DELETE /v1/webhooks/:id · POST /v1/webhooks/:id/enable Manage destinations and filters (null = everything; exact types or company.*, filing.*, …)
POST /v1/billing/checkout {plan: starter, pro or business, interval: month or year} Returns a Stripe Checkout URL. Returns 409 if a subscription is already active
POST /webhooks/stripe Stripe only
GET /health Returns 503 only if the database is down or the worker has stopped. Companies House outages alert you by email instead, so the host doesn't restart the service or take the Stripe webhook endpoint down

Event types: company.status_changed, company.name_changed, company.accounts_overdue, company.confirmation_statement_overdue, company.updated, company.deleted, filing.accounts, filing.charge, filing.insolvency, filing.dissolution (strike-off notices), filing.confirmation_statement, filing.officers, filing.psc, filing.other.