API keys et accès
Tous les refus d'une clé, d'un compte ou d'une version (400, 401, 403, 406, 409, 429), ainsi que l'erreur CORS qui n'en est pas une.
L'API renvoie un code différent pour chaque cause d'échec d'authentification, et ces codes ne
correspondent pas toujours aux attentes : la validation renvoie 422, une mauvaise classe de clé
renvoie 406.
Erreur 401 Invalid API credentials
La clé n'est pas reconnue comme un identifiant utilisable. Deux messages reviennent, et le message indique quelle cause chercher :
| Message | Cause | Vérification |
|---|---|---|
Invalid API credentials | Faute de frappe ou valeur tronquée | La valeur correspond à la clé affichée dans le Dashboard : un préfixe, un point et toute la partie secrète |
Invalid API credentials | Un préfixe Bearer devant la clé | Voir ci-dessous |
Invalid API credentials | Clé supprimée ou désactivée | Une clé supprimée disparaît de Paramètres → Développeurs → Clés API ; une clé désactivée y reste, marquée Désactivé |
Invalid API credentials | Clé de l'autre environnement | pk_test. ne fonctionne pas en live et pk. ne fonctionne pas dans la sandbox |
Invalid or revoked API credentials | Clé ayant dépassé expires_at, ou révoquée à l'instant | La date d'expiration est affichée près de la clé |
La clé est vérifiée à chaque requête : une clé révoquée à l'instant cesse donc immédiatement de fonctionner.
Envoyez-la dans Authorization sans préfixe Bearer. L'API considère la valeur de l'en-tête comme
la clé elle-même. Ajouter Bearer fait échouer la recherche comme toute faute de frappe.
curl https://api.wajub.com/payments \
-H "Authorization: sk_test.xxxxxxxxxxxxxxxx…"Erreur 403 Security Alert: You are trying to use a Private Key from a browser dans le navigateur
Wajub a détecté une clé sk. utilisée depuis un navigateur. Il refuse l'appel et envoie un e-mail
au propriétaire du compte et aux administrateurs.
Deux actions sont nécessaires. Déplacez l'appel vers votre serveur et considérez la clé comme divulguée. Elle se trouvait dans une application téléchargée par quelqu'un. Créez une clé de remplacement, déployez-la, puis supprimez l'ancienne. Bonnes pratiques de sécurité présente la procédure qui évite une interruption.
Une clé restreinte (rk.) détectée dans un navigateur déclenche le même e-mail, mais son appel
aboutit encore pour l'instant. Déplacez-le vers votre serveur et remplacez la clé de la même façon :
Wajub la refusera plus tard avec ce 403.
Erreur 403 IP address not allowed for this API key liée à l'adresse IP
La clé possède une liste d'IP autorisées et l'appelant n'y figure pas. Cette liste s'applique à tous les types de clés, y compris les clés publiques. Elle accepte des adresses IPv4 ou IPv6 exactes et des plages CIDR des deux familles. Une liste vide ne pose aucune restriction.
La cause habituelle est un déploiement qui modifie votre adresse de sortie ou un job exécuté depuis une machine non ajoutée. Comparez l'IP réelle de l'appelant à la liste de la clé.
Erreur 403 This API key does not have permission to read payment liée au scope
Une clé restreinte ne possède pas le scope exigé par la route. Les scopes suivent le format
{resource}.{read|write}. Le verbe détermine la partie nécessaire : GET, HEAD et OPTIONS
exigent read, les autres verbes exigent write.
Cette erreur possède une seconde forme importante.
Cette réponse ne signale pas un scope manquant. Une clé restreinte fonctionne comme une liste
d'autorisations, pas comme un filtre. Si une route ne correspond à aucune ressource avec des scopes,
aucune clé restreinte ne peut l'atteindre, quelles que soient ses autorisations. Quatre chemins font
exception, car ils ne contiennent aucune donnée sensible : /channels, /countries, /currencies
et la racine de l'API.
Deux ressources sont accessibles en lecture seule : balance et account. Une clé restreinte ne
peut jamais les modifier et ne peut donc pas créer de connexion Sync. Utilisez pour cela une clé
privée sur votre serveur.
Erreur 406 Private Key Required pour une clé publique
La route exige une clé privée, mais vous avez envoyé une clé publique. Une clé publique n'atteint
que ce dont un checkout a besoin : créer un paiement, le débiter ou en débiter une échéance et
terminer l'étape du payeur, le lire par son identifiant, les moyens de payer, créer un client et
les données de référence. Toute autre route répond 406 : lister les paiements, en annuler, en
activer, en modifier ou en clôturer un et lister ses remboursements ; lister, lire ou modifier les
clients ; les liens et les factures ; et /balance, /transfers, /refunds, /disputes,
/beneficiaries, /webhooks, /events, /identity, /accounts, /tax, /shield et les
tax_ids d'un client. Une connexion Sync se crée donc uniquement depuis votre serveur. Le tableau
complet se trouve dans Authentification.
Le fait qu'un appel provenant d'une clé publique soit accepté ne signifie pas qu'il doit être effectué dans un navigateur.
Erreur 409 sur DELETE /keys/current
DELETE /keys/current supprime la clé qui l'envoie, et seulement une clé créée par un appairage, en
connectant la CLI ou une application à votre compte. Toute autre clé, par exemple une clé créée dans
le Dashboard, répond 409 et reste en place. Supprimez-la dans
Paramètres → Développeurs → Clés API si vous n'en avez plus besoin.
Erreur 403 API access is currently restricted for this account. Contact support.
Wajub a restreint le compte, et la restriction ferme toute l'API, quelle que soit la clé envoyée. Le
corps porte error_code: merchant_restricted et le type de restriction dans restriction. Une
restriction plus étroite ne refuse que certains appels, avec son propre error_code : voir
Erreurs de restriction. Contactez le support.
Erreur 403 This feature is only available in live mode.
Les liens, les factures et quelques autres routes réservées au live refusent une clé sandbox. Appelez-les avec une clé live une fois le compte vérifié.
Erreur 403 … is not included in your plan
Sync (/accounts, tout appel avec X-Sync) et Tax (/tax) demandent le produit dans votre plan ou
une option active. Le corps porte error_code: feature_not_in_plan.
Erreur 404 ou 403 sur un appel avec X-Sync
404 Sync account not found. signifie que la connexion n'existe pas, appartient à une autre
plateforme ou à l'autre environnement : les trois reçoivent la même réponse. Sync account is not active. donne son statut.
This Sync account does not have the '…' permission. signifie que le marchand n'a pas accordé cette
capacité. Payments and withdrawals are suspended for this Sync account. ne refuse que les appels
qui déplacent de l'argent pendant que les paiements du marchand sont suspendus ; les lectures
fonctionnent.
Erreur 400 Unsupported API version
L'en-tête X-Wajub-Version nomme une version que l'API ne sert pas. Le message liste celles qu'elle
sert.
Erreur 429 Too many requests
Une limite de requêtes. type dit quel compteur a déclenché et
retry_after combien de temps attendre : voir Limites de requêtes.
« Je reçois une erreur CORS »
Ce n'est presque certainement pas le cas. Toutes les réponses de l'API, y compris les erreurs,
contiennent Access-Control-Allow-Origin: *. Les requêtes préliminaires OPTIONS répondent avec
204, les méthodes et les en-têtes autorisés. Wajub ne produit pas d'erreurs CORS.
Le navigateur signale probablement l'une des situations suivantes comme une requête échouée.
| Cause réelle | Indice |
|---|---|
Blocage 403 du navigateur présenté ci-dessus | Clé privée dans le code client |
| Requête jamais envoyée | URL incorrecte, onglet hors ligne ou extension bloquée |
| En-tête personnalisé ajouté | Seuls les en-têtes répertoriés sont autorisés lors de la requête préliminaire |
Vérifiez surtout la dernière ligne dans l'onglet réseau. La requête préliminaire autorise
Content-Type, Authorization, X-Requested-With, X-Request-Id, Idempotency-Key,
X-Idempotency-Key, X-Sync, Accept, Origin et X-Wajub-Version. Tout autre en-tête fait échouer cette requête. Le navigateur signale alors une
erreur CORS pour un appel que l'API n'a jamais examiné.
Réponse 404 pour un identifiant qui existe
La sandbox et le mode live ne partagent aucune donnée, et le préfixe de votre clé détermine celui
que vous atteignez. Un identifiant d'un environnement n'existe réellement pas dans l'autre. La
réponse est donc 404, pas une erreur d'autorisation. Les identifiants de la sandbox contiennent
test_ après leur préfixe, ce qui permet de les reconnaître immédiatement.
La même règle s'applique entre les équipes. Un identifiant ne peut pas être résolu hors de l'équipe
qui le possède. La réponse 404 est volontaire, car 403 confirmerait l'existence de l'objet.
Réponse 422 avec errors.idempotency_key
Vous avez réutilisé une Idempotency-Key avec un payload différent. Vous avez soit modifié un
montant sans changer la clé, soit réutilisé une clé qui devait être renouvelée. Le problème n'est
pas temporaire et une nouvelle tentative produit la même réponse.
Le format de la clé est aussi validé avant tout autre contrôle : A-Z, a-z, 0-9 et . _ : -,
de 1 à 128 caractères. Un numéro de commande comme #4172 ou un UUID entre accolades est refusé à
cause de son format.
Pages associées
- AuthentificationLes types de clés, l'en-tête et toutes les erreurs d'authentification.
- Bonnes pratiques de sécuritéLes scopes, les listes d'IP autorisées, l'expiration et le renouvellement sans interruption.
- ErreursTous les codes HTTP renvoyés par l'API.
- Environnements et API keysLa séparation entre la sandbox et le mode live, ainsi que les données qui ne passent pas de l’un à l’autre.