# Crédit disponible et mouvements de fonds Découvrez comment les fonds circulent et comment utiliser le champ du montant de crédit disponible pour éviter les refus d'autorisation. Chaque fois qu’un client effectue une transaction par carte ou que vous enregistrez un réajustement de crédit ou de débit, le crédit disponible du compte connecté change. Pour reprendre l’exemple du crédit de récompense de 50 USD de Gymbox, le crédit disponible de Barbell a augmenté de 50 USD après l’application de l’ajustement du crédit de récompense. Vous pouvez confirmer cette augmentation et déterminer le dernier crédit disponible de Barbell en récupérant le grand livre de crédit du compte à l’aide de la commande suivante : ```curl curl https://api.stripe.com/v1/issuing/credit_ledger \ -u "<>:" \ -H "Stripe-Version: 2026-03-25.preview; issuing_credit_beta=v1" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" ``` Exemple de réponse : ```json { "credit_limit": 100000, "amount_pending": 10000, "obligations": { "accruing": 5000, "unpaid": 15000 }, "credit_available": 97000, "prefunded_available": 0, "currency": "usd", "livemode": false } ``` Stripe recommande d’utiliser le champ `credit_available` renvoyé lors de l’appel de l’endpoint `credit_ledger`. Cette approche garantit que vous montrez toujours à vos clients le montant exact du crédit qu’il leur reste à dépenser. Le champ `credit_available` et le solde Issuing de votre client déterminent ensemble ce qu’un compte connecté peut dépenser à tout moment. Stripe l’utilise également pour déterminer si une demande d’autorisation de transaction sera approuvée ou refusée sur la base des fonds disponibles. ## L’autorisation a échoué en raison d’un manque de crédit disponible Les autorisations effectuées sur un compte connecté avec une [CreditPolicy](https://docs.stripe.com/api/issuing/credit_policy.md) peuvent être refusées pour les motifs suivants : - Le compte connecté tente d’effectuer une dépense supérieure à son plafond de crédit disponible. Dans ce cas, le compte connecté présente peut-être des FundingObligations impayées qui réduisent son crédit disponible. Pour éviter tout refus d’autorisation, veillez à ce que les FundingObligations de votre compte connecté soient toujours à jour. - Votre compte de plateforme Issuing n’a plus de fonds disponibles et le solde Issuing disponible de votre compte connecté est également de zéro. Pour éviter les refus d’autorisation, ajoutez suffisamment de fonds à votre compte Issuing. ## Suivre les mouvements de fonds Bien que cela ne soit pas indispensable pour permettre à vos comptes connectés d’accéder à un compte de crédit, il peut être judicieux de suivre l’état des autorisations, transactions et transferts créés lorsqu’un compte connecté utilise des fonds avancés par votre plateforme. Imaginons la situation de départ suivante : | Compte | Solde Issuing | | ------------------------------------------ | ------------- | | Compte Issuing de Gymbox (plateforme) | 70 USD | | Solde Issuing de Barbell (compte connecté) | 0 USD | ### Autorisations Barbell, qui dispose d’une [CreditPolicy](https://docs.stripe.com/api/issuing/credit_policy.md) avec une valeur `credit_limit_amount` de 100 USD établie avec Gymbox, dépense 10 USD. Cela entraîne une autorisation de 10 USD sur le compte de Barbell : ```json { "id": "iauth_1JVXl82eZvKYlo2CPIiWlzrn", "object": "issuing.authorization", "amount": 1000, "currency": "usd", "approved": true, "authorization_method": "online", "balance_transactions": [ { "id": "txn_1234XYZ", "object": "balance_transaction", "amount": -1000, "type": "issuing_authorization_hold", ... } ], "card": {...}, ... } ``` En parallèle, le solde de Gymbox fait l’objet d’une retenue de même montant. Cette retenue permet de réserver ces fonds, qui ne pourront ainsi pas être utilisés par d’autres comptes connectés de Gymbox : ```json { "id": "txn_1Mgr6fXpL7qsPGZtDwrMkq3S", "object": "balance_transaction", "amount": -1000, "available_on": 1677682692, "created": 1677682692, "currency": "usd", "description": "Platform hold for authorization (account: acct_1MgC5JRcH5icH3Nz, authorization: iauth_1Mgr6dRcH5icH3NzezZCHnJF)", "exchange_rate": null, "fee": 0, "fee_details": [], "net": -1000, "reporting_category": "issuing_authorization_hold", "source": { "id": "iph_1Mgr6eXpL7qsPGZtAMb7x0N6", "object": "issuing.platform_hold", "amount": 1000, "currency": "usd", "originating_account": "acct_1MgC5JRcH5icH3Nz", "originating_authorization": "iauth_1Mgr6dRcH5icH3NzezZCHnJF", "originating_balance_transaction": "txn_1Mgr6dRcH5icH3NzYGRkgcn7" }, "status": "available", "type": "issuing_authorization_hold" } ``` Le solde est désormais de : | Compte | Solde Issuing | | ------------------------------------------ | ------------- | | Compte Issuing de Gymbox (plateforme) | 60 USD | | Solde Issuing de Barbell (compte connecté) | −10 USD | ### Captures de transactions et transferts Avant la capture des autorisations Issuing et la création des transactions Issuing, les fonds sont transférés vers le compte connecté, puis la retenue dont la plateforme fait l’objet est levée. Sur le compte de Barbell, l’autorisation a été modifiée puis clôturée, levant la retenue des fonds : ```json { "id": "iauth_1JVXl82eZvKYlo2CPIiWlzrn", "object": "issuing.authorization", "amount": 1000, "currency": "usd", "approved": true, "authorization_method": "online", "balance_transactions": [ { "id": "txn_1234XYZ", "object": "balance_transaction", "amount": -1000, "type": "issuing_authorization_hold", ... }, { "id": "txn_4t355646t54w2", "object": "balance_transaction", "amount": 1000, "type": "issuing_authorization_release" } ], "card": {...}, "status": "closed", "transactions": [ { "id": "ipi_1032HU2eZvKYlo2CEPtcnUvl", "object": "issuing.transaction", "amount": -1000, "authorization": "iauth_1JVXl82eZvKYlo2CPIiWlzrn", "balance_transaction": "txn_1345r1KCr4trgtrg0WfNdUCbG1w", ... } ] } ``` La retenue de fonds opérée sur le compte de la plateforme est également levée : ```json { "id": "txn_1Mgr6fXpL7qsPGZtDwrPz7bA", "object": "balance_transaction", "amount": 1000, "available_on": 1677682692, "created": 1677682692, "currency": "usd", "description": "Released platform hold for authorization (account: acct_1MgC5JRcH5icH3Nz, authorization: iauth_1Mgr6dRcH5icH3NzezZCHnJF)", "exchange_rate": null, "fee": 0, "fee_details": [], "net": 1000, "reporting_category": "issuing_authorization_hold", "source": { "id": "iph_1Mgr6eXpL7qsPGZtAMb7m8Z3", "object": "issuing.platform_hold", "amount": -1000, "currency": "usd", "originating_account": "acct_1MgC5JRcH5icH3Nz", "originating_authorization": "iauth_1Mgr6dRcH5icH3NzezZCHnJF", "originating_balance_transaction": "txn_1Mgr6dRcH5icH3NzYGR7bA4c" }, "status": "available", "type": "issuing_authorization_hold" } ``` Stripe transfère les fonds de Gymbox vers le compte Issuing de Barbell. Un objet [Transfer](https://docs.stripe.com/api/transfers.md) est créé : ```json { "id": "tr_3JeQsp2eZvKYlo2C13DagtB0", "object": "transfer", "amount": 1000, "amount_reversed": 0, "balance_transaction": "txn_1032HU2eZvKYlo2CEPtcnUvl", "created": 1646912059, "currency": "usd", "description": null, "destination": "acct_1032D82eZvKYlo2C", "livemode": true, "metadata": {}, "reversals": { "object": "list", "data": [], "has_more": false, "url": "/v1/transfers/tr_3JeQsp2eZvKYlo2C13DagtB0/reversals" }, "reversed": false, "source_transaction": null, "issuing_transaction": "ipi_1032HU2eZvKYlo2CEPtcnUvl", "metadata": {}, "source_balance": { "type": "issuing", }, // New destination_balance returned field links to the BT on the connected account side "destination_balance": { "type": "issuing", "issuing": { "balance_transaction": "txn_123", }, }, // ... other fields ... } ``` La retenue des fonds, la levée de cette retenue et le transfert sont effectués avant la création de la transaction Issuing correspondante par Stripe. Le solde est désormais de : | Compte | Solde Issuing | | ------------------------------------------ | ------------- | | Compte Issuing de Gymbox (plateforme) | 60 USD | | Solde Issuing de Barbell (compte connecté) | 0 USD | Si la transaction n’a pas fait l’objet d’une [autorisation initiale](https://docs.stripe.com/issuing/purchases/transactions.md?issuing-capture-type=force_capture) et si le compte connecté ne dispose pas de fonds suffisants, le transfert de solde de la plateforme et le flux de création de la transaction se produisent tout de même. ## Remboursements Lorsqu’un compte connecté reçoit un remboursement, Stripe tente de déterminer si la transaction correspondante avait été financée par le solde du compte connecté ou par le compte de la plateforme. Si le compte connecté a financé la transaction, le remboursement est versé au solde du compte connecté. Si le compte de la plateforme a financé la transaction (par exemple via la ligne de crédit du compte connecté), le montant du remboursement est déduit de la `FundingObligation` du compte connecté. Le remboursement est ensuite versé au compte de la plateforme, car celle-ci a déjà payé Stripe pour cette transaction au nom du compte connecté. Supposons que la `FundingObligation` de Barbell est de 100 USD. Si le montant est remboursé, alors : - La `FundingObligation` de Barbell passe de 100 à 0 USD - Les 100 USD sont transférés vers le compte Issuing de Gymbox, ce qui augmente son solde de plateforme de 100 USD Le montant `amount_total` d’une `FundingObligation` est négatif si la seule transaction d’une période de crédit est un remboursement et qu’il n’y a aucune dépense par carte. Dans ce cas, l’état de la `FundingObligation` est `Needs refund`. Une `FundingObligation` peut être négative lorsque le montant total des remboursements est supérieur au montant total des dépenses par carte. ### Litiges Lorsqu’un client conteste une transaction de dépense à crédit sur un compte connecté, la contestation suit le processus décrit dans la section [Contestation des litiges](https://docs.stripe.com/issuing/purchases/disputes.md). Les litiges perdus ne donnent lieu à aucune action (aucun crédit n’est émis en faveur du compte connecté). En cas de litige remporté, le compte connecté est crédité, tel que décrit dans la [section sur les remboursements](https://docs.stripe.com/issuing/credit/manage-account-obligations/available-credit.md#refunds). ## Refus d’autorisation Les autorisations effectuées sur un compte connecté disposant d’une `CreditPolicy` peuvent être refusées pour les motifs suivants : - Le compte connecté tente d’effectuer une dépense supérieure à son plafond de crédit disponible. Dans ce cas, le compte connecté présente peut-être des `FundingObligations` impayées qui réduisent son crédit disponible. Pour éviter tout refus d’autorisation, veillez à ce que les `FundingObligations` de votre compte connecté soient toujours à jour. - Votre compte de plateforme Issuing n’a plus de fonds disponibles et le solde Issuing disponible de votre compte connecté est également de zéro. Pour éviter les refus d’autorisation, ajoutez suffisamment de fonds à votre compte Issuing.