Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Payments and Funding
  • Auth
  • Balance
  • Identity
  • Signal
  • Transfer
    • Initiating Transfers
    • Reading Transfers
    • Account Linking
    • Recurring Transfers
    • Refunds
    • Platform Payments
    • Plaid Ledger
    • Program Metrics
    • Sandbox
  • Investments Move
  • Payment Initiation
  • Virtual Accounts
Financial Insights
  • Transactions
  • Investments
  • Liabilities
  • Enrich
KYC/AML and anti-fraud
  • Look up Dashboard users
  • Identity Verification
  • Monitor
  • Beacon (beta)
Instant Onboarding
  • Layer
Credit and Underwriting
  • Consumer Report (by Plaid Check)
  • Assets
  • Statements
  • Income
Fundamentals
  • Items
  • Accounts
  • Institutions
  • Sandbox
  • Link
  • Users
  • Consent
  • Network
  • OAuth
Partnerships
  • Processor tokens
  • Processor partners
  • Reseller partners
Plaid logo
Docs
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
  • Why is /transactions/sync/ better than /get?
  • What is Remember Me?
  • What's the difference between an Item and an access token?
Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
Plaid.com
Log in
Get API Keys
Open nav

Transfer refunds

API reference for refunding transfers

For how-to guidance, see the transfer refunds documentation.

Refunds
/transfer/refund/createCreate a refund for a transfer
/transfer/refund/cancelCancel a refund
/transfer/refund/getRetrieve information about a refund

/transfer/refund/create

Create a refund

Use the /transfer/refund/create endpoint to create a refund for a transfer. A transfer can be refunded if the transfer was initiated in the past 180 days.
Refunds come out of the available balance of the ledger used for the original debit transfer. If there are not enough funds in the available balance to cover the refund amount, the refund will be rejected. You can create a refund at any time. Plaid does not impose any hold time on refunds.

transfer/refund/create

Request fields

client_id
stringstring
Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
secret
stringstring
Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
transfer_id
requiredstringrequired, string
The ID of the transfer to refund.
amount
requiredstringrequired, string
The amount of the refund (decimal string with two digits of precision e.g. "10.00").
idempotency_key
requiredstringrequired, string
A random key provided by the client, per unique refund. Maximum of 50 characters.
The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. For example, if a request to create a refund fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single refund is created.


Max length: 50
Select Language
1const request: TransferRefundCreateRequest = {
2 transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9',
3 amount: '12.34',
4 idempotency_key: 'VEK2ea3X6LKywsc8J6pg',
5};
6
7try {
8 const response = await client.transferRefundCreate(request);
9} catch (error) {
10 // handle error
11}
transfer/refund/create

Response fields and example

refund
objectobject
Represents a refund within the Transfers API.
id
stringstring
Plaid’s unique identifier for a refund.
transfer_id
stringstring
The ID of the transfer to refund.
amount
stringstring
The amount of the refund (decimal string with two digits of precision e.g. "10.00").
status
stringstring
The status of the refund.
pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned.


Possible values: pending, posted, cancelled, failed, settled, returned
failure_reason
nullableobjectnullable, object
The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise.
failure_code
nullablestringnullable, string
The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes.
ach_return_code
deprecatednullablestringdeprecated, nullable, string
The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure_code, which encompasses non-ACH failure codes as well.
description
stringstring
A human-readable description of the reason for the failure or reversal.
ledger_id
nullablestringnullable, string
Plaid’s unique identifier for a Plaid Ledger Balance.
created
stringstring
The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z

Format: date-time
network_trace_id
nullablestringnullable, string
The trace identifier for the transfer based on its network. This will only be set after the transfer has posted.
For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number.
request_id
stringstring
A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
1{
2 "refund": {
3 "id": "667af684-9ee1-4f5f-862a-633ec4c545cc",
4 "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9",
5 "amount": "12.34",
6 "status": "pending",
7 "created": "2020-08-06T17:27:15Z",
8 "failure_reason": null,
9 "network_trace_id": null
10 },
11 "request_id": "saKrIBuEB9qJZno"
12}
Was this helpful?

/transfer/refund/cancel

Cancel a refund

Use the /transfer/refund/cancel endpoint to cancel a refund. A refund is eligible for cancellation if it has not yet been submitted to the payment network.

transfer/refund/cancel

Request fields

client_id
stringstring
Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
secret
stringstring
Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
refund_id
requiredstringrequired, string
Plaid’s unique identifier for a refund.
Select Language
1const request: TransferRefundCancelRequest = {
2 refund_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9',
3};
4
5try {
6 const response = await client.transferRefundCancel(request);
7} catch (error) {
8 // handle error
9}
transfer/refund/cancel

Response fields and example

request_id
stringstring
A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
1{
2 "request_id": "saKrIBuEB9qJZno"
3}
Was this helpful?

/transfer/refund/get

Retrieve a refund

The /transfer/refund/get endpoint fetches information about the refund corresponding to the given refund_id.

transfer/refund/get

Request fields

client_id
stringstring
Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
secret
stringstring
Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
refund_id
requiredstringrequired, string
Plaid’s unique identifier for a refund.
Select Language
1const request: TransferRefundGetRequest = {
2 refund_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9',
3};
4
5try {
6 const response = await client.transferRefundGet(request);
7} catch (error) {
8 // handle error
9}
transfer/refund/get

Response fields and example

refund
objectobject
Represents a refund within the Transfers API.
id
stringstring
Plaid’s unique identifier for a refund.
transfer_id
stringstring
The ID of the transfer to refund.
amount
stringstring
The amount of the refund (decimal string with two digits of precision e.g. "10.00").
status
stringstring
The status of the refund.
pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned.


Possible values: pending, posted, cancelled, failed, settled, returned
failure_reason
nullableobjectnullable, object
The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise.
failure_code
nullablestringnullable, string
The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes.
ach_return_code
deprecatednullablestringdeprecated, nullable, string
The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure_code, which encompasses non-ACH failure codes as well.
description
stringstring
A human-readable description of the reason for the failure or reversal.
ledger_id
nullablestringnullable, string
Plaid’s unique identifier for a Plaid Ledger Balance.
created
stringstring
The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z

Format: date-time
network_trace_id
nullablestringnullable, string
The trace identifier for the transfer based on its network. This will only be set after the transfer has posted.
For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number.
request_id
stringstring
A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
1{
2 "refund": {
3 "id": "667af684-9ee1-4f5f-862a-633ec4c545cc",
4 "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9",
5 "amount": "12.34",
6 "status": "pending",
7 "created": "2020-08-06T17:27:15Z",
8 "failure_reason": null,
9 "network_trace_id": null
10 },
11 "request_id": "saKrIBuEB9qJZno"
12}
Was this helpful?
Developer community
GitHub
GitHub
Stack Overflow
Stack Overflow
YouTube
YouTube
Discord
Discord