Aller au contenu
Subsido

Utiliser l'API

Erreurs

Une seule structure d’erreur sur chaque route. Fondez votre logique sur error.code : les codes ne changent jamais, les messages peuvent être reformulés.

L’enveloppe

{
  "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 est stable et lisible par une machine. message s’adresse à une personne, en anglais, et nomme ce qui n’allait pas : le paramètre, la valeur, ce qui était attendu.
  • request_id figure aussi dans l’en-tête X-Request-Id. Mentionnez-le si vous nous écrivez : c’est l’id dans nos journaux.
  • details est toujours un objet, vide s’il n’y a rien à ajouter. required_plan n’apparaît que sur plan_required.
  • Un 429 porte Retry-After en secondes.
{
  "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 ou 422

400 invalid_parameter signifie que la requête n’a pas pu être lue telle quelle : un paramètre de requête inconnu ou répété, une valeur hors de sa liste, une limite au-delà de votre formule, ou un corps JSON illisible, avec une propriété que la route ne connaît pas ou une valeur du mauvais type. 422 invalid_body signifie que le corps a été lu et contient quelque chose d’impossible : un code postal non belge, un numéro d’entreprise aux chiffres de contrôle faux, un budget négatif. details.field nomme la propriété.

Tous les codes

Requête

Erreurs : Requête
CodeStatutQuandQue faire
invalid_parameter400Un paramètre de requête est mal formé, hors limites, répété ou inconnu de la route ; une valeur ne fait pas partie de sa liste ; limit dépasse la taille de page de votre formule ; ou un corps JSON est illisible, contient une propriété que la route ne connaît pas ou une valeur du mauvais type.Le message nomme le paramètre et ce qui était attendu. Corrigez la requête : la renvoyer telle quelle échoue de la même façon. Les paramètres inconnus sont refusés plutôt qu'ignorés, pour qu'une faute de frappe n'élargisse jamais un résultat à votre insu.
invalid_cursor400Le curseur n'a pas été émis par l'API, ou il l'a été pour une autre liste ou un autre ordre de tri.Recommencez sans curseur. L'API refuse plutôt que de repartir discrètement de la première page.
invalid_body422Le corps JSON est lisible mais contient quelque chose d'impossible : un numéro d'entreprise dont les chiffres de contrôle sont faux, un code postal non belge, un code NACE invalide, une forme juridique inconnue, un montant négatif, une limite hors bornes, une référence en double.details: field : la propriété en cause, par exemple company.postcode.Corrigez la propriété indiquée dans details.field.
route_not_found404Aucun endpoint n'existe à ce chemin. La réponse reste du JSON, dans la structure d'erreur habituelle.Vérifiez le chemin dans /v1/openapi.json.
method_not_allowed405Le chemin existe, mais pas avec cette méthode, par exemple un GET sur /mcp.L'en-tête Allow liste les méthodes acceptées par ce chemin.

Clé et formule

Erreurs : Clé et formule
CodeStatutQuandQue faire
unauthorized401La clé est absente, mal formée ou révoquée, sur une route qui en demande une.Envoyez Authorization: Bearer avec une clé de production ou de test du tableau de bord.
subscription_required402Le compte de la clé n'a pas encore de formule. Il peut se connecter et créer des clés, mais aucune clé ne donne accès aux données tant qu'aucune formule n'est choisie.Choisissez une formule dans le tableau de bord. La même clé fonctionne dès que la formule est active.
plan_required403La route demande une fonction que votre formule n'inclut pas (le flux de modifications, l'historique, as_of, les webhooks, le matching en masse, les listes de suivi, l'export complet), ou un nombre dépasse ce que votre formule permet (entreprises dans un matching en masse, entreprises sur l'ensemble de vos listes de suivi, endpoints de webhook).details: capability et required_plan pour une fonction manquante ; pour un nombre trop élevé, aussi parameter, requested et allowed. error.required_plan répète la formule.required_plan est la formule la moins chère qui aurait répondu. Passez à une formule supérieure, ou renoncez à la fonction.

Données

Erreurs : Données
CodeStatutQuandQue faire
subsidy_not_found404Aucune mesure n'a cet id ou ce slug.details: subsidy : l'id ou le slug demandé.GET /v1/subsidies les liste. Une mesure fusionnée dans une autre continue de renvoyer vers celle-ci : un ancien id n'explique donc pas cette erreur.
version_not_found404La mesure existe, mais pas la version demandée, ou elle n'existait pas encore à l'instant as_of.Le message indique la version actuelle, ou la date de la première version.
source_not_found404Aucune source n'a cet id. Aussi renvoyé quand un filtre de webhook nomme une source inconnue.details: source : l'id fourni.GET /v1/sources les liste.
watchlist_not_found404Aucune liste de suivi avec cet id n'appartient à votre compte. Aussi renvoyé quand un filtre de webhook en nomme une.GET /v1/watchlists liste les vôtres.
webhook_not_found404Aucun endpoint de webhook avec cet id n'appartient à votre compte.GET /v1/webhooks liste les vôtres.
not_found404La référence d'entreprise que vous voulez retirer n'est pas sur la liste de suivi.GET /v1/watchlists/{id}/companies liste les références qu'elle contient.
conflict409La requête est valide mais l'état ne la permet pas, par exemple une 51e liste de suivi sur un même compte.Le message dit pourquoi. Modifiez d'abord l'état (supprimez une liste), puis réessayez.

Limites

Erreurs : Limites
CodeStatutQuandQue faire
rate_limit_exceeded429Trop de requêtes par seconde pour votre formule (ou, sur les routes sans clé, pour votre adresse). Aussi renvoyé quand les deux créneaux de téléchargement de l'export complet sont occupés.Attendez le nombre de secondes indiqué dans Retry-After (1, ou 5 pour l'export). Demandez les pages une à une plutôt qu'en parallèle.
quota_exceeded429Le quota de requêtes du mois est épuisé.Retry-After compte les secondes jusqu'au début du mois UTC suivant. RateLimit-Remaining permet de le voir venir.
match_quota_exceeded429Les évaluations de matching du mois sont épuisées, ou un matching en masse ou un ajout à une liste de suivi vous ferait dépasser la limite. La lecture des mesures fonctionne toujours.details: limit : les évaluations de matching mensuelles de votre formule.Retry-After compte les secondes jusqu'au mois UTC suivant. Une formule supérieure en offre davantage. Rien d'une requête en masse refusée n'est évalué ni compté.

