Codes d'erreur

Référence pour tous les codes d'erreur retournés par les APIs ZYKAY.

Erreurs de l'API d'échange

CodeHTTPDescriptionSolution
MISSING_HEADERS401Un ou plusieurs headers requis manquentIncluez tous les headers : X-Partner-ID, X-Partner-Timestamp, X-Partner-Nonce, X-Partner-Signature
INVALID_PARTNER403Partner ID non reconnuVérifiez votre Partner ID
TIMESTAMP_SKEW401Timestamp décalé de plus de 5 minutesUtilisez le timestamp Unix actuel en secondes, synchronisez l'horloge serveur
INVALID_SIGNATURE401La vérification de signature HMAC a échouéVérifiez le calcul de signature. IMPORTANT : Le partner secret est base64 et doit être décodé avant utilisation
REPLAY_DETECTED401Le nonce a déjà été utiliséUtilisez un UUID v4 unique pour chaque requête
INVALID_REQUEST400Corps de requête invalide ou grant_code manquantVérifiez le format JSON et la présence du grant_code
INVALID_GRANT400Format de grant invalideLe grant_code doit commencer par g_
GRANT_INVALID401Grant code inexistant ou expiréLes grants expirent en 5 minutes et sont à usage unique
INTERNAL_ERROR500Erreur côté serveurRéessayez avec backoff exponentiel

Erreurs de l'API d'introspection

CodeHTTPDescriptionSolution
INVALID_REQUEST400pass_token manquant ou invalideVérifiez que le body contient {"pass_token": "p_..."}
INTERNAL_ERROR500Erreur côté serveurRéessayez avec backoff exponentiel

Les erreurs de signature HMAC (MISSING_HEADERS, INVALID_SIGNATURE, etc.) sont identiques à celles de l'API d'échange ci-dessus.

Un token expiré ou invalide retourne un statut 200 avec {"active": false} (pas une erreur HTTP), conformément à la convention RFC 7662.

Erreurs Billing Session (ADULT_BLIND)

Ces erreurs sont retournées par POST /api/billing/session uniquement.

CodeHTTPDescriptionSolution
FORBIDDEN_RAIL403L'organisation n'est pas sur le rail ADULT_BLINDContactez tech@zykay.com pour activer le rail
MISSING_BLIND_APP_ID400blindAppId non configuré pour l'organisationContactez le support ZYKAY
MISSING_ORIGIN400Le champ origin est absent du corpsIncluez "origin": "https://votresite.com" dans le body
INVALID_SCOPES400Scopes non supportés pour votre tierVérifiez les scopes disponibles pour votre niveau
INVALID_JSON400Corps JSON malforméVérifiez le format du body

Les erreurs HMAC (MISSING_HEADERS, INVALID_PARTNER, INVALID_SIGNATURE, etc.) sont identiques à celles de l'API d'échange.

Erreurs Loader v4 (frontend)

Le loader v4 n'utilise pas de postMessage d'erreur. Les erreurs passent par le callback onError :

CodeDescriptionAction
INIT_FAILEDÉchec de création de verify-requestVérifier data-partner-id, connectivité et CORS
SERVER_VERIFY_TIMEOUTTimeout du mode server-verifyVérifier votre endpoint data-server-verify-endpoint

Codes de statut HTTP

StatutSignification
200Succès
400Mauvaise requête - Vérifier le corps de la requête
401Non autorisé - Vérifier identifiants/signature
404Non trouvé - Vérifier l'URL de l'endpoint
429Trop de requêtes - Limite de débit atteinte (voir politique publiée)
500Erreur interne du serveur - Réessayer plus tard

Politique 429 (résumé)

  • GET /api/w/verify-status/:requestId?pt=...: 30 req / 60s, renvoie Retry-After: 60
  • POST /api/partner/verify-request: 60 req / 60s
  • GET /api/partner/verify-status/:requestId: 60 req / 60s
  • POST /api/billing/session (pré-auth IP): 30 req / 60s
  • POST /api/billing/session (post-auth partenaire): 100 req / 60s

Référence complète: Politique de Rate-Limit

Gestion des erreurs (intégration recommandée)

async function callWithRetry(makeCall) {
  const delaysMs = [1000, 2000, 4000];
 
  for (let i = 0; i < delaysMs.length; i++) {
    const res = await makeCall();
    if (res.status !== 429) return res;
 
    const retryAfter = Number(res.headers.get('Retry-After') || '0');
    const waitMs = retryAfter > 0 ? retryAfter * 1000 : delaysMs[i];
    await new Promise((r) => setTimeout(r, waitMs));
  }
 
  throw new Error('Rate limit exceeded after retries');
}