Codis d'error
error.code | HTTP | Causa típica | Què cal fer |
|---|---|---|---|
unauthorized | 401 | Clau d’API absent/no vàlida, o clau d’un entorn diferent | Envieu la clau a la capçalera X-B2B-API-Key i assegureu-vos que coincideix amb l’entorn (sandbox, staging o producció). |
missing_api_key | 401 | Aquesta clau d’API no s’ha proporcionat a la capçalera | Envieu la clau a la capçalera X-B2B-API-Key i assegureu-vos que coincideix amb l’entorn (sandbox, staging o producció). |
invalid_api_key | 401 | La clau d’API proporcionada no és vàlida | Envieu una clau vàlida a la capçalera X-B2B-API-Key i assegureu-vos que coincideix amb l’entorn (sandbox, staging o producció). |
expired_api_key | 401 | La clau d’API proporcionada ha caducat | Envieu una clau vàlida i activa a la capçalera X-B2B-API-Key |
no_account_group | 403 | Clau vàlida però sense grup/permisos vinculats | Demaneu que s’habilitin/assignin permisos per a aquesta clau (els comptes de staging requereixen una sol·licitud de suport; els permisos de sandbox són automàtics). |
resource_missing | 404 | L’ID del recurs no existeix o no és accessible al vostre tenant | Reviseu l’endpoint i l’ID que esteu enviant. |
invalid_request_params | 400 | JSON mal format, tipus incorrectes o estructura inesperada | Valideu el payload abans d’enviar-lo. |
invalid_api_version ¹ | 400 | La versió d’API {api_version} no és compatible | Valideu el payload abans d’enviar-lo. |
missing_api_version ¹ | 400 | La versió de l’API no s’especifica ni a la capçalera ni al IntegrationGroup | Valideu el payload abans d’enviar-lo. |
api_version_subdomain_mismatch ¹ | 400 | El subdomini no coincideix amb la versió d’API especificada a la capçalera X-B2B-API-Version o la associada a la clau d’API | Canvieu el subdomini a un de correcte. Useu app.b2brouter o app-staging.b2brouter per a la versió legacy (v2025-01-01). Useu api.b2brouter o api-staging.b2brouter per a totes les versions des de v2025-10-13. |
parameter_blank, parameter_empty | 422 | Camps requerits absents/en blanc | Ompliu els camps requerits i torneu a enviar. |
parameter_inclusion | 422 | El valor no es troba al catàleg permès (per exemple, un scheme no vàlid) | Comproveu els valors permesos (vegeu la Guia d’Esquemes / llistes) i corregiu. |
parameter_taken | 422 | Un valor únic ja existeix (per exemple, número de factura) | Useu un valor nou o feu un GET primer per evitar duplicats. |
parameter_cannot_change | 422 | Intent d’editar un camp immutable | Elimineu el camp de l’actualització o creeu un nou recurs. |
conflict | 409 | L’estat actual del recurs rebutja l’operació | Resoleu el conflicte d’estat i torneu a intentar-ho. |
| (sense codi) | 429 | Heu superat el límit de velocitat | Implementeu backoff exponencial, feu cache i preferiu webhooks en lloc de polling. |
Exemples ràpids
Section titled “Exemples ràpids”1) 401 Unauthorized (clau d’API incorrecta/absent o entorn incorrecte)
Section titled “1) 401 Unauthorized (clau d’API incorrecta/absent o entorn incorrecte)”Exemple de petició:
curl --request GET \ --url 'https://api-staging.b2brouter.net/accounts?offset=0&limit=25' \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'Resposta d’exemple:
{ "error": { "code": "unauthorized", "message": "Invalid API Key provided, or the API key might not have the necessary permissions for this action.", "type": "invalid_request_error" }}Assegureu-vos d’utilitzar la clau correcta per al vostre entorn (sandbox test_…, staging o producció) i d’enviar-la a X-B2B-API-Key.
2) 404 Not Found (El recurs no existeix o no és accessible)
Section titled “2) 404 Not Found (El recurs no existeix o no és accessible)”Exemple de petició:
curl --request GET \ --url https://api-staging.b2brouter.net/directory/es/ES1234567890 \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'Resposta d’exemple:
{ "error": "Not found"}3) 422 Unprocessable Entity (errors de validació)
Section titled “3) 422 Unprocessable Entity (errors de validació)”Exemple de petició:
curl --request POST \ --url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/transports \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json' \ --header 'content-type: application/json''Resposta d’exemple:
{ "error": { "code": "parameter_taken", "message": "Transport type code has already been taken and Peppol Endpoint ID has already been taken", "param": "transport_type_code", "request_log_url": "https://api-staging.b2brouter.net/api_requests/123456", "type": "invalid_request_error" }}Els errors de validació retornen HTTP 422 (Unprocessable Entity) amb detalls d’errors a nivell de camp, de manera que podeu corregir l’entrada i tornar a enviar la petició si és necessari.
Traçabilitat de peticions
Section titled “Traçabilitat de peticions”Cada resposta d’API registrada inclou la capçalera X-B2B-API-Request-Id amb l’identificador únic del log de la petició emmagatzemada. Podeu utilitzar aquest valor per:
- Correlacionar una resposta amb la seva entrada de log del servidor.
- Referenciar-lo en tiquets de suport per a una investigació més ràpida.
- Incloure’l als vostres propis logs d’aplicació per a la traçabilitat d’extrem a extrem.
Les respostes d’error també inclouen un camp request_log_url al cos JSON que enllaça directament al log de la petició.
Bones pràctiques de gestió d’errors
Section titled “Bones pràctiques de gestió d’errors”- Autenticació: mantingueu claus separades per entorn i sempre envieu
X-B2B-API-Key. - Limitació de velocitat: useu backoff exponencial, feu cache de les respostes i preferiu webhooks al polling sempre que sigui possible.
- Vocabularis controlats: quan un valor ha de provenir d’un catàleg (per exemple,
scheme), comproveu primer l’API/guia d’Esquemes.