Appearance
Référence API HayBTech (Cash-In & Cash-Out)
Bienvenue dans la documentation technique unifiée de HayBTech. Cette API vous permet d'intégrer les paiements (encaissements) et les payouts (virements) via une interface unique.
Authentification & Configuration
Toutes les requêtes doivent inclure les headers suivants :
| Authorization | Bearer sk_live_... (ou sk_test_...) | | Idempotency-Key | Un UUID unique (obligatoire pour les payouts). | | Content-Type | application/json |
SÉCURITÉ CRITIQUE
Les clés secrètes (sk_...) ne doivent JAMAIS être exposées côté client (navigateur, mobile). Elles doivent rester exclusivement sur votre serveur backend.
1. Paiements (Cash-In)
Utilisez cet endpoint pour encaisser de l'argent auprès de vos clients.
POST /v1/payments
Paramètres de paiement
json
{
"merchant_ref": "ORDER-123",
"amount": 5000,
"currency": "XOF",
"provider": "wave",
"phone": "+221770000123",
"name": "Awa Diop",
"success_url": "https://votre-site.sn/success",
"failed_url": "https://votre-site.sn/cancel",
"callback_url": "https://votre-site.sn/webhooks/haybtech"
}FLEXIBILITÉ DES CHAMPS
Pour faciliter l'intégration, vous pouvez envoyer les informations du payer de trois façons :
- Imbriqué (recommandé) :
"payer": {"phone": "...", "name": "..."} - À plat :
"phone": "...", "name": "..." - Préfixé :
"payer_phone": "...", "payer_name": "..."
| Champ | Type | Requis | Description |
|---|---|---|---|
merchant_ref | string | oui | Votre référence de commande unique. |
amount | numeric | oui | Montant à payer (ex: 5000). |
provider | string | oui | wave, orange_money, free_money. |
success_url | url | oui | Redirection après succès. |
failed_url | url | oui | Redirection après annulation. |
callback_url | url | non | Webhook spécifique à cette transaction. |
metadata | object | non | Données libres renvoyées dans les webhooks. |
2. Virements (Cash-Out)
Utilisez cet endpoint pour envoyer de l'argent vers un compte Mobile Money.
POST /v1/payouts
Paramètres de virement
json
{
"merchant_ref": "PYO-456",
"amount": 10000,
"currency": "XOF",
"provider": "wave",
"recipient": {
"phone": "+221770000000",
"name": "Jean Dupont"
},
"description": "Règlement facture #123",
"callback_url": "https://votre-site.sn/webhooks/payouts"
}| Champ | Type | Requis | Description |
|---|---|---|---|
merchant_ref | string | oui | Votre référence unique pour ce virement. |
amount | numeric | oui | Montant brut à envoyer. |
provider | string | oui | wave, orange_money, free_money. |
recipient.phone | string | oui | Numéro au format E.164. |
recipient.name | string | non | Nom du bénéficiaire. |
callback_url | url | non | Webhook spécifique à cette transaction. |
IDEMPOTENCE
Pour les virements, utilisez toujours une Idempotency-Key unique par transaction logique. Si vous recevez une erreur réseau, renvoyez la même clé. HayBTech garantit qu'un virement avec la même clé ne sera exécuté qu'une seule fois.
Lister les virements
GET /v1/payouts?status=success&from=2026-01-01&to=2026-12-31
Filtres : status, provider, from, to, merchant_ref. Scope requis : can_read_transactions.
Détailler un virement
GET /v1/payouts/{id} (accepte aussi votre merchant_ref).
3. États & Cycle de vie
Toutes les transactions (paiements et virements) suivent un cycle de vie précis.
Statuts Communs
- initiated : Transaction créée, en attente de traitement.
- pending : En attente d'action du client (pour les paiements).
- success : Terminée avec succès.
- failed : Échec (solde insuffisant, rejet provider, etc).
Cycle de vie des fonds (Payouts)
- Lors de la création (
initiated), le montant est réservés sur votre solde HayBTech. - En cas de success, le débit devient définitif.
- En cas de failed ou cancelled, la réservation est levée et les fonds redeviennent disponibles immédiatement.
4. Consultation & Statuts
Vérification de statut unifiée
Utilisez cet endpoint pour vérifier l'état de n'importe quelle transaction (paiement ou virement) via une référence unique.
GET /v1/status/{reference}
Le paramètre {reference} peut être l'ID HayBTech (TXN-...) ou votre merchant_ref.
5. Finance & Solde
Consultation du solde
Récupérez votre solde disponible en temps réel.
GET /v1/balance
Réponse :
json
{
"object": "balance",
"currency": "XOF",
"available": 150000,
"pending": 25000,
"reserved": 10000,
"last_updated": "2026-05-07T21:00:00Z"
}Liste des reversements (Settlements)
Suivez les fonds qui vous ont été reversés par HayBTech.
GET /v1/settlements
6. Outils Développeurs
Test de Webhook
Déclenchez un événement de test pour valider votre intégration serveur.
POST /v1/webhooks/test
6. Remboursements (Refunds)
Si vous devez rembourser un client après un paiement réussi. Le montant doit être inférieur ou égal au montant original de la transaction.
POST /v1/refunds
json
{
"transaction_id": "TXN-T3A79YRJ",
"amount": 500,
"reason": "Retour produit"
}7. Configuration & Providers
Liste des providers
Récupérez la liste des opérateurs supportés pour votre compte selon votre pays.
GET /v1/providers
8. Appels de fonds (Payout Requests)
Demandez un retrait de votre solde marchand. HayBTech ops valide ou rejette la demande, puis exécute le settlement vers votre RIB / numéro Mobile Money.
Créer une demande
POST /v1/payout-requests
Scope requis : can_payout. Idempotency-Key obligatoire. Throttle : 10 req/min.
json
{
"amount": 250000,
"currency": "XOF",
"destination_phone": "+221770000000",
"destination_iban": null,
"destination_bank": null,
"merchant_note": "Retrait hebdomadaire"
}Réponse 201 :
json
{
"data": {
"id": "uuid",
"object": "payout_request",
"reference": "PR-...",
"status": "submitted",
"amount": "250000.00",
"fee_amount": "0.00",
"net_amount": "250000.00",
"currency": "XOF",
"destination": { "phone": "+221770000000", "iban": null, "bank": null },
"submitted_at": "2026-05-09T10:00:00Z"
}
}Le montant est réservé sur votre solde dès la soumission ; il est libéré en cas de rejet, ou consommé à la complétion du settlement.
Lister vos demandes
GET /v1/payout-requests → 50 dernières demandes, ordre antéchronologique.
Détailler une demande
GET /v1/payout-requests/{id}
Statuts possibles : submitted → approved → completed, ou submitted → rejected (avec rejection_reason), ou approved → failed.
9. Litiges (Disputes)
Lorsqu'un payeur conteste une transaction auprès de son provider (chargeback, contestation Mobile Money), HayBTech ouvre un dispute associé à votre transaction. Vous disposez d'une fenêtre limitée pour répondre avec des preuves.
Lister vos litiges
GET /v1/disputes?status=needs_response&per_page=25
Scope requis : can_read_transactions. Pagination via pagination.{total,per_page,current_page,last_page}.
Détailler un litige
GET /v1/disputes/{id} (accepte aussi votre reference).
Répondre avec preuves
POST /v1/disputes/{id}/respond
Scope requis : can_initiate_payment. Idempotency-Key obligatoire.
json
{
"evidence": [
"https://shop.sn/uploads/invoice-CMD-42.pdf",
"https://shop.sn/uploads/proof-delivery.png"
],
"merchant_response": "Produit livré le 2026-05-02, signature confirmée."
}Maximum 20 URLs de preuves, chacune ≤ 500 caractères ; commentaire libre ≤ 2000 caractères. Une réponse n'est acceptée que si le litige est encore ouvert (needs_response).
10. Webhooks
Il est fortement recommandé de configurer un webhook pour recevoir les confirmations en temps réel.
- Paiements : événements
payment.success,payment.failed,payment.cancelled,payment.expired. - Virements : événements
payout.success,payout.failed. - Appels de fonds : événements
payout_request.submitted,payout_request.approved,payout_request.rejected,payout_request.completed,payout_request.failed. - Remboursements : événement
refund.success. - Litiges : événements
dispute.opened,dispute.responded,dispute.won,dispute.lost.
Chaque webhook est signé avec un secret HMAC pour garantir l'intégrité des données. Voir Webhooks pour le détail de la vérification.
