Aller au contenu principal

Intégration API

Envoyez des paiements depuis votre compte Volet.com vers des utilisateurs Volet.com et des portefeuilles crypto externes via la Merchant API.

La Mass Payout API permet à votre application de créer, valider et suivre des transactions de paiement de manière programmatique.

Vous pouvez utiliser l’API pour trois scénarios principaux :

  • Paiements aux utilisateurs Volet.com : envoyez des fonds depuis votre compte Volet.com vers un autre compte Volet.com.
  • Paiements crypto sans conversion : envoyez des cryptomonnaies depuis le même solde crypto vers un portefeuille crypto externe.
  • Paiements crypto avec conversion : envoyez des cryptomonnaies vers un portefeuille crypto externe depuis un autre solde pris en charge, comme USD, EUR, USDT ou une autre cryptomonnaie.

Fonctionnement des paiements de masse via l’API​

La Merchant API crée une transaction de paiement par requête.

Pour les lots de paiements de masse, votre backend prépare une liste de destinataires et crée une transaction de paiement distincte pour chaque élément du lot.

Un parcours par lots type :

  1. Préparez un lot de paiements dans votre système.
  2. Vérifiez les soldes disponibles de vos portefeuilles Volet.com.
  3. Vérifiez les limites, les tarifs et les taux de change si nécessaire.
  4. Validez chaque paiement avant sa création.
  5. Créez les transactions de paiement via l’API.
  6. Enregistrez dans votre système les identifiants de transaction renvoyés.
  7. Suivez le statut des paiements via l’API.
  8. Rapprochez les paiements effectués, échoués, annulés ou remboursés.

Avant de commencer​

Pour envoyer des paiements de masse via l’API, vous avez besoin :

  • D’un compte Volet.com vérifié.
  • D’une API configurée dans la section Outils de paiement.
  • D’un solde suffisant sur votre compte Volet.com.
  • Des informations sur les destinataires exigées par chaque moyen de paiement.

Consultez Activer les paiements de masse pour créer et configurer votre API.

Authentification​

Les requêtes à la Merchant API nécessitent des en-têtes d’authentification.

Incluez les en-têtes suivants dans chaque requête API :

En-têteDescription
Api-NameNom de l’API configuré dans votre compte Volet.com.
Account-EmailAdresse e-mail du compte Volet.com propriétaire de l’API.
Authentication-TokenJeton d’authentification de la requête, généré à partir du secret de votre API.

Gardez le secret de votre API confidentiel. N’exposez jamais les identifiants de l’API ni les jetons d’authentification dans le code frontend, les applications mobiles, les bots ou les scripts côté client.

Avant de créer des paiements, votre backend doit valider et préparer chaque élément.

Parcours recommandé :

  1. Récupérez les soldes des portefeuilles.
  2. Vérifiez les limites minimales du moyen de paiement et de la devise choisis.
  3. Vérifiez les tarifs ou les frais.
  4. Vérifiez le taux de change si le paiement utilise une conversion.
  5. Validez la demande de paiement.
  6. Créez la transaction de paiement.
  7. Enregistrez le transactionId renvoyé.
  8. Interrogez le statut de la transaction jusqu’à ce que le paiement atteigne un état final.

Étape 1 : récupérer les soldes des portefeuilles​

Utilisez cette méthode pour vérifier les soldes disponibles de vos portefeuilles Volet.com avant de créer des paiements.

Point de terminaison :

GET /api/account/balances

Exemple de réponse :

[
{
"walletId": "W000000000001",
"amount": 1000.50,
"currency": "USD"
},
{
"walletId": "W000000000002",
"amount": 2500,
"currency": "USDT"
}
]

Utilisez walletId comme portefeuille source lors de la création des demandes de paiement.

Étape 2 : vérifier les limites et les tarifs​

Avant d’envoyer des paiements, vérifiez les limites minimales et les tarifs du moyen de paiement et de la paire de devises choisis.

Limites minimales :

GET /api/account/limits/min

Tarifs :

GET /api/account/tariffs

Ces méthodes évitent les erreurs de création de paiement dues à des montants, devises ou moyens de paiement non pris en charge.

Étape 3 : vérifier le taux de change​

Consultez le taux de change lorsque le paiement nécessite une conversion.

Point de terminaison :

POST /api/exchange-rate/information

Utilisez-le avant de créer des paiements dont la devise source et la devise de paiement sont différentes.

Exemples d’usage :

  • Envoyer des USDT vers un portefeuille crypto externe depuis un solde en USD.
  • Envoyer des BTC vers un portefeuille crypto externe depuis un solde en EUR.
  • Convertir un solde crypto pris en charge dans une autre devise de paiement.

Moyen 1 : envoyer des paiements aux utilisateurs Volet.com​

