Async Batch API

Enrich 500 companies
with one API call

Submit your list. We enrich them in the background, automatically managing the Companies House rate limit. Poll for results — no timeouts, no queue logic, no rate-limit errors on your side.

Three steps. No rate-limit management required.

01

Submit your list

POST a JSON array of up to 500 UK company numbers. You get a batch_id back instantly — the job is queued and processing begins immediately.

POST /v1/batch
{
  "company_numbers": [
    "00445790",
    "03547512",
    ...499 more
  ]
}
02

We handle the rate limiting

Our processor runs every 10 seconds, enriching companies in batches and automatically pausing when the shared Companies House budget is near its limit. You do nothing.

What we manage for you

  • • CH 600 req / 5 min rate limit
  • • Cache hits returned instantly (no CH call)
  • • Quota exhaustion → clean quota_exceeded status
  • • Invalid numbers → per-item error, rest still complete
03

Poll for results

GET the job status every few seconds. Results accumulate as companies are processed. Polling is always free — it never consumes credits. Results are kept for 7 days.

GET /v1/batch/{batch_id}

{
  "status": "complete",
  "completed": 500,
  "results": [...],
  "errors": {}
}

The Companies House rate limit problem — solved

The Companies House API allows 600 requests every 5 minutes per account — roughly 2 companies per second. If you need to enrich a list of 500 companies, you're looking at 4+ minutes of careful rate management just to avoid 429 errors.

With the Registrum batch API, you submit the list once and walk away. Our cache layer means many companies return instantly without touching Companies House at all. The rest are fetched at the correct pace, automatically. A 500-company batch typically completes in 30 seconds to 3 minutes depending on cache hit rate.

Who uses batch enrichment

Lead generation agencies

Upload your prospect list overnight. Wake up to 500 enriched company profiles — financials, director names, accounts status — ready for your CRM.

Compliance & KYB teams

Screen large portfolios in a single API call. Get ownership chains, PSC data, and insolvency flags without writing any rate-limiting logic.

Data pipelines & ETL

Enrich Companies House data as part of a nightly job. The async model fits naturally into any pipeline that already polls for results.

Complete working example

Submit a batch and poll until complete — in under 20 lines of Python:

import time, requests

API_KEY = "reg_live_..."
BASE    = "https://api.registrum.co.uk/v1"
HEADERS = {"X-API-Key": API_KEY}

company_numbers = ["00445790", "03547512", "SC123456"]  # up to 500

# 1. Submit
r = requests.post(f"{BASE}/batch",
    json={"company_numbers": company_numbers},
    headers=HEADERS)
batch_id = r.json()["batch_id"]
print(f"Queued: {batch_id}")

# 2. Poll until done
while True:
    r = requests.get(f"{BASE}/batch/{batch_id}", headers=HEADERS)
    job = r.json()
    print(f"{job['status']} — {job['completed_companies']}/{job['total_companies']}")
    if job["status"] in ("complete", "partial", "failed", "quota_exceeded"):
        break
    time.sleep(5)

# 3. Use results
for item in job["results"]:
    print(item["company_number"], item["data"]["company_name"])
for number, error in job["errors"].items():
    print(number, "ERROR:", error)

Polling the GET endpoint is always free — it does not consume API credits. Credits are charged per company processed (1 credit each).

Job status reference

StatusMeaningTerminal?
queuedJob accepted, waiting to startNo
processingActively enriching companiesNo
completeAll companies enriched successfullyYes
partialFinished — some successes, some errors (see errors field)Yes
quota_exceededMonthly credit limit hit mid-batch; remaining companies in errorsYes
failedAll companies errored (upstream issue)Yes

Start enriching in minutes

Free tier includes 50 calls/month — enough to test the batch endpoint end-to-end. Pro and Enterprise plans unlock higher quotas for production workloads.