Erreurs

Chaque erreur, sur l'ensemble de l'API, utilise une seule enveloppe, de sorte que vous pouvez gérer les échecs avec un seul chemin de code.

Forme de l'erreur

enveloppe d'erreur
{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "The request was invalid.",
    "details": [
      { "path": "declaredNumber", "message": "must be E.164" }
    ]
  }
}

Le statut HTTP correspond au code. details n'est présent que pour les erreurs de validation.

Codes d'erreur

CodeHTTPQuand
UNAUTHORIZED401Clé manquante ou invalide.
FORBIDDEN403La clé n'a pas la portée requise.
NOT_FOUND404Aucune ressource de ce type sur votre compte.
VALIDATION_FAILED400Le corps ou la requête était invalide.
CONFLICT409L'action entre en conflit avec l'état actuel (par ex. envoyer depuis un numéro non connecté).
RATE_LIMITED429Trop de requêtes. Ralentissez et réessayez.
OUTBOUND_LIMIT429Le plafond des envois à froid : ce numéro a lancé trop de NOUVELLES conversations cette heure-ci. Les réponses ne sont jamais comptées. Attendez la durée indiquée par Retry-After, et gardez un volume de premiers contacts modéré.
SLOT_REQUIRED402Connecter un numéro exige un slot libre.
ACCOUNT_SUSPENDED402Tout le compte est en attente. Toutes les routes répondent ainsi, sauf la connexion et la facturation. La clé est valide et réessayer n'y changera rien : contactez-nous pour rétablir l'accès.
TRANSPORT_UNAVAILABLE503Le service de connexion est brièvement indisponible. Réessayez sous peu.
TRANSPORT_BUSY503Le service de messagerie est occupé. Attendez la durée indiquée par l'en-tête Retry-After, puis réessayez ; tout ce qui a déjà été émis reste valide.
BILLING_UNAVAILABLE503Ce déploiement n'a aucun prestataire de paiement configuré.
INTERNAL500Une erreur inattendue de notre côté.

Temporiser

Trois codes vous demandent d'attendre, et ils ne veulent pas dire la même chose. RATE_LIMITED signifie ralentissez. OUTBOUND_LIMIT signifie cessez un moment d'écrire à de nouvelles personnes : les réponses passent toujours, et le budget appartient au numéro plutôt qu'à votre clé. TRANSPORT_BUSY signifie que le service de messagerie nous bride : c'est de la charge, jamais un défaut de votre requête, et tout ce qui a déjà été émis reste valide. Les trois portent Retry-After en secondes lorsque l'attente est connue ; attendez au moins ce délai.

429 Too Many Requests
{
  "error": {
    "code": "OUTBOUND_LIMIT",
    "message": "This number has started too many new conversations in the last hour."
  }
}

Erreurs de validation

Pour une erreur VALIDATION_FAILED, details liste chaque champ fautif par path, afin que vous puissiez signaler le problème à côté du bon champ.

gestion des erreurs
const res = await fetch("https://api.sendveo.com/v1/numbers", options)
if (!res.ok) {
  const { error } = await res.json()
  if (error.code === "VALIDATION_FAILED") {
    for (const d of error.details ?? []) showFieldError(d.path, d.message)
  } else {
    showBanner(error.message)
  }
}
Codes d'erreur de l'API · Docs Sendveo