Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Payments and Funding
  • Auth
  • Balance
  • Identity
  • Signal
  • Transfer
  • 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
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:
    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
    string
    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
    string
    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
    requiredstring
    The ID of the transfer to refund.
    amount
    requiredstring
    The amount of the refund (decimal string with two digits of precision e.g. "10.00").
    idempotency_key
    requiredstring
    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
    object
    Represents a refund within the Transfers API.
    id
    string
    Plaid’s unique identifier for a refund.
    transfer_id
    string
    The ID of the transfer to refund.
    amount
    string
    The amount of the refund (decimal string with two digits of precision e.g. "10.00").
    status
    string
    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
    nullableobject
    The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise.
    failure_code
    nullablestring
    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
    deprecatednullablestring
    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
    string
    A human-readable description of the reason for the failure or reversal.
    ledger_id
    nullablestring
    Plaid’s unique identifier for a Plaid Ledger Balance.
    created
    string
    The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z

    Format: date-time
    network_trace_id
    nullablestring
    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
    string
    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
    string
    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
    string
    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
    requiredstring
    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
    string
    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
    string
    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
    string
    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
    requiredstring
    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
    object
    Represents a refund within the Transfers API.
    id
    string
    Plaid’s unique identifier for a refund.
    transfer_id
    string
    The ID of the transfer to refund.
    amount
    string
    The amount of the refund (decimal string with two digits of precision e.g. "10.00").
    status
    string
    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
    nullableobject
    The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise.
    failure_code
    nullablestring
    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
    deprecatednullablestring
    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
    string
    A human-readable description of the reason for the failure or reversal.
    ledger_id
    nullablestring
    Plaid’s unique identifier for a Plaid Ledger Balance.
    created
    string
    The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z

    Format: date-time
    network_trace_id
    nullablestring
    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
    string
    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