Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Received debits


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 typeDescription
Card spendingSpending money on a card through Stripe Issuing
ACH debit 1Pulling money from a financial account into an external account using ACH debits
Direct debit 2Pulling money from a financial account into an external account using direct debits
Top-upPulling 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.

EventDescription
received_debit_mandate.createdStripe creates a mandate after a third party establishes authorization to debit a financial account.
received_debit_mandate.canceledA received debit mandate is canceled, preventing further debits authorized by that mandate.
received_debit.scheduledA received debit is scheduled, but hasn’t debited the financial account yet.
received_debit.pendingA received debit related to Issuing card spend is pending, but hasn’t debited the financial account yet.
received_debit.succeededA received debit succeeds.
received_debit.returnedA received debit is returned after it succeeds.
received_debit.failedA received debit fails.
received_debit.canceledA received debit related to Issuing card spend is canceled.
received_debit.updatedA received debit is updated.
debit_dispute.submittedA debit dispute is submitted.
debit_dispute.succeededA debit dispute succeeds.
debit_dispute.failedA debit dispute fails.
Last verified 2026-09-24

Is this helpful?