Naar de inhoud
Subsido

De API gebruiken

Fouten

Eén foutstructuur op elke route. Laat je code beslissen op error.code: codes veranderen nooit, meldingen kunnen anders geformuleerd worden.

De foutstructuur

{
  "error": {
    "code": "plan_required",
    "message": "'history' requires the pro plan or above.",
    "request_id": "req_0192d3a4b5c67d8e9f0a1b2c3d4e5f65",
    "details": {
      "capability": "history",
      "required_plan": "pro"
    },
    "required_plan": "pro"
  }
}
  • code is stabiel en machineleesbaar. message is voor een mens, in het Engels, en zegt wat er fout was: de parameter, de waarde, wat er verwacht werd.
  • request_id staat ook in de header X-Request-Id. Vermeld hem als je ons schrijft: het is het id in onze logs.
  • details is altijd een object, leeg als er niets toe te voegen is. required_plan verschijnt alleen bij plan_required.
  • Een 429 bevat Retry-After in seconden.
{
  "error": {
    "code": "invalid_body",
    "message": "company.postcode: company.postcode is not a Belgian postcode",
    "request_id": "req_0192d3a4b5c67d8e9f0a1b2c3d4e5f66",
    "details": {
      "field": "company.postcode"
    }
  }
}
{
  "error": {
    "code": "plan_required",
    "message": "companies=800 is above the 500 this plan allows. The enterprise plan or above allows it.",
    "request_id": "req_0192d3a4b5c67d8e9f0a1b2c3d4e5f67",
    "details": {
      "capability": "companies_max",
      "parameter": "companies",
      "requested": "800",
      "allowed": "500",
      "required_plan": "enterprise"
    },
    "required_plan": "enterprise"
  }
}

400 of 422

400 invalid_parameter betekent dat de request niet gelezen kon worden zoals gevraagd: een onbekende of herhaalde queryparameter, een waarde buiten haar waardenlijst, een limit boven je plan, of een JSON-body die niet te parsen is, een eigenschap bevat die de route niet kent of een waarde van het verkeerde type. 422 invalid_body betekent dat de body gelezen werd en iets zegt dat niet kan kloppen: een postcode die niet Belgisch is, een ondernemingsnummer met foute controlecijfers, een negatief budget. details.field noemt de eigenschap.

Alle codes

Request

Fouten: Request
CodeStatusWanneerWat te doen
invalid_parameter400Een queryparameter is misvormd, valt buiten het bereik, komt twee keer voor of bestaat niet op deze route; een waarde hoort niet bij haar vaste waardenlijst; een limit ligt boven de paginagrootte van je plan; of een JSON-body is niet te parsen, bevat een eigenschap die de route niet kent of een waarde van het verkeerde type.De melding noemt de parameter en wat er verwacht werd. Pas de request aan: ongewijzigd opnieuw proberen mislukt op dezelfde manier. Onbekende parameters worden geweigerd in plaats van genegeerd, zodat een tikfout een resultaat nooit ongemerkt ruimer maakt.
invalid_cursor400De cursor komt niet van de API, of hoort bij een andere lijst of sorteervolgorde.Begin opnieuw zonder cursor. De API weigert liever dan stilzwijgend weer bij pagina één te beginnen.
invalid_body422De JSON-body is leesbaar maar zegt iets onmogelijks: een ondernemingsnummer waarvan de controlecijfers niet kloppen, een postcode die niet Belgisch is, een ongeldige NACE-code, een onbekende rechtsvorm, een negatief bedrag, een limit buiten het bereik, een dubbele referentie.details: field: de eigenschap in kwestie, bijvoorbeeld company.postcode.Verbeter de eigenschap die details.field noemt.
route_not_found404Op dit pad bestaat geen endpoint. Het antwoord is toch JSON, in de gewone foutstructuur.Vergelijk het pad met /v1/openapi.json.
method_not_allowed405Het pad bestaat, maar niet met deze methode, bijvoorbeeld een GET op /mcp.De header Allow somt de methodes op die het pad wel aanvaardt.

Sleutel en plan

Fouten: Sleutel en plan
CodeStatusWanneerWat te doen
unauthorized401De sleutel ontbreekt, is misvormd of ingetrokken, op een route die er een vraagt.Stuur Authorization: Bearer mee met een live- of testsleutel uit het dashboard.
subscription_required402Het account van de sleutel heeft nog geen plan. Je kunt aanmelden en sleutels aanmaken, maar geen enkele sleutel geeft gegevens tot er een plan gekozen is.Kies een plan in het dashboard. Dezelfde sleutel werkt zodra het plan actief is.
plan_required403De route vraagt een functie die je plan niet bevat (de change feed, historiek, as_of, webhooks, bulkmatching, watchlists, de volledige export), of een aantal ligt boven wat je plan toelaat (ondernemingen in een bulkmatch, ondernemingen over al je watchlists, webhook-endpoints).details: capability en required_plan bij een ontbrekende functie; bij een aantal boven het plan ook parameter, requested en allowed. error.required_plan herhaalt het plan.required_plan is het goedkoopste plan dat wel geantwoord had. Stap over naar een hoger plan, of laat de functie weg.

