Capacités du compte
Les onze capacités, celles qui sont appliquées et le calcul de votre commission.
Les trois modes
account_type dit ce que le marchand possède chez Wajub et où se trouve l'argent. Tout le reste —
capacités, commission, consentement, webhooks, KYC — est identique dans les trois. Le mode est
choisi à la création de la connexion et ne change jamais ensuite : en changer modifierait ce que le
marchand a accepté, c'est donc une nouvelle connexion qu'il accepte à nouveau.
| Mode | Le marchand | L'argent | À utiliser pour |
|---|---|---|---|
direct (par défaut) | Un compte Wajub complet qu'il pilote lui-même | Rail Wajub, ou ses propres contrats providers | Les marchands déjà équipés |
lite | Un portail hébergé léger | Rail Wajub, toujours | Les petits vendeurs — le cas courant |
relay | Aucun compte Wajub : une destination de versement | Le vôtre — vous encaissez et Wajub relaie les versements | Les marketplaces merchant of record |
Deux règles en découlent, et deux seulement :
- une connexion
literefuse de lancer un paiement tant que le marchand n'est pas sur le rail Wajub (409) — elle existe pour que la commission soit prélevée à la source et le versement automatique, et les deux exigent que l'argent passe par Wajub ; - une connexion
relayn'a pas d'onboarding : il n'y a aucun compte marchand à revendiquer.
Ce ne sont pas des paliers Standard, Express ou Custom
Le mode n'est pas un niveau de service et ne conditionne aucune fonctionnalité. Deux connexions de modes différents peuvent porter exactement les mêmes capacités et la même tarification.
Les onze capacités
Une connexion reçoit un sous-ensemble de cette liste fermée. Au moins une capacité est obligatoire
à la création. Une valeur inconnue est refusée avec 422.
| Capacité | Fonction désignée |
|---|---|
read | Lire les propres ressources du compte connecté |
write | Créer et mettre à jour des ressources en son nom |
payments | Lancer et gérer des paiements |
withdrawals | Lancer des transferts et des payouts |
refunds | Émettre des remboursements |
disputes | Gérer des litiges |
customers | Gérer des clients |
invoices | Gérer des factures |
subscriptions | Gérer des abonnements |
analytics | Lire les analyses et les rapports |
settings | Gérer les paramètres du compte connecté |
Chaque ressource déclare ce qu'elle exige
Chaque route déclare la capacité qu'elle exige, et une route qui n'en déclare aucune ne peut pas
être appelée avec X-Sync. Le refus est la règle par défaut : une capacité non accordée est une
capacité que la plateforme n'a pas.
| La requête porte sur | Capacité vérifiée |
|---|---|
/payments, /links | payments |
/invoices | invoices |
/customers, /customers/{id}/tax_ids | customers |
/refunds | refunds |
/disputes | disputes |
/transfers, /beneficiaries, /identity | withdrawals |
/webhooks, /tax, /shield | settings |
/, /providers, /balance, /events, /listen | read |
/channels, /countries, /currencies | aucune — les catalogues répondent la même chose à tout le monde |
/accounts, /keys/current | ne peuvent pas être appelées avec X-Sync |
Une capacité ne couvre que ce que la connexion a apporté
Les capacités disent quoi ; la connexion dit à qui. Avec X-Sync, une plateforme voit les
paiements qu'elle a lancés, les remboursements de ces paiements, les clients qui ont acheté par son
intermédiaire et les versements qu'elle a envoyés — jamais les ventes directes du marchand, jamais
celles d'une autre plateforme.
| Ressource | Ce que la plateforme voit |
|---|---|
/payments, /refunds | Uniquement ceux qui portent cette connexion |
/customers | Uniquement les clients vus sur les paiements de cette connexion |
/transfers | Uniquement les versements lancés par cette connexion |
/balance | Le solde du marchand dans son ensemble — un solde n'est pas par connexion |
write, subscriptions et analytics ne désignent aujourd'hui aucune ressource : elles sont
enregistrées sur la connexion et montrées au marchand, mais rien ne les vérifie encore.
Modifier les conditions d'une connexion active
Les capacités et la tarification sont ce que le marchand a accepté : une fois la connexion active,
elles se proposent au lieu de se modifier. PUT /accounts/{id} répond 202 Accepted et renvoie la
proposition dans pending_changes ; la connexion continue de fonctionner aux conditions en vigueur
jusqu'à ce que le marchand accepte ou refuse depuis son dashboard.
| Ensuite | Ce qui se passe |
|---|---|
| Le marchand accepte | Les nouvelles conditions s'appliquent à partir de cet instant, et account.change_accepted est émis |
| Le marchand refuse | Rien ne change, et account.change_declined est émis |
| Vous proposez à nouveau | La nouvelle proposition remplace celle encore sur la table |
Les ventes déjà réalisées conservent les conditions sous lesquelles elles ont eu lieu : un
changement de tarif ne retarife jamais une commission déjà prélevée. Tant que la connexion est
pending, personne n'a rien accepté et PUT applique le changement directement, avec un 200.
Tarification
La tarification représente ce que votre plateforme retient sur l'activité du compte connecté. Elle
se compose de plusieurs règles associées à la connexion, pas d'un nombre unique. POST /accounts
crée la première règle à partir de l'objet pricing.
percentage_feenumberfacultatiffixed_feenumberfacultatifmin_feenumberfacultatifmax_feenumberfacultatifcurrencystringfacultatifLes deux types se cumulent au lieu de se concurrencer. Une règle qui contient un pourcentage et des frais fixes prélève le pourcentage du montant, puis ajoute la valeur fixe. Elle applique ensuite le plancher, puis le plafond, dans cet ordre.
Calcul des frais
Cette séquence explique tous les chiffres présents dans un événement fee.received.
| Étape | Déroulement |
|---|---|
| 1 | Le paiement réussit et possède une connexion |
| 2 | Les règles de la connexion sont parcourues, les règles précises avant celle de repli |
| 3 | La première règle dont les conditions correspondent au montant et à la devise l'emporte |
| 4 | Le pourcentage et les frais fixes sont additionnés, puis limités par min_fee et max_fee |
| 5 | Des frais nuls sont ignorés, rien n'est enregistré |
| 6 | Les frais sont enregistrés une seule fois sur le paiement |
| 7 | Le montant quitte le solde du marchand et arrive sur le vôtre, sous la rétention propre à la vente |
L'étape 6 est idempotente, et la base de données le garantit : un paiement porte au plus une commission, quel que soit le comportement de l'événement qui l'a déclenchée. L'étape 7 est comptabilisée dans la devise de règlement de la vente, pour que le ledger ne porte jamais de position de change ; la devise des frais et le taux appliqué sont enregistrés sur le mouvement.
Une commission est une part d'une vente : une vente défaite emporte sa part avec elle.
Quand la vente est remboursée
commission_refund_policy, défini sur la connexion, décide de ce qui revient.
| Politique | Au remboursement |
|---|---|
prorata (par défaut) | La commission est rendue au prorata du montant remboursé |
full | La totalité de la commission est rendue dès le premier remboursement, partiel ou non |
none | Rien n'est rendu ; le marchand porte seul le remboursement |
Définissez-la avec POST /accounts, et ne la modifiez avec PUT /accounts/{id} que tant que la
connexion est encore pending — c'est une condition commerciale que le marchand a acceptée. Rien
n'est jamais rendu deux fois, et plusieurs remboursements sur une même vente ne peuvent jamais
rendre plus que ce qui a été prélevé.
La devise de la règle indique l'unité, pas un filtre
currency indique la devise des frais, pas les paiements auxquels la règle s'applique. Des frais
fixes de 500 XAF sur un paiement en NGN sont convertis au taux actif. Une deuxième conversion a
lieu si le solde de votre plateforme utilise une troisième devise. Les metadata des frais
enregistrent les deux taux.
Conditions
Une règle peut contenir des conditions qui déterminent si elle s'applique.
| Condition | Effet |
|---|---|
min_amount | La règle est ignorée pour les paiements inférieurs à cette valeur |
max_amount | La règle est ignorée pour les paiements supérieurs à cette valeur |
currency | La règle s'applique uniquement aux paiements effectués dans cette devise |
Les conditions permettent de prélever une commission différente sur les petits paniers ou d'exempter une devise. Une connexion avec plusieurs règles doit en posséder une sans condition pour servir de repli. Dans le cas contraire, un paiement qui ne correspond à aucune règle ne porte aucune commission.
La tarification aussi demande le consentement
Comme pour les capacités, la tarification d'un marchand déjà connecté se propose au lieu de se
modifier : PUT répond 202 et le marchand décide. Définissez la commission souhaitée avant
d'envoyer le lien d'autorisation, et vous n'aurez jamais à la demander.
Ce qui reste librement modifiable
Deux champs survivent à l'acceptation sans l'accord du marchand, et seulement ces deux-là.
| Champ | Pourquoi il reste ouvert |
|---|---|
callback | URL qui reçoit les événements du cycle de vie de cette connexion |
payment_status | active ou suspended, votre propre interrupteur pour autoriser les débits sur la connexion |
La suspension d'une connexion arrête à la fois les paiements entrants et les transferts sortants.
Elle émet account.payment_suspended. Utilisez-la lorsque vous auriez autrement besoin de révoquer
une capacité. Contrairement à une capacité, elle est réversible.