Sign inGet Started

Errori

Ogni richiesta Bird API fallita restituisce la stessa risposta di errore JSON, annidata sotto una chiave di primo livello error. Questa è una risposta reale a una richiesta di invio con corpo vuoto:
Esempio di codice
{
  "error": {
    "type": "validation_error",
    "code": "E01001",
    "name": "ValidationError",
    "message": "Request has 1 validation error.",
    "doc_url": "https://bird.com/docs/api/errors/E01001",
    "request_id": "req_01ky7q3hckecgv6d7jpq865532",
    "details": [{ "param": "body", "message": "missing properties 'from', 'to'" }]
  }
}
Lo status HTTP deriva dal type. Gli errori client usano 400 per richieste malformate, 401 o 403 per errori di accesso, 402 per la fatturazione e 404 per risorse mancanti. Usano 409 per i conflitti, 412 per precondizioni non soddisfatte, 422 per errori di validazione e regole di business e 429 per la limitazione delle richieste. Gli errori lato Bird usano 5xx. Lo status identifica la categoria; la risposta di errore spiega cosa è successo.

I campi della risposta di errore

CampoRuolo
typeCategoria generale per la gestione approssimativa: validation_error, auth_error, permission_error, not_found_error, conflict_error, rate_limit_error, billing_error, internal_error e pochi altri. Un enum chiuso che cresce raramente.
codeIdentificatore opaco e stabile (E01001). Il riferimento canonico: univoco, mai rinominato, mai riutilizzato. Quando un errore viene ritirato, il suo codice resta riservato permanentemente.
nameSlug leggibile (ValidationError) per la leggibilità dei log. Sempre accompagnato da code, mai un sostituto.
messageDescrizione leggibile. Non stabile: il testo può cambiare senza preavviso. Visualizzalo, registralo nei log, non analizzarlo mai.
paramPer gli errori relativi all'input, il campo che ha causato il problema. Omesso quando non applicabile.
doc_urlLink stabile alla pagina della documentazione per questo codice.
request_idSempre presente, e restituito anche come header di risposta X-Request-Id. Citalo nelle richieste di supporto: permette a Bird di tracciare la richiesta esatta.
detailsProblemi di validazione per campo. Presente solo nelle risposte validation_error.
remediationUn passo successivo leggibile per risolvere l'errore. Presente quando è nota una modalità di recupero.
nextOperazioni che risolvono l'errore, nell'ordine in cui provarle. Presente per errori con un percorso di recupero ben definito, come le precondizioni non soddisfatte.
vendor_codeCodice verbatim da un sistema a valle (un codice di risposta SMTP, un codice di rifiuto di pagamento). Presente solo quando Bird espone il codice di un sistema esterno su cui potresti voler agire.
Usa type per la gestione approssimativa e code per la gestione specifica, mai message. Un client tipico fa switch su type (riprovare su rate_limit_error, mostrare validation_error all'utente, allertare qualcuno su internal_error) e confronta singoli valori code solo per i pochi errori che gestisce in modo specifico.
Codici come E04012 sono volutamente opachi. Ogni codice rimanda a una pagina di documentazione tramite doc_url, che spiega la causa e come risolvere. Il catalogo completo si trova nel riferimento errori.

Errori di validazione: un codice, molti dettagli

La validazione a livello di campo non prevede un codice separato per ogni combinazione campo-errore. Ogni errore di validazione è E01001 ValidationError con un array details che elenca ogni problema a livello di campo come {param, message}, così come l'errore di invio catturato elenca le proprietà mancanti. Le stringhe message dentro details possono cambiare e vanno solo visualizzate. Usa param per mappare i problemi ai campi del form.

Indicazioni per il recupero: rimedio e passi successivi

Gli errori con una correzione nota la includono nella risposta di errore. Questa è una risposta reale a una chiamata webhooks effettuata con una chiave API priva dello scope richiesto:
Esempio di codice
{
  "error": {
    "type": "permission_error",
    "code": "E02035",
    "name": "InsufficientScope",
    "message": "This request requires the \"webhooks:read\" scope, which your credential has not been granted.",
    "param": "webhooks:read",
    "doc_url": "https://bird.com/docs/api/errors/E02035",
    "request_id": "req_01ky7q4665emc9tw1pxkptaqwq",
    "remediation": "Re-authenticate with a credential that has been granted the required scope, then retry."
  }
}
remediation è una frase destinata a un essere umano o al log di un agente; next, quando presente, elenca le operazioni API che risolvono l'errore nell'ordine in cui provarle (verificare un dominio, poi riprovare l'invio). Agenti e CLI possono eseguire next direttamente; i client interattivi possono mostrare remediation così com'è.

Gestire bene gli errori

  • Riprova 429 e 5xx, nient'altro per default. Rispetta Retry-After sulla limitazione delle richieste (vedi Limitazione delle richieste), usa il backoff esponenziale su 5xx e invia un Idempotency-Key per rendere sicuri i retry delle richieste mutanti.
  • Registra code, name e request_id insieme. Il codice è ciò che cercherai nella documentazione e nei tuoi log; il request ID è ciò di cui ha bisogno il supporto.
  • Tollera nuovi codici e tipi. Nuovi codici di errore vengono rilasciati regolarmente con la crescita dei prodotti e l'enum type occasionalmente acquisisce un valore. Scrivi il tuo handler con un branch di default ragionevole anziché un match esaustivo.

Passi successivi