Plumbing
Errors
Every error is one envelope:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_identifier",
"message": "…",
"param": "id",
"request_id": "req_…"
}
}
| HTTP | code | when |
|---|---|---|
| 400 | invalid_identifier, jurisdiction_not_supported, missing_filter, invalid_cursor, invalid_parameter | bad input |
| 401 | unauthorized | missing or unknown key |
| 401 | key_revoked | the key was rotated; use the new one from the dashboard |
| 402 | insufficient_balance | the unlock costs more than the balance |
| 403 | account_suspended | key suspended, mail us |
| 429 | rate_limited | over a rate limit, wait the seconds in Retry-After |
| 429 | search_quota | weekly search quota used up, Retry-After runs to Monday 00:00 UTC |
| 429 | unlock_cap | daily unlock cap (200) reached, Retry-After runs to 00:00 UTC |
| 404 | company_not_found | nothing behind that ID |
| 503 | query_timeout | the warehouse query passed its budget (4 s for a search, 1.5 s otherwise), narrow the filters |
| 503 | busy | all warehouse connections in use, Retry-After: 2 |
| 503 | maintenance | we are briefly down, Retry-After: 60 |
| 503 | auth_unavailable | key store unreachable, retry |
| 500 | internal | our fault |
Pricing
- A company costs €0.10 the first time you fetch it by id. For 30 days after that, everything about it is included: the object, establishments, relationships (legal persons only; natural persons are not served), financials, events, publications, the ownership graph from it, and for a young company its incorporation profile.
- Search and the feed are included in your key: 50 searches a week on a trial key, more on request. A search returns stubs; fetch a stub by id to unlock it.
- You are charged only when the response is 2xx. Errors, timeouts, 404s and over-quota answers cost nothing.
- Over the weekly search quota:
429 search_quota. Over the daily unlock cap:429 unlock_cap. Both carryRetry-After. To raise either, mail us.
The first batch has 50 seats; after that, signup shows a waitlist.
Headers
Request-Id on every response, quote it when you write to us. Akribi-Version is the contract date, currently 2026-10-30. X-Cost is what this response charged in euro cents (10 or 0), X-Balance what is left on your key in cents. Search responses add X-Searches-Remaining for this week; unlock responses add X-Unlocks-Remaining for today.
Stubs
A search hit carries a company_stub: id, name, status, incorporation date, legal form, postcode and locality, NACE codes, and links.self, the URL that unlocks it. A feed item carries a smaller stub under company (id, name, legal form, locality, municipality, province), the event, its date and data with registry facts only (activity codes on an incorporation, the gazette subject, a press or hiring headline). The deed facts of a new company (purpose, capital, founders, premises, deed-read activities with confidence) sit on the company object under incorporation, behind the unlock.
Expand
GET /v1/companies/{id}?expand[]=financials&expand[]=establishments inlines the first page (up to 10 items) of a sub-resource under links. Expandable: establishments, relationships, financials, publications, events. Expanded sub-resources are inside the unlock.
Rate limits
Three limits, each answered with 429 rate_limited and a Retry-After header:
| Scope | Limit |
|---|---|
| per API key | 10 requests per second, bursts up to 30 |
/v1/account | 2 per second per key |
| per client IP | 20 failed authentications per minute |
Once an IP has used up its failed authentications, further requests from it without a valid key get 429 until the limit refills; requests with a valid key are not affected. Limits are counted per API worker. The API runs behind Cloudflare; its own rate rule on api.akribi.dev sits in front of these. Sequential lookups at 3 per second never hit them.
People
People: not in this release. Relationships and the ownership graph show legal persons only (a company on a board, an entity shareholder, a parent or subsidiary). Natural-person directors, permanent representatives and natural-person shareholders are not served, by name or by id. An entity shareholder or foreign holder without a VAT number is named only when its name carries a legal form (BV, NV, SA, GmbH, Ltd and the like); otherwise name is null and the share stays. Press headlines are quoted as the publication printed them and may name people.
Lists
Lists return {"object":"list","data":[…],"has_more":true,"next_cursor":"…"}. Pass cursor to get the next page, limit up to 100 (default 50).
Cursors are opaque and signed: pass them back unchanged. Offset-paged lists stop issuing a cursor after 10000 rows; has_more stays true, narrow the filters instead.
Search versus feed
activity on /v1/companies is one exact NACE-BEL code (62010). activity on /v1/events is a comma list of prefixes (56, 56.1,56.3).
Gazette
The publication index with PDFs starts on 2026-02-16. Bankruptcies, judicial and voluntary dissolutions and judicial reorganisations go back to 2021, without a PDF. pdf_url is a path relative to https://www.ejustice.just.fgov.be.
Language
?lang=nl|fr|en on company search, company lookup and establishments selects the label language for activities and legal forms. Default nl.