API docs
Company data as JSON, no key required.
Three read-only endpoints mirror the website. Responses use the same permanent IDs and the same field names as the Coragrid public API, so moving to a full Coragrid credential later needs no data migration.
Basics
- Base URL
https://api.companyregistryapi.com. Each path below appends to it.- OpenAPI
- https://companyregistryapi.com/api/openapi.json, an OpenAPI 3.2 document of these endpoints.
- Authentication
- None.
- Rate limit
- 60 requests per minute per client address, with bursts up to the same number. Over the limit you receive
429with aRetry-Afterheader. - CORS
- Browser requests from any origin are allowed for GET.
- Errors
- RFC 9457 problem documents with
Content-Type: application/problem+jsonand a stablecodefield. - Attribution
- Show “Powered by Coragrid” wherever you display the data.
GET /v1/search
Matches the start of a company name or a business ID, in registry order; no relevance scores.
| Parameter | Required | Meaning |
|---|---|---|
| q | yes | The start of a company name or a business ID, 3 to 64 characters. Results come in registry name order with no relevance score. |
| country | no | ISO 3166-1 alpha-2 code such as FI. Omit or pass all for every country. |
| limit | no | Results per page, 1 to 25. Defaults to 10. |
| cursor | no | Opaque next_cursor value from the previous page. Cursors expire; on 400 restart from the first page. |
curl "https://api.companyregistryapi.com/v1/search?q=example&country=FI&limit=5"const response = await fetch( "https://api.companyregistryapi.com/v1/search?q=example&country=FI&limit=5",);const page = await response.json();import requestspage = requests.get( "https://api.companyregistryapi.com/v1/search", params={"q": "example", "country": "FI", "limit": 5},).json(){ "object": "list", "query": "example", "countries": ["FI"], "data": [ { "id": "co_014d2pf2dbsqqg28t5cy4tqkff", "object": "company", "lifecycle": { "status": "active" }, "name": "Example Robotics Oy", "country_code": "FI", "company_status": "active", "company_type": "private_limited_company" } ], "next_cursor": null, "attribution": "Powered by Coragrid"}GET /v1/companies/{company_id}
One company by permanent ID. Redirected records return the requested handle and the canonical ID in lifecycle.canonical_id; split records list lifecycle.successor_ids.
curl "https://api.companyregistryapi.com/v1/companies/<company_id>"const response = await fetch( "https://api.companyregistryapi.com/v1/companies/<company_id>",);const { data: company } = await response.json();import requestscompany = requests.get("https://api.companyregistryapi.com/v1/companies/<company_id>").json()["data"]GET /v1/companies/{company_id}/officers
Current officers with source attribution: the publishing system, its URL when known, and the observation time.
curl "https://api.companyregistryapi.com/v1/companies/<company_id>/officers"const response = await fetch( "https://api.companyregistryapi.com/v1/companies/<company_id>/officers",);const { data: officers } = await response.json();import requestsofficers = requests.get("https://api.companyregistryapi.com/v1/companies/<company_id>/officers").json()["data"]Problem codes
| Code | Status | Meaning |
|---|---|---|
| invalid_request | 400 | A parameter is missing or malformed; detail names it. |
| not_found | 404 | No company is visible under that ID. |
| rate_limited | 429 | Retry after the number of seconds in Retry-After. |
| upstream_error | 502 | The company data service rejected the request; retryable. |
| upstream_busy | 503 | The company data service is busy; retry after the seconds in Retry-After. |
| upstream_unavailable | 503 | Company data is temporarily unavailable; retryable. |
With a Coragrid key
A Coragrid API key reads the same companies, with the same IDs, from the Coragrid API: search by description, higher limits and the cgd command line. How to get a key.
# With a Coragrid API key: cgd auth logincgd --json companies search --query "example robotics" \ --country FI --limit 5# An id from the search resultsid=<company_id>cgd --json companies get $idcgd --json companies officers $id