Aller au contenu
Chargement des API keys…

Sous-comptes

Créez et gérez les sous-comptes marchands des marketplaces et des plateformes.

Les sous-comptes permettent à une plateforme de connecter des marchands et d'agir pour leur compte, dans le cadre de Sync. Un paiement fait par une connexion appartient au marchand ; la commission de la plateforme, fixée par la pricing de la connexion, est créditée à la plateforme, ou lui est due quand le marchand encaisse sur ses propres prestataires (Paiements fractionnés).

Clé privée requise

Créer et gérer des sous-comptes exige la clé privée (sk...).

Endpoints

MéthodeCheminDescription
POST/accountsCréer
GET/accounts/{id}Récupérer
GET/accountsLister
PUT/accounts/{id}Modifier
DELETE/accounts/{id}Supprimer
POST/accounts/{id}/tokenRégénérer le jeton d'autorisation OAuth
POST/accounts/{id}/payoutsPayer un marchand Lite tout de suite (live uniquement)
GET/accounts/{id}/commission-receivablesCe que vous doivent les marchands qui encaissent sur leurs propres contrats

L'objet Account (sous-compte)

idstringfacultatif
Identifiant unique.
referencestring?facultatif
Votre propre référence pour ce sous-compte. Unique pour de bon parmi vos connexions de l'environnement : une connexion annulée garde sa référence, qui ne peut donc pas resservir. Elle ne peut pas être modifiée après la création.
sandboxbooleanfacultatif
true pour un sous-compte du mode test.
capabilitiesstring[]facultatif
Capacités activées pour ce sous-compte (par exemple l'encaissement des paiements).
profileobjectfacultatif
Données de profil du marchand, remplies par le Dashboard pendant l'onboarding. La seule partie que vous pouvez définir est profile.email, l'adresse du marchand que vous donnez avec email sur POST ou PUT /accounts, à laquelle est envoyé le rappel d'invitation.
metadataobjectfacultatif
Vos propres données clé-valeur, telles qu'envoyées avec metadata sur POST /accounts. PUT /accounts/{id} y fusionne ce que vous envoyez, et une clé envoyée à null est supprimée. {} quand il n'y en a pas.
callbackstring?facultatif
URL vers laquelle le marchand est redirigé une fois connecté. HTTPS uniquement : http://localhost et http://127.0.0.1 sont acceptés avec une clé sandbox, tout le reste répond 422. Elle enregistre aussi l'origine : un redirect_uri sur le lien d'autorisation n'est respecté que s'il partage cette origine, et refusé sinon. Sans callback, aucun redirect_uri n'est accepté.
account_typeenumfacultatif
Le mode de connexion : direct (le marchand gère un compte Wajub complet), lite (un portail hébergé, qui encaisse toujours via Wajub) ou relay (pas de compte marchand : vous encaissez et Wajub relaie les versements). direct par défaut, et non modifiable ensuite.
commission_refund_policyenumfacultatif
Ce que devient votre commission quand une vente est remboursée : prorata (par défaut, en proportion du remboursement), full (en totalité, au premier remboursement) ou none. Définie à la création, et modifiable seulement tant que la connexion est en attente.
statusenumfacultatif
pending, active, expired ou cancelled : voir [le cycle de vie](/sync/onboarding#the-lifecycle). GET /accounts?status= filtre sur cette même valeur.
payment_statusenumfacultatif
active, inactive (la vérification du marchand est encore en cours) ou suspended (par vous, ou par Wajub quand la vérification a été rejetée) : indique si les appels qui déplacent de l'argent s'exécutent.
payout_scheduleenumfacultatif
Comptes lite uniquement : manual, daily, weekly ou monthly, la fréquence à laquelle Wajub paie le marchand.
payout_min_amountnumber?facultatif
Comptes lite uniquement : rien n'est versé en dessous de ce montant, dans la devise du marchand. null signifie la valeur par défaut, 1 000.
last_payout_atdatetime?facultatif
Comptes lite uniquement : date du dernier versement au marchand.
pending_changesobject[]facultatif
Capacités ou tarification que vous avez proposées sur une connexion acceptée et auxquelles le marchand n'a pas encore répondu : { id, type, proposed, current, requested_at }.
authorization_urlstring?facultatif
Le lien d'onboarding que suit le marchand. Renvoyé uniquement par les deux appels qui le créent, la création du sous-compte et la régénération de son jeton, et jamais par une lecture ultérieure. Conservez-le quand vous l'obtenez, ou demandez-en un nouveau. Une connexion relay n'en a pas : il y vaut toujours null, et le régénérer répond 422.
masterobject?facultatif
La plateforme, quand elle est chargée : { name }.
connected_merchantobject?facultatif
Le marchand connecté, quand il est chargé : { name, email }.
pricingobject?facultatif
Configuration des frais, quand elle est chargée : { percentage_fee, fixed_fee, min_fee, max_fee, currency }.
expires_atdatetime?facultatif
Date ISO 8601 à laquelle l'invitation cesse d'être utilisable, 30 jours après la dernière création de son lien. null une fois qu'un marchand a accepté, puisqu'un sous-compte accepté n'expire jamais, et toujours null sur une connexion relay, qui n'a pas d'invitation.
created_atdatetimefacultatif
Date de création, ISO 8601.
updated_atdatetimefacultatif
Date de la dernière modification, ISO 8601.

Créer un sous-compte

L'objet pricing accepte percentage_fee, fixed_fee, max_fee, min_fee (tous facultatifs, numériques) et currency (obligatoire dès qu'un frais fixe, minimum ou maximum est défini). email est l'adresse du marchand : Wajub y envoie le rappel d'invitation trois jours avant l'expiration de l'invitation. Elle est conservée dans profile.email, et PUT /accounts/{id} la modifie. metadata vous appartient et est renvoyé sur l'objet. Une reference déjà utilisée par l'une de vos connexions de l'environnement, connexions annulées comprises, répond 422. Au-delà de 50 invitations ouvertes, l'appel répond 429 (la limite) :

Créer un sous-compte
curl https://api.wajub.com/accounts \
  -H "Authorization: sk.xxxxxxxxxxxxxxxx…" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "vendor-482",
    "capabilities": ["payments"],
    "email": "contact@vendor-482.example",
    "pricing": { "percentage_fee": 10, "currency": "XAF" }
  }'

