Private preview
Received debits Private preview
Authorize and manage third-party-initiated debits.
You can authorize third parties to debit funds from a financial account. Any transaction initiated after this authorization generates a ReceivedDebit object on the financial account, detailing how funds were sent and from what account, where possible. Stripe supports the following types of externally-initiated debits:
| Debit type | Description |
|---|---|
| Card spending | Spending money on a card through Stripe Issuing |
| ACH debit 1 | Pulling money from a financial account into an external account using ACH debits |
| Direct debit 2 | Pulling money from a financial account into an external account using direct debits |
| Top-up | Pulling money from a platform’s financial account into that platform’s Stripe payments balance using top-ups. |
1 Available in the US only. Request access
2 Available in the UK only. Contact support to request access
Enable received debits
Receiving ACH or Bacs direct debits requires the money_manager.capabilities.received_debits.bank_accounts capability. You can request this capability when creating or updating a connected account, then complete any requirements that Stripe returns. For details, see money_manager capabilities.
Manage mandates
Available in:
When a third party establishes authorization to debit a financial account, Stripe creates a ReceivedDebitMandate and sends the v2.money_management.received_debit_mandate.created webhook event. The third party can then initiate a ReceivedDebit, unless the financial account owner cancels the mandate.
When you make API calls to manage mandates on behalf of a connected account, specify the connected account’s ID in the Stripe-Account header.
Retrieve a mandate
You can retrieve the mandate using the ID from the webhook event to review the authorization details and validate its legitimacy.
Command Line
cURL
The response includes information about the initiating party. If the third party initiates a debit associated with the mandate, you have one day to cancel the mandate before Stripe schedules the debit and sends the v2.money_management.received_debit.scheduled webhook event.
Example response
{
"id": "rdm_1234",
"object": "v2.money_management.received_debit_mandate",
"livemode": false,
"financial_account": "{{FINANCIAL_ACCOUNT_ID}}",
"type": "bank_transfer",
"currency": "gbp",
"bank_transfer": {
"network": "bacs",
"account_holder_name" : "Rocket Rides",
"reference": "R/1234",
"financial_address": "{{FINANCIAL_ADDRESS_ID}}"
},
"status": "active",
"status_transitions": {
"created_at": "2026-04-26T23:12:35.952Z",
"activated_at": "2026-04-26T23:12:35.952Z"
}
}
Any subsequent debits from the third party authorized by the mandate automatically generate a ReceivedDebit with scheduled status. The settles_at field indicates when Stripe expects the debit to arrive. Once the debit arrives, it will transition to either succeeded or failed.
Cancel a mandate
You can cancel a mandate to end debit authorization at any time. Canceling while an upcoming debit is still scheduled prevents that debit from completing and also prevents any future debits from the third party without a new mandate authorization.
Individual debits
You can’t cancel or decline a scheduled received debit without canceling the mandate.
Command Line
cURL
The response confirms the mandate is pending_cancellation. After the cancellation completes, Stripe sends the v2.money_management.received_debit_mandate.canceled webhook event signaling the transition to canceled.
List mandates
You can retrieve the set of mandates in place for a connected account. Use inline parameters, such as statuses=active, to filter the results.
Command Line
cURL
The result includes information about each mandate’s originator and when they created it, its status and type, and the financial account it applies to.
Example response
{
"data": [
{
"id": "rdm_test_61UxLhI8gPhKNsOwu16Ux87t0BE9ZVFsBHMMih6wSNPM",
"object": "v2.money_management.received_debit_mandate",
"bank_transfer": {
"account_holder_name": "Test Originator",
"financial_address": "{{FINANCIAL_ADDRESS_ID}}",
"network": "bacs",
"reference": "R/1234"
},
"created": "2026-06-30T09:14:00.475Z",
"currency": "gbp",
"financial_account": "{{FINANCIAL_ACCOUNT_ID}}",
"status": "active",
"status_details": null,
"status_transitions": {
"activated_at": "2026-06-30T09:14:00.475Z",
"canceled_at": null,
"created_at": "2026-06-30T09:14:00.475Z",
"expired_at": null,
"pending_cancellation_at": null
},
"type": "bank_transfer",
"livemode": false
}
]
}
Monitor received debits
Available in:
After you authorize a third party’s mandate to directly debit a financial account, you can review received debits as they occur and dispute them if necessary. Listen for events related to received debit activity and handle them accordingly.
Retrieve a received debit
Retrieve a received debit by its ID to review details such as the amount, status, and type of transfer.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Example response
List received debits
List received debits to review debit transactions for a financial account. Use parameters in the request to limit responses or filter results by created date. UK users can also filter by a specific received_debit_mandate.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Dispute a received debit
Regional considerations United Kingdom
The Debit Disputes API doesn’t support disputing a Bacs GBP direct debit. You must contact support to initiate these disputes.
You can dispute a ReceivedDebit within the dispute window specified in dispute_details.dispute_window_closes_at. Create a DebitDispute to initiate the dispute process.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Retrieve a debit dispute
Retrieve a debit dispute by its ID to check its status.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
List debit disputes
List debit disputes to review all disputes for a financial account. Use parameters in the request to limit responses or filter results by status or financial_account.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Test received debits
ReceivedDebit objects represent real direct debits initiated by a third party against a financial address. Because third parties initiate them, you can’t create them through the API in live mode.
Use the debit test helper to simulate a ReceivedDebit in a sandbox so you can verify that your integration handles incoming debits correctly. You can trigger a failed debit by making sure the financial account has an insufficient balance for the test payment.
If you simulate a Bacs GBP debit, the helper also creates a ReceivedDebitMandate. The simulated debit remains scheduled for approximately five minutes before transitioning to succeeded. While it’s scheduled, its settles_at field indicates the expected settlement time.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
A successful response confirms the simulation was accepted:
{
"object": "v2.money_management.financial_address_debit_simulation",
"status": "accepted",
"livemode": false
}
Webhooks
Listen for the following v2.money_management events to track and handle status changes related to received debits and associated disputes.
| Event | Description |
|---|---|
received_debit_mandate.created | Stripe creates a mandate after a third party establishes authorization to debit a financial account. |
received_debit_mandate.canceled | A received debit mandate is canceled, preventing further debits authorized by that mandate. |
received_debit.scheduled | A received debit is scheduled, but hasn’t debited the financial account yet. |
received_debit.pending | A received debit related to Issuing card spend is pending, but hasn’t debited the financial account yet. |
received_debit.succeeded | A received debit succeeds. |
received_debit.returned | A received debit is returned after it succeeds. |
received_debit.failed | A received debit fails. |
received_debit.canceled | A received debit related to Issuing card spend is canceled. |
received_debit.updated | A received debit is updated. |
debit_dispute.submitted | A debit dispute is submitted. |
debit_dispute.succeeded | A debit dispute succeeds. |
debit_dispute.failed | A debit dispute fails. |