Serveur

Erreurs : Serveur
CodeStatutQuandQue faire
internal_error500Une erreur s'est produite de notre côté. Le détail est journalisé, jamais envoyé.Réessayez avec un délai croissant. Si l'erreur persiste, envoyez-nous le request_id.
billing_unavailable503Le paiement par carte n'est pas configuré ou le prestataire de paiement n'a pas répondu. Uniquement sur les routes de facturation du tableau de bord.Réessayez plus tard, ou écrivez-nous.
timeout504La requête a duré plus de 30 secondes et a été interrompue. Aucune route ne devrait en approcher ; l'export est diffusé en flux.Réessayez. Un filtre plus étroit ou une page plus petite répond plus vite.

Connexion au tableau de bord

Erreurs : Connexion au tableau de bord
CodeStatutQuandQue faire
google_sign_in_failed401Un jeton de connexion Google n'a pas pu être vérifié.Reconnectez-vous.
password_sign_in_disabled403Une inscription ou une connexion par mot de passe a été tentée alors que seule la connexion Google est proposée.Connectez-vous avec Google.

Bon à savoir

  • Les corps de requête sont limités à 2 Mo.
  • Après l’authentification, l’endpoint MCP répond aux problèmes de protocole par des erreurs JSON-RPC (HTTP 200, ou 400 pour un corps qui n’est pas du JSON), et à un outil en échec par un résultat avec isError ; voir MCP.

Réessayer

Réessayez un 429 après Retry-After, et les 500, 503 et 504 avec un délai exponentiel. Ne renvoyez pas tels quels les 400, 401, 402, 403, 404 ou 422 : la même requête échoue de la même façon.