# Transférer des fonds à l'aide d'objets OutboundPayment Comment créer des paiements sortants pour transférer des fonds depuis des comptes financiers vers des comptes tiers. Les objets `OutboundPayment` représentent des transferts de type « push » depuis votre compte financier vers un compte externe tiers par virement ACH ou bancaire, ou vers un autre compte financier associé à la même plateforme au moyen du réseau `stripe`. Par exemple, si vous voulez envoyer de l’argent depuis votre compte financier vers le compte bancaire américain externe de votre fournisseur, vous devez créer un `OutboundPayment` pour transférer les fonds. Le bénéficiaire d’un `OutboundPayment`` est un compte bancaire externe ou un autre compte financier. Le délai de transfert standard pour les paiements sortants peut varier de quelques minutes (lorsque vous utilisez le réseau Stripe), à une livraison le jour même ou à une livraison en 1 ou 2 jours ouvrables (lorsque vous utilisez le réseau ACH). Pour en savoir plus, consultez le guide sur la [chronologie de transfert de fonds](https://docs.stripe.com/financial-accounts/connect/money-movement/timelines.md#outboundpayment-and-outboundtransfer-transactions). ## Créer un OutboundPayment Utilisez `POST /v1/treasury/outbound_payments` pour créer un `OutboundPayment`. Sur l’ensemble des paramètres disponibles, les suivants sont obligatoires : - `amount` : montant en centimes à payer. - `currency` : le code de devise ISO à trois lettres (seule la devise `usd` est prise en charge). - `financial_account` : le compte financier source depuis lequel les fonds sont transférés. - `destination_payment_method` ou `destination_payment_method_data` : informations relatives au bénéficiaire des fonds du paiement. - Avec `destination_payment_method`, vous devez d’abord définir le `PaymentMethod` pour les flux sortants à l’aide d’un [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Vous devez également indiquer l’ID client qui correspond à l’objet `Customer` auquel est associé le `PaymentMethod`. Vous pouvez aussi utiliser un [BankAccount](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md) existant associé au `Customer` au lieu du `PaymentMethod`. - Avec `destination_payment_method_data`, vous pouvez indiquer les informations de moyen de paiement en ligne. Vous pouvez utiliser ce paramètre pour spécifier des coordonnées bancaires ou [envoyer des fonds vers un autre compte financier](https://docs.stripe.com/financial-accounts/connect/moving-money/out-of/outbound-payments.md#create-obp-for-fa) via le réseau Stripe. ## Créer un OutboundPayment vers un compte bancaire externe Utilisez `POST /v1/treasury/outbound_payments` pour créer un `OutboundPayment` provenant du compte financier identifié par l’ID du paramètre `financial_account` du corps. La requête suivante ajoute les informations `statement_descriptor` et `destination_payment_method_data`. ```curl curl https://api.stripe.com/v1/treasury/outbound_payments \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d financial_account="{{TREASURYFINANCIALACCOUNT_ID}}" \ -d amount=2000 \ -d currency=usd \ -d statement_descriptor=payment_1 \ -d "destination_payment_method_data[type]"=us_bank_account \ -d "destination_payment_method_data[us_bank_account][account_holder_type]"=individual \ -d "destination_payment_method_data[us_bank_account][routing_number]"=110000000 \ -d "destination_payment_method_data[us_bank_account][account_number]"=1234567890 \ --data-urlencode "destination_payment_method_data[billing_details][email]"="jenny@example.com" \ -d "destination_payment_method_data[billing_details][phone]"=7135551212 \ -d "destination_payment_method_data[billing_details][address][city]"=Alvin \ -d "destination_payment_method_data[billing_details][address][state]"=TX \ -d "destination_payment_method_data[billing_details][address][postal_code]"=77511 \ -d "destination_payment_method_data[billing_details][address][line1]"="123 Main St." \ -d "destination_payment_method_data[billing_details][name]"="Jenny Rosen" ``` Sauf échec de l’opération, la réponse renvoie le nouvel objet `OutboundPayment`. #### JSON (commenté) ```json { "id": "{{OUTBOUND_PAYMENT_ID}}", "object": "outbound_payment", // The source FinancialAccount. Funds are pulled from this account. "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // The amount to send. 10.00 USD in this case. "amount": 1000, "cancelable": true | false, "currency": "usd", // The destination payment method. Either this or `destination_payment_method_data` // must be specified. Use this parameter if you wish to use a reusable // Customer-attached PaymentMethod or a legacy BankAccount for the OutboundPayment. "destination_payment_method": null | "{{PAYMENTMETHOD_ID}}" | "{{BANK_ACCOUNT_ID}}", // The destination payment method. Either this or `destination_payment_method` // must be specified. Use this parameter if you do not need a reusable // PaymentMethod for the OutboundPayment. "destination_payment_method_data": null | { "type": "us_bank_account", "us_bank_account": { "routing_number": "12341234", "account_number": "0123456789", "account_holder_type": "individual" | "company" }, "billing_details": { // `name` must be specified for `us_bank_account` type "name": "Jenny Rosen", "phone": null | "{{String}}", "email": null | "{{String}}", "address": null | { "line1": null | "{{String}}", "line2": null | "{{String}}", "city": null | "{{String}}", "state": null | "{{String}}", "postal_code": null | "{{String}}", "country": null | "{{String}}" } } }, // Optional. To explicitly specify a network, override the `network` value of // `destination_payment_method_options` "destination_payment_method_options": { "us_bank_account": { "network": "ach" | "us_domestic_wire" } }, // Must be specified if passing in `destination_payment_method` and must match // the Customer to which the PaymentMethod is attached. Can also be optionally // passed in with `destination_payment_method_data`. The Customer represents // the recipient of the OutboundPayment. "customer": null | "{{CUSTOMER_ID}}", // An internal description for the OutboundPayment. "description": null | "Testing", // A descriptor for the OutboundPayment to send // to the network. For `ach` and `us_domestic_wire` networks, // this is the statement descriptor on the bank statement. // - `ach`: maximum 10 characters // - `us_domestic_wire`: maximum 140 characters "statement_descriptor": "payment_1", "end_user_details": { // When making requests on behalf of a user, set `end_user_details.present=true` // and pass the user's IP address. // If the request is on behalf of yourself (initiating transfers out of your // FinancialAccounts), `end_user_details.present` should be set to `false` "present": true | false, // You are required to collect the IP address of the creator of this transfer for // risk and compliance reasons. This will be used to help determine if this transfer // is authorized or should be blocked. "ip_address": "127.0.0.1" }, // We will not support updating OutboundPayments after creation. As such, the // metadata can only be set at creation time. "metadata": null | {{Hash}}, } ``` ### ACH le jour même > ACH le jour même existe actuellement en version bêta avec une disponibilité limitée, sous réserve de l’examen et de l’approbation de Stripe. Pour demander un accès, envoyez un e-mail à [treasury-support@stripe.com](mailto:treasury-support@stripe.com). > > Si vous n’y avez pas accès, les appels à l’API qui incluent des fonctionnalités ou des paramètres ACH le jour même renvoient une erreur. L’utilisation de la fonctionnalité ACH le jour même permet d’envoyer des fonds qui arrivent le jour ouvrable même si l’appel `OutboundPayment` aboutit avant l’[heure limite](https://docs.stripe.com/financial-accounts/connect/money-movement/timelines.md#bank-partner-timelines--outbound). Pour utiliser l’ACH le jour même, définissez le paramètre `destination_payment_method_options.us_bank_account.network` sur `ach` et le paramètre `destination_payment_method_options.us_bank_account.ach.submission` sur `same_day`. ### Virement bancaire : numéros de routage Pour les virements bancaires, certaines banques peuvent utiliser un numéro de routage distinct des virements ACH. Par conséquent, vous pourriez recevoir une erreur lors de la création du virement si le numéro de routage du moyen de paiement ne prend pas en charge les virements bancaires. Le cas échéant, vous devez ajouter un nouveau moyen de paiement avec le numéro de routage de votre banque. ### Virement bancaire : adresse du bénéficiaire Les virements bancaires nécessitent des métadonnées ACH ainsi que le nom du bénéficiaire et son adresse de facturation. L’adresse est celle du titulaire du compte recevant le virement et non l’adresse de sa banque. Lorsque vous saisissez l’adresse `billing_details.address` pour un moyen de paiement, tous les champs d’adresse doivent être renseignés. Si vous tentez d’effectuer un virement et que les champs de l’adresse `billing_details.address` sont incomplets, une erreur se produit. > Lors de l’envoi d’un virement à l’aide d’un `OutboundTransfer`, si vous ne remplissez pas les champs d’adresse, Stripe définit par défaut l’entité juridique du titulaire principal du compte Stripe. ### Conformité de la gestion de la paie de la NACHA La NACHA exige des initiateurs qu’ils identifient explicitement les paiements ACH destinés à la paie. Lors de l’envoi d’un OutboundPayment, définissez le paramètre `purpose` sur `payroll` pour assurer la conformité à cette exigence. ## Créer un OutboundPayment vers un compte financier Pour transférer des fonds d’un compte financier à un autre, appelez la méthode `POST /v1/treasury/outbound_payments` sur le compte d’origine et indiquez le compte de destination dans le paramètre `destination_payment_method_data`. Les deux comptes financiers doivent être associés à la même plateforme, mais ne peuvent pas être associés au même compte connecté. Pour transférer des fonds entre des comptes financiers associés au même compte connecté, utilisez un objet [OutboundTransfer](https://docs.stripe.com/financial-accounts/connect/moving-money/out-of/outbound-transfers.md). ```curl curl https://api.stripe.com/v1/treasury/outbound_payments \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d financial_account={{SOURCE_FINANCIAL_ACCOUNT_ID}} \ -d amount=2000 \ -d currency=usd \ -d statement_descriptor="Test outbound payment to FA" \ -d "destination_payment_method_data[type]"=financial_account \ -d "destination_payment_method_data[financial_account]"={{DESTINATION_FINANCIAL_ACCOUNT_ID}} ``` Le corps de votre requête doit être `x-www-form-urlencoded`, mais le JSON suivant définit les données que vous pouvez envoyer. #### JSON (commenté) ```json { // The source FinancialAccount. Funds are pulled from this account. "financial_account": "{{SOURCE_FINANCIAL_ACCOUNT_ID}}", // The amount to send. "amount": 1000, "currency": "usd", // The destination payment method. This parameter is the only way to // send an OutboundPayment through the `stripe` network. "destination_payment_method_data": { "type": "financial_account", "financial_account": "{{DESTINATION_FINANCIAL_ACCOUNT_ID}}" }, // Optional. The Customer represents the recipient of the OutboundPayment. "customer": null | "{{CUSTOMER_ID}}", // An internal description for the OutboundPayment. "description": null | "Testing", // A descriptor for the OutboundPayment to send to the `stripe` network. // Maximum 500 characters. "statement_descriptor": "Test outbound payment to FA", "end_user_details": { // When making requests on behalf of a user, set `end_user_details.present=true` // and pass the user's IP address. // If the request is on behalf of yourself (initiating transfers out of your // FinancialAccounts), `end_user_details.present` should be set to `false` "present": true | false, // You are required to collect the IP address of the creator of this transfer for // risk and compliance reasons. This will be used to help determine if this transfer // is authorized or should be blocked. "ip_address": "127.0.0.1" }, // We will not support updating OutboundPayments after creation. As such, the // metadata can only be set at creation time. "metadata": null | {{Hash}}, } ``` ## Récupérer un OutboundPayment Utilisez `GET /v1/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}` pour récupérer les informations de l’`OutboundPayment` avec l’ID associé. ```curl curl https://api.stripe.com/v1/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" ``` Sauf échec de l’opération, la réponse renvoie l’objet `OutboundPayment` et l’ID associé. Certains des paramètres de la réponse comportent des informations supplémentaires qui ne sont renvoyées que si vous les ajoutez comme valeurs au paramètre `expand[]`. Les champs que vous pouvez développer affichent le commentaire “Expandable”, comme illustré dans l’exemple de réponse suivant. Pour en savoir plus sur le développement des objets renvoyés, consultez la section [consacrée à ce sujet](https://docs.stripe.com/api/expanding_objects.md). #### JSON (commenté) ```json { "id": "{{OUTBOUND_PAYMENT_ID}}", "object": "outbound_payment", "livemode": true | false, "created": "{{Timestamp}}", "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // Expandable "amount": 1000, "currency": "usd", // Will only be set if `destination_payment_method` was used during the creation of // the OutboundPayment "destination_payment_method": "{{PAYMENT_METHOD_ID}}", "destination_payment_method_details": null | { "type": "us_bank_acount" | "financial_account", "billing_details": { "name": null | "{{String}}", "phone": null | "{{String}}", "email": null | "{{String}}", "address": null | { "line1": null | "{{String}}", "line2": null | "{{String}}", "city": null | "{{String}}", "state": null | "{{String}}", "postal_code": null | "{{String}}", "country": null | "{{String}}" } }, // Will only be set if type is `us_bank_account` "us_bank_account": { "network": "ach" | "us_domestic_wire", "routing_number": "12341234", "last4": "6789", "account_holder_type": "company", "bank_name": "Bank A", "fingerprint": "abc123" }, // Will only be set if type is `financial_account` "financial_account": { "id": "{{DESTINATION_FINANCIAL_ACCOUNT_ID}}", "network": "stripe" } }, // If the OutboundPayment hasn't yet been sent, this field is `true`, indicating // that the user may still cancel through the /cancel endpoint // (POST /v1/treasury/outbound_payments/obp_123/cancel) "cancelable": true | false, "description": "Testing", "statement_descriptor": "payment_1", // A unique, Stripe-hosted direct link to the regulatory receipt for the OutboundPayment "hosted_regulatory_receipt_url": "{{Url}}", // See the "OutboundPayment states" section below "status": "processing" | "canceled" | "failed" | "posted" | "returned", "status_transitions": { "processing_at": null | "{{Timestamp}}", "canceled_at": null | "{{Timestamp}}", "failed_at": null | "{{Timestamp}}", "posted_at": null | "{{Timestamp}}", "returned_at": null |"{{Timestamp}}" }, // The local date when funds are expected to arrive in the // destination account. // Set once the status is processing // Can change once set (for example, due to a partner delay) - Stripe will fire a // `treasury.outbound_payment.expected_arrival_date_updated` webhook when it does "expected_arrival_date": null | "{{Timestamp}}", // If the OutboundPayment has been returned, this field will be included with more // information about the return, including the Transaction that returns the funds. // See the "Handling Returned Funds" section below for more details on Returns. "returned_details": { "code": "account_closed" | "account_frozen" | "bank_account_restricted" | "bank_ownership_changed" | "could_not_process" | "invalid_account_number" | "incorrect_account_holder_name" | "invalid_currency" | "no_account" | "declined", // Generic fallback code // Human readable reason for the return. This message is geared towards the // end user, to help them determine next steps. "message": "The destination has been closed." | "The destination has been frozen." | "The destination bank account has restrictions on either the type or number of transfers allowed. This normally indicates that the bank account is a savings or other non-checking account." | "The destination bank account is no longer valid because its branch has changed ownership." | "The destination could not process this OutboundPayment." | "The destination bank account details on file are probably incorrect. The routing number seems correct, but the account number is invalid." | "The destination bank account details on file may be incorrect." | "The destination was unable to process this OutboundPayment because of its currency." | "The details of the destination may be incorrect." | "The destination has declined this OutboundPayment.", "transaction": "trxn_456" // Expandable }, // If available, this field shows network-specific tracking information. // Tracking details can appear anytime after the object is no longer cancelable. // Stripe sends the `treasury.outbound_payment.tracking_details_updated` event // when this field is updated. "tracking_details": null | { "type": "ach" | "us_domestic_wire", // Only set for ACH transfers "ach": null | { "trace_id": "12345678901234" }, // Only set for wire transfers "us_domestic_wire": null | { "imad": "20230101MMQFMPD1001234", "omad": "20230101MMQFMPD1002345" } } // Transaction representing balance impact of the OutboundPayment, created // synchronously with the OutboundPayment. // OutboundPayments always have a Transaction from creation (the funds are // held immediately). // If the OutboundPayment fails, the Transaction will be voided. // If the OutboundPayment is returned, its Transaction remains posted. Funds are // returned to the balance with returned_details.transaction "transaction": "{{TRANSACTION_ID}}", // Expandable "end_user_details": { "present": true, "ip_address": "127.0.0.1" }, "metadata": {} } ``` ## Annuler un OutboundPayment Utilisez `POST /v1/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}/cancel` pour annuler l’`OutboundPayment` avec l’ID associé. L’objet `OutboundPayment` inclut un paramètre `cancelable` dont la valeur booléenne indique si vous pouvez ou non annuler le transfert. Une fois que vous avez soumis un `OutboundPayment` au réseau, la valeur `cancelable` bascule sur `false` et cet endpoint envoie une erreur pour le transfert. ```curl curl -X POST https://api.stripe.com/v1/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}/cancel \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" ``` Sauf échec de l’opération, la réponse renvoie l’objet `OutboundPayment` dont le `status` est défini sur `canceled`. ```json { "id": "{{OUTBOUND_PAYMENT_ID}}", "object": "outbound_payment", "livemode": false, "created": 123456, "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", "amount": 1000, "currency": "usd", ... "status": "canceled", "status_transitions": { "processing_at": null, "canceled_at": 123456, "failed_at": null, "posted_at": null, "returned_at": null }, ... } ``` ## Répertorier les OutboundPayments Utilisez `GET /v1/treasury/outbound_payments` pour obtenir la liste des `OutboundPayments` du compte financier avec l’ID associé. Vous pouvez filtrer la liste en utilisant les paramètres de liste standard, par `status` ou `customer`. ``` { // Standard list parameters "limit", "starting_after", "ending_before", // Filter by status "status": "processing" | "canceled" | "failed" | "posted" | "returned", // Filter by FinancialAccount (Required) "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // Filter by Customer "customer": "{{CUSTOMER_ID}}", } ``` La requête suivante permet de récupérer les cinq derniers [objets OutboundPayment](https://docs.stripe.com/api/treasury/outbound_payments/object.md) du compte financier associé à la plateforme et payés à l’objet `Customer` identifié. ```curl curl -G https://api.stripe.com/v1/treasury/outbound_payments \ -u "<>:" \ -d financial_account="{{TREASURYFINANCIALACCOUNT_ID}}" \ -d limit=5 \ -d customer="{{CUSTOMER_ID}}" ``` ## États OutboundPayment Le tableau suivant détaille chaque état ainsi que les éventuels états de transition. | ÉTAT | DESCRIPTION | PEUT PASSER À L’ÉTAT | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | | `processing` | L’état initial de l’`OutboundPayment`. Les fonds sont attribués à une transaction en attente (mais sont toujours conservés sur le solde actuel). L’utilisateur peut annuler l’`OutboundPayment` tant que le paramètre `cancelable` est défini sur `true`. | `posted`, `canceled`, `failed` | | `failed` (définitif) | La confirmation de l’`OutboundPayment` a échoué. Stripe annule la transaction en cours et restitue les fonds à l’utilisateur. | S.O. | | `canceled` (définitif) | Un utilisateur a annulé l’`OutboundPayment` avant sa comptabilisation. Stripe annule la transaction en cours et restitue les fonds à l’utilisateur. | S.O. | | `posted` | L’`OutboundPayment` a été comptabilisé et les fonds ont été débités du compte. La transaction sous-jacente est comptabilisée. | `returned` | | `returned` (définitif) | L’`OutboundPayment` n’est pas parvenu à destination. Les fonds sont restitués à l’utilisateur au moyen d’une transaction (`returned_details[transaction]`). | S.O. | ## Tester les OutboundPayments Pour tester votre intégration de bout en bout, nous vous recommandons d’utiliser les [requêtes SetupIntent](https://docs.stripe.com/financial-accounts/connect/moving-money/working-with-bankaccount-objects.md#setupintents) en mode test pour créer un `PaymentMethod`. Transmettez ensuite ce `PaymentMethod` dans une requête de création d’objet `OutboundPayment` en utilisant le paramètre `destination_payment_method`. Stripe met également à votre disposition des numéros et des tokens `PaymentMethod` de test afin de déclencher des fonctionnalités spécifiques : - En transmettant un token `PaymentMethod` de test à `destination_payment_method` (pour les réseaux `ach` et `us_domestic_wire`) - Si vous transmettez un token `PaymentMethod` de test directement dans `destination_payment_method`, vous devez quand même transmettre un ID de client au paramètre `customer`. Pour des raisons pratiques, Stripe vous permet de transmettre n’importe quel client existant en mode test. Cela n’est pas possible en mode production : dans ce dernier, le `PaymentMethod` existant doit être associé à un `Customer`, et ce même ID de client doit être transmis au paramètre `customer`. - En transmettant les numéros de routage et de compte de test à `destination_payment_method_data[us_bank_account]` (pour les réseaux `ach` et `us_domestic_wire`). - En transmettant l’ID d’un compte financier de test appartenant à un compte de la plateforme à `destination_payment_method_data[financial_account]` (pour le réseau Stripe). Dans tous les cas, la réponse de l’objet `OutboundPayment` renvoie l’état processing. Stripe déclenche des [webhooks](https://docs.stripe.com/webhooks.md) pour les changements d’état pertinents, et la récupération de l’objet `OutboundPayment` après sa création renvoie l’état attendu. | CRÉE | DESTINATION_PAYMENT_METHOD (AVEC UN OBJET CUSTOMER DE TEST EXISTANT) | DESTINATION_PAYMENT_METHOD_DATA[US_BANK_ACCOUNT] | | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | Un `OutboundPayment` à l’état initial processing | `pm_usBankAccount_processing` | - `routing_number` : 110000000 - `account_number` : 000000000009 | | Un `OutboundPayment` qui passe à `posted` (de `processing`) | `pm_usBankAccount` | - `routing_number` : 110000000 - `account_number` : 000123456789 | | Un `OutboundPayment` qui passe à `posted` (de `processing`), en ajoutant un jour à la date `expected_arrival_date` d’origine | `pm_usBankAccount_expectedArrivalDateUpdated` | - `routing_number` : 110000000 - `account_number` : 000123457890 | | Un `OutboundPayment` qui passe à l’état `canceled` (de `processing`) | `pm_usBankAccount_canceledByUser` | - `routing_number` : 110000000 - `account_number` : 000000000123 | | Un `OutboundPayment` qui passe à `failed` (de `processing`) | `pm_usBankAccount_internalFailure` | - `routing_number` : 110000000 - `account_number` : 000000000234 | | Un `OutboundPayment` qui passe à `returned` en raison de la clôture du compte (de processing, après posted) | `pm_usBankAccount_accountClosed` | - `routing_number` : 110000000 - `account_number` : 000111111113 | | Un `OutboundPayment` qui passe à l’état returned en raison d’un compte inexistant (de processing, après posted) | `pm_usBankAccount_noAccount` | - `routing_number` : 110000000 - `account_number` : 000111111116 | | Un `OutboundPayment` qui passe à `returned` en raison d’un numéro de compte non valide (de processing, après posted) | `pm_usBankAccount_invalidAccountNumber` | - `routing_number` : 110000000 - `account_number` : 000111111119 | ### Endpoints d’aide au test des objets OutboundPayment Stripe fournit des endpoints qui vous aident à tester des `OutboundPayments` dans différents états. Utilisez les endpoints de test pour faire passer un `OutboundPayment` que vous avez créé directement à l’état `posted`, `failed` ou `returned`. - Utilisez l’[endpoint de publication de test](https://docs.stripe.com/api/treasury/outbound_payments/test_mode_post.md) pour faire passer l’état de l’objet `OutboundPayment` identifié de `processing` (en cours de traitement) à `posted` (publié). `POST /v1/test_helpers/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}/post` - Utilisez l’[endpoint d’échec de test](https://docs.stripe.com/api/treasury/outbound_payments/test_mode_fail.md) pour faire passer l’état de l’objet `OutboundPayment` identifié de `processing` (en cours de traitement) à `failed` (en échec). `POST /v1/test_helpers/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}/fail` - Utilisez l’[endpoint de renvoi de test](https://docs.stripe.com/api/treasury/outbound_payments/test_mode_return.md) pour faire passer l’état de l’objet `OutboundPayment` identifié de `processing` (en cours de traitement) à `returned` (renvoyé). `POST /v1/test_helpers/treasury/outbound_payments/{{OUTBOUND_PAYMENT_ID}}/return` Ces endpoints sont particulièrement utiles pour tester des scénarios d’erreur, tels que des restitutions, qui nécessiteraient autrement une action extérieure. Pour l’endpoint `return`, incluez le paramètre facultatif `returned_details.code` dans le corps de la requête pour indiquer le motif de retour du transfert. Si vous ne fournissez pas ce paramètre, le transfert affiche par défaut le code de retour `declined`. ```json { "returned_details": { "code": "account_closed" | "account_frozen" | "bank_account_restricted" | "bank_ownership_changed" | "could_not_process" | "invalid_account_number" | "incorrect_account_holder_name" | "invalid_currency" | "no_account" | "declined" } } ``` Nous fournissons également un [endpoint de modification de test](https://docs.stripe.com/api/treasury/outbound_payments/test_mode_update.md) pour simuler la publication des informations de suivi d’un `Outbound Payment` de test. Le champ `tracking_details` peut uniquement être défini pour les objets de test. Dans tous les cas, Stripe déclenche des [webhooks](https://docs.stripe.com/webhooks.md) pour chaque changement d’état pertinent. La récupération de l’objet `OutboundPayment` après le changement d’état renvoie l’état attendu. ## Webhooks OutboundPayment Stripe émet les événements `OutboundPayment` suivants à votre endpoint de [webhook](https://docs.stripe.com/webhooks.md) : - `treasury.outbound_payment.created` à la création de l’`OutboundPayment`. - `treasury.outbound_payment.{{new_status}}` lorsqu’un `OutboundPayment` change d’état. Il peut prendre les états suivants : - `treasury.outbound_payment.posted` - `treasury.outbound_payment.failed` - `treasury.outbound_payment.canceled` - `treasury.outbound_payment.returned` - `treasury.outbound_payment.expected_arrival_date_updated` en cas de modification de la date `expected_arrival_date` d’un `OutboundPayment`. - `treasury.outbound_payment.tracking_details_updated` lorsque les détails de suivi d’un `OutboundPayment` sont mis à jour.