Aller au contenu

Plafonds et quotas

Les plafonds appliqués par l'API et les erreurs renvoyées pour chacun.

Quatre plafonds différents peuvent refuser le même appel. Chacun renvoie un code de statut distinct. Ce code vous indique immédiatement le plafond atteint.

PlafondApplicationRefus
Montant de la deviseChaque paiement et chaque transfert422 à la création
Mobile Money par débitUn débit Mobile Money422 pendant le traitement
Plafonds du compte issus du KYCVolume live entrant et sortant402 pour un paiement, 422 pour un payout
Requêtes par minuteChaque appel429

Les quotas du plan constituent un cinquième type. Ils refusent la ressource plutôt que le montant. Vous ne pouvez plus créer de liens de paiement ni de factures lorsque le quota du plan est épuisé.

Montants par devise

Un même tableau régit les deux directions. POST /payments et POST /transfers utilisent les mêmes plafonds par devise. Un payout est donc refusé avec les mêmes valeurs qu'un paiement du même montant. Les montants utilisent les unités principales.

DeviseMinimumMaximum
XAFXAF252 000 000
XOFXOF252 000 000
NGNNGN100999 999,99
GHSGHS0,50999 999,99
KESKES0,50999 999,99
TZSTZS0,50999 999,99
UGXUGX1 000999 999 999
RWFRWF500999 999 999
GNFGNF1 000999 999 999
CDFCDF0,50999 999,99
ZARZAR0,50999 999,99
ZMWZMW0,50999 999,99
EGPEGP0,50999 999,99
EUREUR0,50999 999,99

Quatre-vingt-douze devises possèdent des limites, pas seulement celles affichées ci-dessus, et l'API refuse un montant qui en sort.

Réponse 422 pour un paiement de 10 XAF
{
"code": 422,
"status": "Unprocessable Content",
"message": "Amount must be between 25 and 2000000 XAF.",
"errors": {
"amount": [
"The amount must be between 25 and 2000000 XAF."
]
}
}

Le même refus sur POST /transfers contient Transfer amount must be between …, avec les deux mêmes valeurs.

Un débit Mobile Money possède son propre plafond

Le plafond de la devise limite le montant total du paiement. Le plafond Mobile Money limite un seul débit sur un portefeuille et sa valeur est bien plus basse.

RéseauPlafond par débitOrigine
Mobile MoneyMobile Money500 000 XAF ou XOFRègles de l'opérateur, par débit
CartesCartesPlafond de la deviseAucun plafond distinct
BanqueBanquePlafond de la deviseAucun plafond distinct
CryptoCryptoPlafond de la deviseAucun plafond distinct

Un débit Mobile Money supérieur à ce plafond est refusé pendant le traitement, pas à la création. Le paiement reste pending et peut faire l'objet d'une nouvelle tentative.

Réponse 422 pour un débit Mobile Money de 900 000 XAF
{
"code": 422,
"status": "Unprocessable Content",
"message": "This transaction amount exceeds the per-transaction limit for cm.mtn. Use split_count or split_amounts to split the payment.",
"payer_message": "This amount is above the limit for this payment method. Use a smaller amount or another method.",
"errors": {
"request": [
"This transaction amount exceeds the per-transaction limit for cm.mtn. Use split_count or split_amounts to split the payment."
]
}
}

Un plafond par devise, les autres converties

Le plafond se fixe par devise : 500 000 pour XAF et XOF. Un paiement dans une autre devise, en USD ou en EUR par exemple, effectué avec un portefeuille d'Afrique occidentale ou centrale, est plafonné au même montant converti au taux actuel. Ces portefeuilles sont proposés par défaut sur un paiement en USD ou en EUR ; réduisez la liste avec accept.

Un paiement au-dessus du plafond peut être réglé en deux à quatre débits, chacun sous le plafond, une fois les tranches activées : Paiements fractionnés décrit les appels. Un débit unique au-dessus est refusé, en live comme en sandbox : rien ne fractionne un paiement de lui-même.

Montants autorisés pour votre compte

Votre compte a ses propres plafonds au-delà des limites par appel : plafonds unitaire, quotidien et mensuel pour les fonds entrants, puis les trois mêmes pour les fonds sortants. Ils dépendent de votre vérification, de votre activité et de l'évaluation des risques faite par Wajub, pas de votre plan. Vos plafonds actuels sont affichés dans le Dashboard ; écrivez au support pour les relever.

Une fois votre compte vérifié, tout dépassement d'un plafond apparaît comme un refus.

Réponse 402 pour un paiement supérieur au plafond unitaire
{
"code": 402,
"status": "Payment Required",
"error_code": "limit_exceeded",
"message": "Transaction amount 180 000 XAF exceeds your single-transaction limit of 150 000 XAF. Please contact support to increase your limit.",
"payer_message": "This payment exceeds the amount this merchant can currently accept."
}

Les fonds sont retenus avant leur retrait

