Soldes et cartes

IBAN pour vos clients

Ouvrir un compte bancaire européen au nom d'un client et recevoir ses euros en USDC.

Un IBAN est un compte bancaire européen en euros, ouvert au nom de l'un de vos clients. Les euros qui y sont versés sont convertis en USDC et envoyés sur le portefeuille que vous indiquez à la création. Ils ne passent pas par vos soldes Loov.

Les IBAN réels nécessitent un compte approuvé et une clé réelle. Avec une clé de test, rien n'est ouvert : vous faites avancer le compte vous-même (voir « Tester » plus bas).

Les étapes

  1. Vous créez le client. La réponse contient customer_id et kyc_link.
  2. Votre client ouvre kyc_link et prouve son identité (pièce d'identité et selfie).
  3. Une fois l'identité approuvée, le compte est demandé automatiquement.
  4. Quand la banque l'ouvre, le compte passe à approved et porte un IBAN et un BIC.
  5. Chaque versement vous est notifié, puis à nouveau lorsqu'il est terminé.

Créer un client

curl -X POST https://api.secure.payment.loov-solutions.com/v2/ibans \
  -H "Authorization: Bearer $LOOV_API_KEY" \
  -H "Idempotency-Key: 6f1c2b9e-order-42" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Awa Diop",
  "email": "awa@example.com",
  "type": "individual",
  "wallet_address": "0x7db946c37B240FC9Fa979927bafc5b2043B30d0A",
  "webhook_url": "https://example.com/webhooks/ibans"
}'
ChampTypeDescription
namestringNom complet du client, ou raison sociale.
emailstringE-mail du client.
typestringFacultatif. individual (par défaut) ou business.
wallet_addressstringAdresse du portefeuille qui reçoit les USDC, sur le réseau Base (0x…). Elle ne peut pas être changée ensuite.
webhook_urlstringFacultatif. Adresse HTTPS appelée à chaque étape et à chaque versement.
{
  "customer_id": "cus_9f2c41d7",
  "status": "pending",
  "livemode": true,
  "type": "individual",
  "name": "Awa Diop",
  "email": "awa@example.com",
  "currency": "EUR",
  "kyc_link": "https://compose.finance/kyc/…",
  "wallet": {
    "address": "0x7db946c37B240FC9Fa979927bafc5b2043B30d0A",
    "chain": "base"
  },
  "account": null,
  "balance": "0",
  "balance_currency": "USDC",
  "webhook_url": "https://example.com/webhooks/ibans",
  "created_at": "2026-10-07T09:12:00+00:00"
}

Statuts

StatutÉtapeDescription
pending1Client créé ; l'identité n'a pas encore été envoyée.
kyc_submitted2Identité envoyée, en cours d'examen.
kyc_rejected—Identité refusée. Demandez un nouveau lien et recommencez.
kyc_approved3Identité approuvée ; le compte est en cours de demande.
iban_pending4Compte demandé à la banque.
iban_rejected—La banque a refusé d'ouvrir le compte.
approved5Compte actif : l'objet account contient l'IBAN et le BIC.

Consulter un compte

curl -X GET https://api.secure.payment.loov-solutions.com/v2/ibans/cus_9f2c41d7 \
  -H "Authorization: Bearer $LOOV_API_KEY" \
  -H "Accept: application/json"
{
  "customer_id": "cus_9f2c41d7",
  "status": "approved",
  "account": {
    "iban": "FR7630006000011234567890189",
    "bic": "AGRIFRPP",
    "account_name": "Awa Diop",
    "account_number": "12345678901",
    "bank_name": "Banque partenaire",
    "bank_country": "FR",
    "bank_address": "…"
  },
  "balance": "1154.93",
  "balance_currency": "USDC"
}
MéthodeAdresseDescription
GET/v2/ibansListe de vos comptes, du plus récent au plus ancien.
GET/v2/ibans/{customer_id}Un compte, avec son solde.
POST/v2/ibans/{customer_id}/kyc-linkUn nouveau lien de vérification d'identité, si le précédent a expiré.
GET/v2/ibans/{customer_id}/transactionsLes versements et retraits du compte.

Versements et frais