Gegevens

Fouten: Gegevens
CodeStatusWanneerWat te doen
subsidy_not_found404Geen enkele maatregel heeft dit id of deze slug.details: subsidy: het id of de slug die je vroeg.GET /v1/subsidies geeft de lijst. Een maatregel die in een andere opging, blijft naar die andere verwijzen, dus een oud id is hier geen oorzaak van.
version_not_found404De maatregel bestaat, maar niet de gevraagde versie, of hij bestond nog niet op het as_of-tijdstip.De melding zegt welke versie actueel is, of van wanneer de eerste versie dateert.
source_not_found404Geen enkele bron heeft dit id. Ook het antwoord wanneer een webhookfilter een onbekende bron noemt.details: source: het id dat je gaf.GET /v1/sources geeft de lijst.
watchlist_not_found404Geen watchlist met dit id hoort bij je account. Ook het antwoord wanneer een webhookfilter er zo een noemt.GET /v1/watchlists geeft de jouwe.
webhook_not_found404Geen webhook-endpoint met dit id hoort bij je account.GET /v1/webhooks geeft de jouwe.
not_found404De referentie van de onderneming die je wilt verwijderen, staat niet op de watchlist.GET /v1/watchlists/{id}/companies geeft de referenties die erop staan.
conflict409De request is geldig, maar de toestand laat hem niet toe, bijvoorbeeld een 51e watchlist op één account.De melding zegt waarom. Pas eerst de toestand aan (verwijder een watchlist) en probeer dan opnieuw.

Limieten

Fouten: Limieten
CodeStatusWanneerWat te doen
rate_limit_exceeded429Te veel requests per seconde voor je plan (of, op de routes zonder sleutel, voor je adres). Ook het antwoord wanneer beide downloadplaatsen voor de volledige export in gebruik zijn.Wacht het aantal seconden uit Retry-After (1, of 5 voor de export). Vraag pagina's één voor één op in plaats van parallel.
quota_exceeded429Het requestquotum van deze maand is op.Retry-After telt de seconden tot het begin van de volgende UTC-maand. Met RateLimit-Remaining zie je het aankomen.
match_quota_exceeded429De match-evaluaties van deze maand zijn op, of een bulkmatch of watchlist-upload zou je erover brengen. Maatregelen lezen werkt nog.details: limit: de maandelijkse match-evaluaties van je plan.Retry-After telt de seconden tot de volgende UTC-maand. Een groter plan heeft er meer. Van een geweigerde bulkrequest wordt niets geëvalueerd of geteld.

Server

Fouten: Server
CodeStatusWanneerWat te doen
internal_error500Er liep iets mis aan onze kant. Het detail wordt gelogd, nooit meegestuurd.Probeer opnieuw met backoff. Blijft het gebeuren, stuur ons dan de request_id.
billing_unavailable503Kaartbetaling is niet ingesteld of de betaalprovider antwoordde niet. Komt alleen voor op de facturatieroutes van het dashboard.Probeer later opnieuw, of schrijf ons.
timeout504De request duurde langer dan 30 seconden en werd afgebroken. Geen enkele route hoort daar in de buurt te komen; de export wordt gestreamd.Probeer opnieuw. Een smallere filter of een kleinere pagina antwoordt sneller.

Aanmelden op het dashboard

Fouten: Aanmelden op het dashboard
CodeStatusWanneerWat te doen
google_sign_in_failed401Een Google-aanmeldtoken kon niet worden geverifieerd.Meld je opnieuw aan.
password_sign_in_disabled403Er werd geprobeerd te registreren of aan te melden met een wachtwoord, terwijl alleen aanmelden met Google aangeboden wordt.Meld je aan met Google.

Goed om te weten

  • Request-bodies zijn beperkt tot 2 MB.
  • Na de authenticatie beantwoordt het MCP-endpoint protocolproblemen als JSON-RPC-fouten (HTTP 200, of 400 voor een body die geen JSON is), en een mislukte tool als resultaat met isError; zie MCP.

Opnieuw proberen

Probeer een 429 opnieuw na Retry-After, en 500, 503 en 504 met exponentiële backoff. Probeer 400, 401, 402, 403, 404 of 422 niet ongewijzigd opnieuw: dezelfde request mislukt op dezelfde manier.