Agir pour le compte d'un sous-compte : l'en-tête X-Sync

Une fois un sous-compte active, la plateforme peut agir en tant que ce sous-compte en envoyant son id dans l'en-tête X-Sync, avec sa propre clé d'API. Quand il est présent et valide, la requête s'exécute sur le sous-compte au lieu de la plateforme, les ressources sont créées sous le sous-compte, et sa propre pricing s'applique automatiquement.

Ce que la plateforme atteint, c'est ce que cette connexion a apporté : ses paiements, avec leurs remboursements et leurs litiges, les clients qui ont acheté par elle ou qu'elle a créés ou désignés par e-mail ou téléphone (sans les notes, le motif de blocage ni les metadata du marchand, et jamais supprimés par elle), les liens, factures et bénéficiaires qu'elle a créés, les payouts qu'elle a envoyés et les événements qui concernent tout cela. Les ventes, liens, factures et bénéficiaires propres au marchand, et ce qu'ont apporté d'autres plateformes, restent hors de portée quelles que soient les capacités accordées, et répondent 404. Types de compte détaille chaque ressource.

X-Syncheaderfacultatif
L'id du sous-compte (par exemple acc_7Yh2Mp), et non sa reference. Envoyé avec la clé Authorization de la plateforme.
Créer un paiement pour le compte d'un sous-compte
curl https://api.wajub.com/payments \
  -H "Authorization: sk.xxxxxxxxxxxxxxxx…" \
  -H "X-Sync: acc_7Yh2Mp" \
  -d '{ "amount": 10000, "currency": "XAF", "email": "client@example.com" }'

Sur une connexion live, PUT /accounts/{id} ne change pas capabilities ni pricing directement : il répond 202 Accepted avec la proposition dans pending_changes, et le marchand l'accepte ou la refuse dans son propre dashboard. payment_status et callback s'appliquent toujours immédiatement.

Chaque ressource indique la capacité qu'elle exige, et une ressource qui n'en indique aucune ne peut pas du tout être atteinte avec X-Sync. C'est le cas de /accounts/*, que vous gérez toujours avec votre propre clé, et de ce qui appartient à tout le compte du marchand plutôt qu'à une connexion : le solde, les endpoints de webhook, Shield, Tax et wajub listen.

Si la requête toucheCapacité requise
/payments, /linkspayments
/invoicesinvoices
/customers, /customers/{id}/tax_idscustomers
/refundsrefunds
GET /payments/{id}/refunds, POST /payments/{id}/close avec outcome: refundpayments et refunds
/disputesdisputes
/transfers, /beneficiaries, /identitywithdrawals
/, /providers, /eventsread
/channels, /countries, /currenciesaucune, catalogues
/balance, /webhooks, /shield, /taxindisponible avec X-Sync
/accountsindisponible avec X-Sync

Que pensez-vous de ce contenu ?