Companies House
Companies House Filing History API
A UK company's filings off the official statutory register, most recent first: date, filing type code (AA, CS01, SH03), description, the register's own annotations and child documents, and a direct link to the filed PDF with its page count. Keyed by company_number, which you get from the search endpoint. Costs 1 credit per request.
Authorizations
AuthorizationstringheaderrequiredBearer authentication header of the form Bearer <token>, where <token> is your Scavio API key (e.g. Bearer sk_live_your_key).
Body
application/jsoncompany_numberstringrequiredUK company number, 1-20 characters. Zero-padded to 8 and upper-cased for you, so 445790 and sc090312 both resolve - the register itself 404s on those forms. Registry prefixes supported: SC, NI, OC/SO/NC, FC, BR, CE. Up to two letters followed by digits, 8 characters after padding; anything else is a 400.
Example: 00445790
pageintegerdefault:1Results page, 1-based, most recent filings first. NO upper bound - unlike search, this endpoint has no page cap, and a page past the last one is an ordinary 200 with an empty filings[] rather than an error. Loop on has_next_page; total_pages is deliberately null on this endpoint because the register's pager tops out at ten numbered links however many pages exist, and reporting 10 would be a wrong number dressed as a right one.
Example: 2
Request
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# total_pages is null here on purpose - walk has_next_page instead.
page = 1
while True:
resp = client.companies_house.filing_history("00445790", page=page)
for filing in resp["data"]["filings"]:
# A filing still being processed has no document_url yet.
pdf = filing.get("document_url") or filing.get("processing_note")
print(filing["date"], filing["type"], filing["description"], pdf)
if not resp["data"]["has_next_page"]:
break
page += 1Response