Aller au contenu

Démarrage rapide

Créez une connexion, obtenez son autorisation et recevez votre premier paiement par son intermédiaire.

Quatre étapes sont nécessaires, et la troisième ne vous appartient pas. Une connexion devient utilisable uniquement après que le marchand s'est connecté et l'a acceptée. Prévoyez donc un aller-retour avec une personne avant votre premier paiement.

Toutes ces étapes nécessitent la clé secrète de votre plateforme et un plan Scale.

1. Créer la connexion

Vous déclarez ce que la connexion peut faire et ce que vous retiendrez sur celle-ci. Les capacités sont obligatoires et ne peuvent pas être vides. La tarification est facultative.

curl https://api.wajub.com/accounts \
  -H "Authorization: sk.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "shop-amina",
    "capabilities": ["read", "payments", "refunds"],
    "pricing": { "percentage_fee": 2.5, "currency": "XAF" },
    "callback": "https://example.com/sync-events"
  }'

La réponse est 201 Created. Deux champs sont particulièrement importants.

Réponse · 201 Created
{
"code": 201,
"status": "Created",
"message": "Account created",
"account": {
"id": "acc_7Yh2MpL4tRb3nP8sZcXv",
"reference": "shop-amina",
"sandbox": false,
"capabilities": [
"read",
"payments",
"refunds"
],
"status": "pending",
"payment_status": "inactive",
"authorization_url": "https://sync.wajub.com/oauth/v2/authorize?access_token=…",
"pricing": {
"percentage_fee": 2.5,
"fixed_fee": 0,
"max_fee": 0,
"currency": "XAF"
},
"created_at": "2026-09-13T10:24:11+00:00"
}
}

id est la valeur que vous enverrez dans X-Sync. authorization_url est le lien que le marchand doit ouvrir. Il apparaît uniquement tant que la connexion n'a pas été revendiquée.

Présentez authorization_url au marchand par le moyen qui vous convient : un e-mail, un bouton dans votre propre parcours d'intégration ou un code QR. Il ouvre le lien, se connecte à son compte Wajub, examine les capacités demandées, puis accepte.

Le marchand apporte son propre compte

Votre intégration ne crée rien de son côté. Si le marchand ne possède pas encore de compte Wajub, la page d'autorisation l'accompagne dans sa création. La connexion se termine ensuite.

Après son acceptation, status passe à active et slave contient le nom et l'adresse e-mail de son entreprise. Vous le découvrez en interrogeant régulièrement le compte ou en recevant le webhook account.updated.

3. Attendre l'activation des paiements

Une connexion active ne peut pas encore effectuer de débit. payment_status reste à inactive jusqu'à la validation du contrôle de conformité du marchand. Wajub l'active ensuite et émet account.payment_activated.

Activer les paiements sur une connexion de sandbox
curl -X PUT https://api.wajub.com/accounts/acc_test_7Yh2MpL4tRb3nP8sZcXv \
  -H "Authorization: sk_test.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
  -H "Content-Type: application/json" \
  -d '{ "payment_status": "active" }'

4. Recevoir un paiement sur la connexion

Vous utilisez désormais l'API de paiement classique. Un seul en-tête détermine le propriétaire du paiement.

curl https://api.wajub.com/payments \
  -H "Authorization: sk.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
  -H "X-Sync: acc_7Yh2MpL4tRb3nP8sZcXv" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50000,
    "currency": "XAF",
    "customer": { "email": "buyer@example.com" },
    "callback": "https://example.com/return"
  }'

Le paiement appartient désormais au marchand. Il apparaît dans son Dashboard, est réglé sur son solde et déclenche ses webhooks. Les vôtres sont aussi déclenchés avec une copie du même événement.

Ce que vous recevez après sa réussite

Lorsque le paiement est terminé, Wajub lit les règles tarifaires de la connexion, calcule votre commission sur le montant du paiement et la crédite à votre plateforme. Un webhook vous en informe.

fee.received
{
"event": "fee.received",
"data": {
"id": "fee_9Lq5RtVb2Kd8",
"amount": 1250,
"currency": "XAF",
"percentage": 2.5,
"fixed_amount": null,
"applied_to": "transaction",
"feeable_id": "trx_CSUGajfv9xh0XQ5wu2lx",
"account": {
"id": "acc_7Yh2MpL4tRb3nP8sZcXv",
"reference": "shop-amina"
}
}
}

Le payload contient également feeable_type. Sa valeur actuelle est le nom de classe interne de l'objet auquel les frais ont été appliqués, pas un type public. Effectuez plutôt la correspondance avec feeable_id.

Le marchand reçoit l'événement inverse, fee.charged, sur ses propres endpoints. Grâce à ces deux événements, chaque partie peut contrôler la commission sans interroger l'autre.

Que pensez-vous de ce contenu ?