Utilisez ce moyen lorsque le destinataire a un compte Volet.com.

Les fonds sont transférés en interne de votre compte Volet.com vers le compte Volet.com du destinataire.

Ce moyen ne nécessite pas de confirmation blockchain et n’utilise pas d’adresses de portefeuilles crypto externes.

Valider un paiement à un utilisateur Volet.com​

Validez le paiement avant de créer la transaction.

Point de terminaison :

POST /api/withdrawal/validation/internal-other

Exemple de requête :

{
"srcWalletId": "W000000000001",
"amount": 25,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 001",
"srcCurrency": "USD",
"destCurrency": "USD",
"destEmail": "[email protected]"
}

La validation vérifie les informations du paiement sans créer de transaction.

Créer un paiement à un utilisateur Volet.com​

Une fois la validation réussie, créez la transaction de paiement.

Point de terminaison :

POST /api/withdrawal/internal-other

Exemple de requête :

{
"srcWalletId": "W000000000001",
"amount": 25,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 001",
"srcCurrency": "USD",
"destCurrency": "USD",
"destEmail": "[email protected]"
}

Exemple de réponse :

{
"transactionId": "11111111-1111-4111-8111-111111111111",
"paymentMethodType": "INTERNAL_OTHER",
"transactionType": "WITHDRAWAL",
"status": "CREATED",
"direction": "WITHDRAWAL",
"currency": "USD",
"amount": 25,
"createdAt": "2026-01-15T10:30:00",
"walletSrcId": "W000000000001",
"fullCommission": 0.13,
"comment": "Payout batch 2026-06-26 / recipient 001"
}

Enregistrez le transactionId renvoyé dans votre système et utilisez-le pour suivre le statut du paiement.

Facultatif : valider les comptes Volet.com des destinataires​

Si votre parcours collecte les adresses e-mail des destinataires avant la création des paiements, vous pouvez vérifier l’existence des comptes Volet.com avant de créer les demandes.

Point de terminaison :

GET /api/account/exists

Vous pouvez aussi vérifier les informations du titulaire du compte si votre parcours exige des contrôles supplémentaires.

Point de terminaison :

GET /api/account/matching

Ces méthodes réduisent les paiements échoués dus à des informations de destinataire erronées.

Moyen 2 : envoyer des paiements crypto sans conversion​

Utilisez ce moyen pour envoyer des cryptomonnaies depuis le même solde crypto vers un portefeuille crypto externe.

Par exemple :

  • Envoyer des USDT depuis votre solde USDT vers une adresse USDT TRC-20 externe.
  • Envoyer des BTC depuis votre solde BTC vers une adresse BTC externe.
  • Envoyer des ETH depuis votre solde ETH vers une adresse ETH externe.

Le destinataire n’a pas besoin de compte Volet.com.

Valider un paiement crypto sans conversion​

Validez le paiement crypto avant de créer la transaction.

Point de terminaison :

POST /api/withdrawal/validation/cryptowallet

Exemple de requête :