Un paiement crédité arrive dans pending_balance, puis passe dans available_balance à la fin de la période de retenue. Sa durée de base dépend du réseau utilisé pour recevoir les fonds.

RéseauRetenue par défautRaison
Mobile MoneyMobile Money24 heuresRèglements et litiges rapides chez l'opérateur
BanqueBanque48 heuresFenêtre d'annulation plus lente
CartesCartes72 heuresRisque de rétrofacturation
CryptoCrypto72 heuresRisque de rétrofacturation

La retenue de votre compte peut être plus courte ou plus longue que la durée par défaut, selon votre activité et l'évaluation des risques faite par Wajub.

Les payouts possèdent leurs propres contrôles

Deux mécanismes interviennent entre la requête de payout et l'envoi des fonds. Ils sont indépendants des plafonds de montant ci-dessus.

ContrôleDéclencheurEffet
FréquenceTrop de payouts, ou un montant versé trop élevé, en peu de tempsRefusé avec 422
VérificationWajub peut retenir un payout pour vérification avant son envoiRetenu dans l'état review

Ces plafonds sont fixés par compte ; écrivez au support pour les relever.

Un payout retenu n'a pas échoué. Il reste dans l'état review et se poursuit après son approbation. Traitez review comme un état normal dans votre rapprochement, pas comme une erreur.

Quotas des plans

Le plan régit les ressources et le débit, jamais les montants.

QuotaPay as you goGrowthScaleEnterprise
Requêtes par minute120360720Illimité
Liens de paiement25IllimitéIllimitéIllimité
Factures10IllimitéIllimitéIllimité
Membres de l'équipe35IllimitéIllimité
Prestataires26IllimitéIllimité
Exports par mois10IllimitéIllimitéIllimité

Les quotas de liens et de factures comptent uniquement les liens et les factures live. Toute création au-delà de ces quotas renvoie 403. Les liens et les factures n'existent qu'en live : avec une clé sandbox, l'API répond 403 (This feature is only available in live mode.).

Requêtes par minute

Trois plafonds s'appliquent à chaque appel fait avec une clé, et le premier atteint répond 429. Tous les trois suivent votre plan, et un compte Enterprise n'en a aucun. Un appel sans clé est limité à 30 par minute.

PlafondPar minute
CompteValeur de votre plan, sandbox et live à part
API keyValeur de votre plan
Endpoint, par ressourceVoir ci-dessous

Les plafonds par endpoint suivent le plan : trois fois la valeur d'entrée sur Growth, six fois sur Scale. Chaque appel sur la ressource compte, lectures comprises, sauf la lecture d'un transfert.

RessourcePay as you goGrowthScaleEnterprise
/payments3090180Aucun plafond
/transfers2060120Aucun plafond
/refunds103060Aucun plafond
/customers50150300Aucun plafond

Deux plafonds sont fixes, les mêmes sur tous les plans, Enterprise compris :

AppelsPlafond
Écritures de payout : payouts, lots, bénéficiaires et créances20 par minute, par compte et par environnement
POST /beneficiaries/{id}/verify10 par minute et 200 par jour et par compte en live, 10 par minute en sandbox

Renvoyer un événement à la main a son propre délai, le même sur tous les plans : voir Livraison des webhooks. Limites de requêtes présente les en-têtes de réponse, les deux formes du corps d'une réponse 429 de la limite de requêtes, et le 429 d'un renvoi dans ce délai.

Limites des champs

Voici les limites de validation que vous risquez le plus de rencontrer. Elles proviennent directement des règles des requêtes.

ChampLimite
expires.inDe 5 à 43 200 minutes, 1 440 par défaut
description500 caractères
reference128 caractères
callback2 048 caractères
Idempotency-Key128 caractères, A-Za-z0-9._:-
per_pageDe 1 à 100, 25 par défaut
split_count2, 3 ou 4
split_amountsDe 2 à 4 montants, chacun au moins égal à 0.01
Fichier de justificatif d'un litige10 Mo, pdf jpg jpeg png doc docx txt
Message d'un litige5 000 caractères

Livraison des webhooks

ParamètreValeur
Fenêtre des nouvelles tentatives72 heures après la première tentative
Aucune nouvelle tentative410 Gone
Délai d'expiration de la requête10 secondes
Tolérance de la signature300 secondes
Renvoi manuel d'un événement vers un endpointUne fois toutes les 5 minutes, depuis Konsole ou POST /events/{id}/resend

Répondez avant l'expiration du délai pour éviter une nouvelle livraison. Vous devez donc accuser réception avant de lancer le traitement.

Un renvoi dans ces 5 minutes ignore cet endpoint. Quand POST /events/{id}/resend trouve encore dans ce délai chaque endpoint qui n'a pas accepté l'événement, il répond 429 avec error_code: event_resend_cooldown et un en-tête Retry-After qui donne les secondes restantes. Ce n'est pas la limite de requêtes : un renvoi avant Retry-After obtient la même réponse, ne laissez donc pas un client le réessayer de lui-même.

Que pensez-vous de ce contenu ?