Pour chaque versement, source_amount est le montant reçu en euros et amount ce qui est arrivé en USDC sur votre portefeuille : le montant converti, moins les frais Loov (fee). C'est amount qui est compté sur le solde du compte. provider_fee est le prélèvement de notre partenaire bancaire, exprimé dans la devise d'origine (provider_fee_currency). Le solde est un cumul de ce qui a été reçu et non retiré : les USDC eux-mêmes sont sur votre portefeuille.

{
  "id": "01k7a2m4p6q8r0s2t4v6w8x0y2",
  "type": "deposit",
  "status": "completed",
  "provider_transaction_id": "txn_abc123",
  "source_amount": "1000",
  "source_currency": "EUR",
  "amount": "1154.93",
  "currency": "USDC",
  "exchange_rate": "1.1691279887",
  "fee": "2.5",
  "provider_fee": "1",
  "provider_fee_currency": "EUR",
  "bank_reference": "FLGVNY3H9F",
  "tx_hash": "0x1234…cdef",
  "created_at": "2026-10-07T10:02:00+00:00"
}
StatutComptéDescription
processingNonVersement reçu, conversion en cours.
completedOuiLes USDC ont été envoyés sur votre portefeuille (tx_hash).
failedNonLe versement a échoué.
cancelledNonLe versement a été annulé.
expiredNonLe versement n'a pas abouti à temps.
reversedRetiréLe versement a été renvoyé à l'expéditeur ; s'il avait été compté, il est retiré du solde.

Notifications

Si vous avez donné un webhook_url, nous l'appelons à chaque étape. La requête est signée comme les autres notifications (en-tête Loov-Signature, avec le secret de votre application).

ÉvénementQuandDescription
iban.kyc.submittedIdentité envoyéeLe client a terminé le parcours de vérification.
iban.kyc.approvedIdentité approuvéeLe compte est demandé dans la foulée.
iban.kyc.rejectedIdentité refuséeDemandez un nouveau lien.
iban.virtual_account.createdCompte demandéLa banque examine la demande.
iban.virtual_account.approvedCompte actifdata.iban.account contient l'IBAN.
iban.virtual_account.rejectedCompte refuséLa banque a refusé.
iban.deposit.createdVersement reçudata.transaction décrit le versement.
iban.deposit.status_changedVersement mis à jourstatus vaut completed lorsqu'il est compté sur le solde.
iban.withdrawal.createdRetrait créédata.transaction décrit le retrait.
iban.withdrawal.status_changedRetrait mis à jourRetiré du solde une fois terminé.
iban.withdrawal_bank.*Compte de retraitcreated, approved ou rejected : le compte bancaire vers lequel vont les retraits.
{
  "event": "iban.deposit.status_changed",
  "data": {
    "iban": {
      "customer_id": "cus_9f2c41d7",
      "status": "approved",
      "balance": "1154.93",
      "balance_currency": "USDC"
    },
    "transaction": {
      "type": "deposit",
      "status": "completed",
      "source_amount": "1000",
      "source_currency": "EUR",
      "amount": "1154.93",
      "currency": "USDC",
      "fee": "2.5"
    }
  }
}

Tester

Avec une clé de test, le client est créé chez nous seulement. Faites-le avancer avec l'adresse de simulation ; chaque appel déclenche la notification correspondante.

curl -X POST https://api.secure.payment.loov-solutions.com/v2/test/ibans/{customer_id}/simulate \
  -H "Authorization: Bearer $LOOV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "outcome": "deposit",
  "amount": 250
}'
outcomeEffetDescription
kyc_submittedkyc_submittedIdentité envoyée.
kyc_approvediban_pendingIdentité approuvée, compte demandé.
kyc_rejectedkyc_rejectedIdentité refusée.
iban_approvedapprovedCompte actif, avec un IBAN de test.
iban_rejectediban_rejectedCompte refusé.
deposit—Un versement terminé du montant indiqué (amount, 100 par défaut).

Erreurs fréquentes

CodeHTTPDescription
account_not_active403Votre compte doit être approuvé pour ouvrir des IBAN réels.
wallet_address_required422Aucune adresse de portefeuille n'a été fournie.
provider_declined422Notre partenaire bancaire a refusé la demande ; le message précise pourquoi.
provider_unavailable503Notre partenaire bancaire ne répond pas. Réessayez.
ibans_unavailable503Les IBAN ne sont pas disponibles pour le moment.