Every Registrum response is cached automatically. You never hit the Companies House rate limit. Even when CH goes down, your app keeps working.
Pain points
Cache miss only (first request, or after TTL):
What you get
| Endpoint | TTL | Rationale |
|---|---|---|
| /v1/company/{number} | 24 hours | Company status changes infrequently; directors, SIC, addresses are stable day-to-day |
| /v1/company/{number}/financials | 7 days | Accounts are filed annually; iXBRL parsing is expensive — no point re-parsing daily |
| /v1/company/{number}/directors | 24 hours | Appointment changes are filed within days; a 24h window is accurate enough |
| /v1/company/{number}/network | 24 hours | Network derives from director data — same cadence |
| /v1/company/{number}/psc | 24 hours | PSC register changes are filed within days; active/ceased split is stable at this cadence |
| /v1/company/{number}/psc/chain | fresh per call | Chain traverses multiple companies — result depends on live PSC state at each node. Not cached. |
| /v1/search | 1 hour | Company name/status changes rarely; search index updates are gradual |
Companies House goes down several times a year — for maintenance, deployments, or unexpectedly. With a direct integration, that outage becomes your problem. With Registrum, it doesn't.
# Response during CH outage (stale cache served)
HTTP/1.1 200 OK
X-Data-Stale: true
X-Cache-Age: 14423
X-Request-Id: a3f1...
{
"company_name": "TESCO PLC",
"cached": true
}
Your app receives data. The X-Data-Stale: true header tells you it's from cache, so you can surface that transparently to your users if needed — or silently absorb it.
data_source fieldEvery Registrum response includes a data_source field that tells you exactly where the data came from. Useful for compliance workflows or any use case that cares about data freshness.
| Value | Meaning | Max data age |
|---|---|---|
| live | Fetched from Companies House right now — as fresh as it gets. | Seconds |
| cached | Served from local cache. The data was fetched recently and is still within its freshness window (< 5 minutes old). No upstream call was made. | 5 minutes |
| cached_rate_conserved | Served from cache because the shared Companies House API budget was above 70% utilisation. A live call was skipped to protect capacity for other requests. | 30 days (profiles), 90 days (financials) |
cached_rate_conserved is rare under normal load. It only occurs when the platform is handling a high volume of unique company requests simultaneously. Under typical usage, responses will be live or cached.
The free tier gives you 50 calls/month with caching and circuit breaker included. No extra configuration required.
Was this page helpful?