Voir en Markdown

Erreurs et limites

Forme d'une erreur

{
  "success": false,
  "request_id": "req_e097717d1d433831",
  "error": {
    "code": "recipient_not_opted_in",
    "message": "Le destinataire n'a pas encore accepté de recevoir vos messages.",
    "type": "invalid_request",
    "param": "to",
    "upstream": { "provider": "meta", "code": 131047 },
    "doc_url": "https://www.fiitsa.com/api-docs/erreurs"
  }
}

Branche ton code sur code, jamais sur message. Le code est stable et documenté ; le message peut être reformulé ou traduit.

Quand WhatsApp refuse, upstream.code porte le code d'erreur de Meta, que tu peux consulter dans leur documentation.

Codes

CodeHTTPSignification
missing_api_key401Aucune clé fournie
invalid_api_key401Clé inconnue ou révoquée
insufficient_scope403La clé n'a pas la portée requise
plan_required403La formule n'inclut pas l'accès API
whatsapp_not_connected403Aucun numéro relié à la boutique
unsupported_field400Champ non reconnu ou interdit
missing_parameter400Paramètre requis absent
unknown_route404Route inexistante
method_not_allowed405Route connue, verbe incorrect
meta_rejected422WhatsApp a refusé
rate_limited429Débit dépassé
upstream_unavailable503Indisponibilité passagère
gateway_timeout504Pas de réponse dans le délai

Limitation de débit

60 requêtes par tranche de 10 secondes en rafale, 600 par minute en soutenu.

Chaque réponse porte X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. Sur un 429, respecte l'en-tête Retry-After.

Ces limites protègent d'une boucle accidentelle. Le nombre de messages, lui, n'est pas plafonné.

Support

Chaque réponse porte X-Fiitsa-Request-Id, également présent dans le corps sous request_id. Communique-le : c'est ce qui permet de retrouver l'appel exact, avec son contexte interne.