{
"srcWalletId": "W000000000002",
"amount": 100,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 002",
"destCurrency": "USDT_TRC20",
"address": {
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"receiverInfo": {
"email": "[email protected]"
}
}

Utilisez le destCurrency correspondant au token et au réseau blockchain du paiement.

Pour les réseaux qui exigent un memo, un tag de destination ou un identifiant similaire, indiquez-le dans le champ address.memo.

Exemple :

{
"address": {
"address": "rXXXXXXXXXXXXXXXXXXXXXXXX",
"memo": "123456"
}
}

Créer un paiement crypto sans conversion​

Une fois la validation réussie, créez la transaction de paiement.

Point de terminaison :

POST /api/withdrawal/cryptowallet

Exemple de requête :

{
"srcWalletId": "W000000000002",
"amount": 100,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 002",
"destCurrency": "USDT_TRC20",
"address": {
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"receiverInfo": {
"email": "[email protected]"
}
}

Exemple de réponse :

{
"transactionId": "22222222-2222-4222-8222-222222222222",
"paymentMethodType": "CRYPTO_WALLET",
"transactionType": "WITHDRAWAL",
"status": "CREATED",
"direction": "WITHDRAWAL",
"currency": "USDT",
"amount": 100,
"createdAt": "2026-01-15T10:30:00",
"walletSrcId": "W000000000002",
"fullCommission": 0.25,
"comment": "Payout batch 2026-06-26 / recipient 002"
}

Moyen 3 : envoyer des paiements crypto avec conversion​

Utilisez ce moyen lorsque le solde source et la devise de paiement sont différents.

Par exemple :

  • Envoyer des USDT vers un portefeuille externe depuis un solde en USD.
  • Envoyer des BTC vers un portefeuille externe depuis un solde en EUR.
  • Envoyer des USDC sur un réseau pris en charge depuis un autre solde pris en charge.

Le destinataire reçoit des cryptomonnaies sur un portefeuille crypto externe. La conversion est effectuée pendant le parcours de paiement.

Valider un paiement crypto avec conversion​

Validez le paiement avant de créer la transaction.

Point de terminaison :

POST /api/withdrawal/validation/crypto-external

Exemple de requête :

{
"srcWalletId": "W000000000001",
"amount": 100,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 003",
"srcCurrency": "USD",
"destCurrency": "USDT_TRC20",
"address": {
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"receiverInfo": {
"firstName": "Alex",
"lastName": "Example",
"email": "[email protected]"
}
}

Utilisez srcCurrency pour définir la devise du solde source et destCurrency pour définir la cryptomonnaie et le réseau envoyés au destinataire.

Créer un paiement crypto avec conversion​

Une fois la validation réussie, créez la transaction de paiement.

Point de terminaison :

POST /api/withdrawal/crypto-external

Exemple de requête :

{
"srcWalletId": "W000000000001",
"amount": 100,
"action": "GIVE",
"note": "Payout batch 2026-06-26 / recipient 003",
"srcCurrency": "USD",
"destCurrency": "USDT_TRC20",
"address": {
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"receiverInfo": {
"firstName": "Alex",
"lastName": "Example",
"email": "[email protected]"
}
}

Exemple de réponse :

{
"transactionId": "33333333-3333-4333-8333-333333333333",
"paymentMethodType": "CRYPTO_EXTERNAL",
"transactionType": "WITHDRAWAL",
"status": "CREATED",
"direction": "WITHDRAWAL",
"currency": "USD",
"amount": 100,
"createdAt": "2026-01-15T10:30:00",
"walletSrcId": "W000000000001",
"fullCommission": 0.50,
"comment": "Payout batch 2026-06-26 / recipient 003"
}

Champs de la requête​

Champs courants des demandes de paiement :

ChampObligatoireUtilisé pourDescription
srcWalletIdNonTous les moyens de paiementIdentifiant du portefeuille source dans votre compte Volet.com.
amountOuiTous les moyens de paiementMontant du paiement. Son interprétation dépend de action.
actionOuiTous les moyens de paiementMode du montant. Valeurs possibles : GIVE, GET.
noteNonTous les moyens de paiementNote interne ou description du paiement.
srcCurrencyNonPaiements aux utilisateurs Volet.com, paiements crypto avec conversionDevise source du paiement.
destCurrencyOuiTous les moyens de paiementDevise créditée au destinataire ou envoyée vers le portefeuille crypto externe.
destEmailNonPaiements aux utilisateurs Volet.comAdresse e-mail du compte Volet.com du destinataire.
destWalletIdNonPaiements aux utilisateurs Volet.comIdentifiant du portefeuille du destinataire, le cas échéant.
address.addressOuiPaiements crypto externesAdresse du portefeuille crypto du destinataire.
address.memoNonPaiements crypto externesMemo, tag de destination ou identifiant similaire, si le réseau choisi l’exige.
receiverInfoNonPaiements crypto externesInformations sur le destinataire, comme le nom, l’e-mail, la date de naissance ou la raison sociale, si nécessaire.

GIVE et GET​

Utilisez action pour définir l’interprétation du montant du paiement.

ActionSignification
GIVELe montant correspond au montant à envoyer côté source.
GETLe montant correspond au montant que le destinataire doit recevoir, lorsque c’est pris en charge.

Pour les paiements avec conversion de devise, vérifiez le taux de change avant de créer le paiement. Votre système peut ainsi afficher ou enregistrer les montants source et destination attendus avant la création de la transaction.

Suivi du statut des paiements​

Après avoir créé un paiement, enregistrez le transactionId renvoyé.

Utilisez la recherche de transaction pour obtenir le dernier statut du paiement.

Point de terminaison :

GET /api/transactions/{id}

Vous pouvez aussi rechercher dans l’historique des transactions.

Point de terminaison :

GET /api/transactions

Filtres utiles :

FiltreDescription
paymentDirectionsFiltrer par DEPOSIT ou WITHDRAWAL.
transactionStatusFiltrer par statut de transaction.
walletsFiltrer par identifiants de portefeuille.
startDate / endDateFiltrer par période de création.
searchLabelRechercher par libellé texte, le cas échéant.
offset / limitPaginer les résultats.
sortOrderTrier les résultats par date de création.

Statuts des transactions​

Utilisez le statut de la transaction pour mettre à jour le statut du paiement dans votre propre système.

StatutSignificationAction recommandée
CREATEDLa transaction de paiement a été créée.Enregistrez la transaction et poursuivez le suivi.
READY_TO_PROCESSLe paiement est prêt à être traité.Poursuivez le suivi.
PENDINGLe paiement est en attente.Poursuivez le suivi.
PROCESSINGLe paiement est en cours de traitement.Poursuivez le suivi.
EXCHANGINGLa conversion de devise est en cours.Poursuivez le suivi.
COMPLETEDLe paiement a été effectué.Marquez le paiement comme effectué dans votre système.
CANCELLINGL’annulation est en cours.Attendez le statut final.
CANCELEDLe paiement a été annulé.Marquez le paiement comme annulé.
REFUNDINGLe remboursement est en cours.Attendez le statut final.
REFUNDEDLe paiement a été remboursé.Marquez le paiement comme remboursé.

Ne considérez le paiement comme effectué qu’une fois le statut passé à COMPLETED.

Annuler des paiements​

Certaines transactions peuvent être annulées tant que l’annulation reste possible.

Point de terminaison :

DELETE /api/transactions/{transactionId}

La possibilité d’annuler dépend du moyen de paiement, du statut de la transaction et de l’étape de traitement.

Ne comptez pas sur l’annulation des paiements crypto une fois la transaction diffusée sur la blockchain. Vérifiez toutes les adresses, devises, réseaux et montants des destinataires avant de créer le paiement.

Recommandations pour le traitement par lots​

Pour les paiements de masse, votre backend doit gérer le cycle de vie du lot.

Approche recommandée :

  1. Attribuez un identifiant interne au lot de paiements.
  2. Attribuez un identifiant interne à chaque paiement.
  3. Validez chaque élément avant de créer les transactions.
  4. Ne créez des transactions que pour les éléments validés.
  5. Enregistrez la correspondance entre votre identifiant interne d’élément et le transactionId renvoyé.
  6. Suivez chaque transaction séparément.
  7. Ne relancez que les éléments échoués ou non créés.
  8. Rapprochez les statuts finaux avant de marquer le lot comme terminé.

Évitez d’envoyer des paiements en double. Si votre application relance une requête après un délai d’attente dépassé, vérifiez d’abord si une transaction a déjà été créée pour cet élément.

Gestion des erreurs​

Les erreurs de la Merchant API renvoient des réponses d’erreur structurées.

Cas d’erreur courants :

Statut HTTPSignification
400La requête est mal formée ou contient des paramètres non valides.
401Les en-têtes d’authentification sont absents ou non valides.
403L’API n’est pas autorisée à utiliser l’opération demandée.
404La ressource demandée est introuvable.
500Erreur serveur inattendue.

En cas d’erreur :

  • Journalisez errorId pour le support et le diagnostic.
  • Consultez errorField pour identifier le champ de la requête concerné.
  • Ne créez pas automatiquement de paiement de remplacement avant d’avoir confirmé qu’aucune transaction n’a été créée.
  • Ne réessayez que lorsque c’est sans risque.

Liste de contrôle des tests​

Avant d’envoyer des paiements de masse réels, testez le parcours complet.

Pour les paiements aux utilisateurs Volet.com :

  • Validation du compte du destinataire.
  • Validation du paiement.
  • Création du paiement.
  • Suivi du statut de la transaction.
  • Scénarios effectués, annulés et échoués.

Pour les paiements crypto sans conversion :

  • Choix correct du token et du réseau.
  • Gestion de l’adresse et du memo.
  • Validation du paiement.
  • Création du paiement.
  • Suivi de la transaction blockchain.
  • Gestion d’une adresse erronée ou d’un réseau non pris en charge.

Pour les paiements crypto avec conversion :

  • Vérification du solde.
  • Vérification du taux de change.
  • Validation du paiement.
  • Création du paiement.
  • Statuts EXCHANGING et COMPLETED.
  • Rapprochement des montants entre devise source et devise de destination.

Pour le traitement par lots :

  • Gestion des échecs partiels d’un lot.
  • Logique de relance.
  • Prévention des doublons.
  • Correspondance interne entre lots et transactions.
  • Rapport de rapprochement final.

Points importants​

  • L’API crée une transaction de paiement par requête.
  • L’orchestration des lots incombe à votre backend.
  • Validez toujours les paiements avant de créer les transactions.
  • Enregistrez toujours les valeurs de transactionId renvoyées.
  • Utilisez la recherche de transaction ou l’historique pour suivre le statut final.
  • Ne marquez pas un paiement comme effectué tant que son statut n’est pas COMPLETED.
  • Pour les paiements crypto, vérifiez toujours l’adresse, le token, le réseau et le memo du destinataire avant de créer la transaction.
  • Envoyer de la crypto à une mauvaise adresse ou sur un mauvais réseau peut entraîner la perte définitive des fonds.
  • Les identifiants de l’API ne doivent jamais être exposés dans le code frontend.