API externe

Documentation développeurs

Intégrez les paiements en ligne et TPE, consultez les opérations et recevez des webhooks via l'API externe Avirato Payments.

Gestion des erreurs

Format d'erreur standard

Toutes les réponses d'erreur suivent ce format :

{
  "success": false,
  "error": {
    "message": "Description lisible de l'erreur",
    "code": 12001,
    "statusCode": 400,
    "traceId": "abc123def456..."
  }
}
ChampDescription
messageDescription de l'erreur en anglais
codeCode d'erreur interne (voir tableau ci-dessous)
statusCodeCode HTTP de la réponse
traceIdIdentifiant unique pour le support technique

Note de sécurité : Les erreurs internes du serveur (5xx) renvoient un message générique ("An error has occurred...") pour ne pas exposer les détails d'implémentation. Le traceId permet à l'équipe support d'enquêter sur l'erreur concrète.

Note sur les environnements : Les codes d'erreur, formats et messages sont identiques dans les environnements Live et Test. Il n'y a pas de différence dans la gestion des erreurs entre environnements.

Catalogue des codes d'erreur

Erreurs d'authentification et d'autorisation (11xxx)

CodeHTTPDescriptionAction recommandée
11001403Clé API invalide ou non fournieVérifiez l'en-tête X-API-KEY
11002403IP non autoriséeConfigurez votre IP dans le tableau de bord (Intégrations > API Keys)
11008403Accès refusé à la ressourceLe webcode ne correspond pas, le paiement n'appartient pas à l'API externe, ou erreur d'environnement

Erreurs de validation (12xxx)

CodeHTTPDescriptionAction recommandée
12001400Paramètre requis manquant ou format invalideVérifiez les champs obligatoires et leurs formats
12002400Date au format incorrectUtilisez le format ISO 8601 (ex. : 2026-07-15T14:00:00Z)
12006400Format de pays invalideUtilisez ISO 3166-1 alpha-2 (ex. : ES, FR, DE)
12009400Pays non pris en chargeContactez le support pour la liste des pays disponibles

Erreurs de ressource (10xxx)

CodeHTTPDescriptionAction recommandée
10404404Ressource introuvableVérifiez que le sessionId ou paymentReference est correct

Erreurs POS (13xxx)

CodeHTTPDescriptionAction recommandée
13001500Erreur du fournisseur de paiementRéessayez après quelques secondes. Si cela persiste, contactez le support
13004502Erreur de communication avec le terminalVérifiez que le terminal est allumé et connecté
13005409Terminal occupéAttendez la fin de la transaction en cours et réessayez

Conflits d'idempotence (409)

Ces conflits n'ont pas de code numérique interne : le message permet de les distinguer du 409 de terminal occupé (13005).

CasHTTPMessage (littéral)Action recommandée
Même Idempotency-Key, body différent409Idempotency key reused with a different request body.Utilisez une nouvelle clé ou renvoyez le même body que la requête d'origine
Même Idempotency-Key, autre endpoint409Idempotency key already used for a different endpoint.Ne réutilisez pas la même clé entre des endpoints distincts

Erreurs internes (99xxx)

CodeHTTPDescriptionAction recommandée
99001500Erreur interne du serveurNotez le traceId et contactez le support

Exemple de réponse d'erreur

{
  "success": false,
  "error": {
    "message": "External device is busy.",
    "code": 13005,
    "statusCode": 409,
    "traceId": "b2f3d36dc305249e8d1ebaa49ef616f1"
  }
}

Bonnes pratiques

Nouvelles tentatives

  • Erreurs 4xx : ne réessayez pas (le problème est dans la requête)
  • Erreurs 5xx : réessayez avec un backoff exponentiel (1 s, 2 s, 4 s, 8 s…)
  • 409 : si c'est 13005 (terminal occupé), attendez 5 à 10 secondes et réessayez. Si le message commence par Idempotency key…, ne réessayez pas à l'aveugle : corrigez la clé ou le body de la requête
  • Utilisez toujours Idempotency-Key pour que les nouvelles tentatives soient sûres (mais assurez-vous de ne pas la réutiliser avec un body différent)

Journalisation

Enregistrez le traceId des réponses d'erreur pour faciliter la communication avec le support technique.

Validation préalable

Validez les données avant d'envoyer la requête pour éviter les erreurs 400 :

  • amount.value doit être un entier positif (centimes)
  • amount.currency doit être exactement 3 lettres majuscules (EUR, GBP ou USD)
  • webcode ne peut pas être vide
  • Les URLs (urlOk, urlKo) doivent être des URLs valides avec protocole
  • reason pour les remboursements doit être l'une des 5 valeurs exactes autorisées