Comptes & Virements SEPA
Gerez les comptes bancaires avec IBAN francais/europeen, consultez les soldes en temps reel et effectuez des virements SEPA standards ou instantanes.
Comptes bancaires
Chaque utilisateur YaniPay dispose d'un ou plusieurs comptes bancaires operes par le fournisseur BaaS (Swan ou Treezor). Un compte est associe a un IBAN francais ou europeen et permet de recevoir et d'emettre des virements SEPA. Les soldes sont exprimes en centimes pour eviter les erreurs d'arrondi sur les nombres flottants.
L'interface BaaSAccountrepresente la structure standard d'un compte bancaire dans l'abstraction YaniPay. Elle est identique quel que soit le provider sous-jacent (Swan ou Treezor).
1 interface BaaSAccount { 2 providerAccountId: string; 3 platformUserId: string; 4 status: 'PENDING' | 'ACTIVE' | 'SUSPENDED' | 'CLOSED'; 5 currency: string; // ISO 4217 6 iban?: string; // FR76 3000 4028 ... 7 bic?: string; // SWNBFR22 8 balanceCents: number; // 100 = 1.00 EUR 9 createdAt: string; 10 }
IBAN francais
Chaque compte recoit un IBAN FR76 unique pour recevoir des virements et domicilier des prelevements.
Solde temps reel
Le solde est mis a jour instantanement via les webhooks du provider BaaS, sans polling.
Multi-statuts
Les comptes transitent par PENDING, ACTIVE, SUSPENDED et CLOSED avec tracabilite complete.
Montants en centimes
15000represente 150,00 EUR. Cette convention evite les erreurs d'arrondi classiques avec les nombres flottants et garantit une precision absolue sur les transactions financieres.Creer un compte
La creation d'un compte bancaire est declenchee apres la validation du KYC de l'utilisateur. Le provider BaaS attribue automatiquement un IBAN et un BIC au compte. Le statut initial estPENDINGjusqu'a la confirmation du provider.
1 const account = await baas.createAccount({ 2 platformUserId: 'usr_123', 3 currency: 'EUR', 4 country: 'FR', 5 accountName: 'Compte principal', 6 accountHolderId: 'swan_holder_abc', // From onboarding 7 }); 8 // account.iban -> FR76 3000 4028 7900 0123 4567 890
Une fois le compte passe en statut ACTIVE, l'IBAN est operationnel et peut recevoir des virements entrants. Un webhookaccount.updated est emis par le provider pour notifier le changement de statut.
Virements SEPA
Les virements SEPA (Single Euro Payments Area) permettent de transferer des fonds vers n'importe quel compte bancaire dans la zone SEPA (36 pays). YaniPay supporte les virements standards et instantanes, tous conformes a la directive PSD2 avec authentification forte (SCA).
Consentement PSD2/SCA obligatoire
consentUrlretournee par le provider. Le virement ne sera execute qu'apres validation de l'authentification forte par l'utilisateur.Modes de virement
YaniPay propose trois modes de virement SEPA selon le besoin de rapidite et de fiabilite. Le mode recommande est InstantWithFallback qui combine le meilleur des deux mondes.
| Mode | Type | Delai | Description |
|---|---|---|---|
Regular | SEPA Standard | 1-2 jours ouvrables | Virement classique a cout reduit. Adapte aux virements non urgents. |
Instant | SEPA Instant | < 10 secondes | Virement en temps reel, 24h/24, 7j/7. Necessite que la banque destinataire supporte SCT Inst. |
InstantWithFallback | Instant + Standard | < 10s ou 1-2j | Tente d'abord un virement instantane. Si la banque destinataire ne supporte pas SCT Inst, bascule automatiquement sur un virement standard. |
Mode recommande : InstantWithFallback
InstantWithFallbackpour les virements SEPA. Il tente d'abord un virement instantane (<10s) et bascule automatiquement sur un virement standard si l'instant n'est pas disponible.1 const transfer = await baas.initiateTransfer({ 2 fromAccountId: 'acc_123', 3 toIban: 'FR76 1234 5678 9012 3456 7890 123', 4 beneficiaryName: 'Jean Dupont', 5 amountCents: 15000, // 150.00 EUR 6 label: 'Remboursement diner', 7 mode: 'InstantWithFallback', // Recommended 8 consentRedirectUrl: 'https://app.yanipay.com/consent/callback', 9 }); 10 11 // transfer.id -> 'txn_abc123' 12 // transfer.status -> 'ConsentPending' 13 // transfer.consentUrl -> 'https://swan.io/consent/...' 14 // Redirect user to transfer.consentUrl for SCA approval
Ordres permanents
Les ordres permanents permettent de programmer des virements recurrents a intervalles reguliers. Deux methodes de calcul du montant sont disponibles : Fixed pour un montant fixe et FullBalance pour vider le compte a chaque echeance.
1 // Ordre permanent a montant fixe 2 const standingOrder = await baas.createStandingOrder({ 3 fromAccountId: 'acc_123', 4 toIban: 'FR76 9876 5432 1098 7654 3210 987', 5 beneficiaryName: 'Loyer SCI Dupont', 6 amountCents: 85000, // 850.00 EUR 7 label: 'Loyer mensuel', 8 period: 'Monthly', 9 method: 'Fixed', 10 firstExecutionDate: '2025-02-01', 11 lastExecutionDate: '2025-12-01', // Optional 12 consentRedirectUrl: 'https://app.yanipay.com/consent/callback', 13 }); 14 15 // Ordre permanent FullBalance (vider le compte) 16 const sweepOrder = await baas.createStandingOrder({ 17 fromAccountId: 'acc_456', 18 toIban: 'FR76 1111 2222 3333 4444 5555 666', 19 beneficiaryName: 'Compte epargne principal', 20 label: 'Transfert epargne hebdo', 21 period: 'Weekly', 22 method: 'FullBalance', // Transfere la totalite du solde 23 firstExecutionDate: '2025-01-06', 24 consentRedirectUrl: 'https://app.yanipay.com/consent/callback', 25 });
Fixed
Montant fixe a chaque echeance. Ideal pour les loyers, les abonnements ou les remboursements de pret.
FullBalance
Transfere la totalite du solde disponible. Utile pour les comptes de collecte ou le sweep vers un compte epargne.
Beneficiaires
Avant d'effectuer un virement recurrent, il est recommande d'enregistrer le destinataire en tant que beneficiaire. Cela simplifie les virements futurs et permet une verification prealable de l'IBAN aupres du provider BaaS.
1 // Ajouter un beneficiaire 2 const beneficiary = await baas.addBeneficiary({ 3 accountId: 'acc_123', 4 name: 'Jean Dupont', 5 iban: 'FR76 1234 5678 9012 3456 7890 123', 6 label: 'Jean - Compte courant', 7 consentRedirectUrl: 'https://app.yanipay.com/consent/callback', 8 }); 9 // beneficiary.id -> 'ben_xyz789' 10 // beneficiary.status -> 'ConsentPending' | 'Enabled' 11 12 // Lister les beneficiaires 13 const beneficiaries = await baas.listBeneficiaries({ 14 accountId: 'acc_123', 15 }); 16 // beneficiaries -> [{ id, name, iban, status, createdAt }, ...] 17 18 // Supprimer un beneficiaire 19 await baas.deleteBeneficiary({ 20 beneficiaryId: 'ben_xyz789', 21 });
Verification IBAN
IBAN virtuels
Les IBAN virtuels sont des IBAN secondaires rattaches a un compte principal. Ils permettent de recevoir des paiements avec des references dediees, facilitant le rapprochement comptable automatique. Chaque IBAN virtuel est identifie par une reference unique.
1 // Creer un IBAN virtuel 2 const virtualIban = await baas.createVirtualIban({ 3 accountId: 'acc_123', 4 label: 'Facture client #2024-001', 5 }); 6 // virtualIban.iban -> 'FR76 3000 4028 7900 9999 8888 777' 7 // virtualIban.bic -> 'SWNBFR22' 8 // virtualIban.id -> 'viban_abc' 9 10 // Lister les IBAN virtuels 11 const virtualIbans = await baas.listVirtualIbans({ 12 accountId: 'acc_123', 13 }); 14 15 // Supprimer un IBAN virtuel 16 await baas.deleteVirtualIban({ 17 virtualIbanId: 'viban_abc', 18 });
Cas d'usage des IBAN virtuels
- Rapprochement automatique des paiements clients
- Reference unique par facture ou commande
- Separation des flux entrants par activite ou projet
- Collecte de fonds pour des evenements ou cagnottes
Releves de compte
YaniPay genere des releves de compte mensuels au format PDF et CSV. Les releves sont disponibles a partir du 1er du mois suivant et couvrent l'ensemble des mouvements du mois precedent. Il est egalement possible de generer des releves personnalises sur une periode specifique.
1 // Lister les releves disponibles 2 const statements = await baas.listStatements({ 3 accountId: 'acc_123', 4 year: 2025, 5 }); 6 // statements -> [ 7 // { id: 'stmt_jan', period: '2025-01', format: 'pdf', status: 'Available' }, 8 // { id: 'stmt_feb', period: '2025-02', format: 'pdf', status: 'Available' }, 9 // ... 10 // ] 11 12 // Telecharger un releve 13 const pdf = await baas.downloadStatement({ 14 statementId: 'stmt_jan', 15 format: 'pdf', // 'pdf' | 'csv' 16 }); 17 // pdf -> Buffer (contenu du fichier) 18 19 // Generer un releve personnalise 20 const customStatement = await baas.generateStatement({ 21 accountId: 'acc_123', 22 startDate: '2025-01-15', 23 endDate: '2025-02-15', 24 format: 'csv', 25 });
Format PDF
Releve officiel avec en-tete YaniPay, detail des operations, solde initial et final. Conforme aux exigences comptables francaises.
Format CSV
Export tabulaire pour integration dans des logiciels de comptabilite (Sage, Cegid, QuickBooks). Encodage UTF-8 avec separateur point-virgule.
Endpoints API
L'ensemble des operations sur les comptes et virements est accessible via les endpoints REST de l'API mobile YaniPay. Tous les endpoints necessitent un token JWT valide dans le headerAuthorization: Bearer <token>.
| Methode | Endpoint | Description |
|---|---|---|
| GET | /api/v1/mobile/wallet/accounts | Lister les comptes bancaires |
| POST | /api/v1/mobile/wallet/accounts | Creer un nouveau compte |
| GET | /api/v1/mobile/wallet/accounts/:id | Details d'un compte |
| GET | /api/v1/mobile/wallet/accounts/:id/balance | Solde en temps reel |
| GET | /api/v1/mobile/wallet/accounts/:id/transactions | Historique des transactions |
| POST | /api/v1/mobile/wallet/transfer | Initier un virement SEPA |
| POST | /api/v1/mobile/wallet/transfer/instant | Virement SEPA Instant |
| GET | /api/v1/mobile/wallet/transfer/:id | Statut d'un virement |
| POST | /api/v1/mobile/wallet/transfer/:id/cancel | Annuler un virement (si possible) |
| GET | /api/v1/mobile/wallet/beneficiaries | Lister les beneficiaires |
| POST | /api/v1/mobile/wallet/beneficiaries | Ajouter un beneficiaire |
| DELETE | /api/v1/mobile/wallet/beneficiaries/:id | Supprimer un beneficiaire |
| GET | /api/v1/mobile/wallet/beneficiaries/:id | Details d'un beneficiaire |
| POST | /api/v1/mobile/wallet/standing-orders | Creer un ordre permanent |
| GET | /api/v1/mobile/wallet/standing-orders | Lister les ordres permanents |
| PATCH | /api/v1/mobile/wallet/standing-orders/:id | Modifier un ordre permanent |
| DELETE | /api/v1/mobile/wallet/standing-orders/:id | Annuler un ordre permanent |
| GET | /api/v1/mobile/wallet/virtual-ibans | Lister les IBAN virtuels |
| POST | /api/v1/mobile/wallet/virtual-ibans | Creer un IBAN virtuel |
| DELETE | /api/v1/mobile/wallet/virtual-ibans/:id | Supprimer un IBAN virtuel |
| GET | /api/v1/mobile/wallet/statements | Lister les releves de compte |
| GET | /api/v1/mobile/wallet/statements/:id/download | Telecharger un releve (PDF/CSV) |
| POST | /api/v1/mobile/wallet/statements/generate | Generer un releve personnalise |
| GET | /api/v1/mobile/wallet/accounts/:id/iban | Details IBAN/BIC du compte |
| POST | /api/v1/mobile/wallet/consent/callback | Callback consentement PSD2 |
| GET | /api/v1/mobile/wallet/consent/:id/status | Statut du consentement SCA |
| POST | /api/v1/mobile/wallet/accounts/:id/close | Cloturer un compte |
| GET | /api/v1/mobile/wallet/accounts/:id/limits | Limites et plafonds du compte |