---
title: "Simulate a refund event in Sandbox"
method: POST
path: "/sandbox/transfer/refund/simulate"
tags: ["plaid"]
---

# Simulate a refund event in Sandbox

`POST /sandbox/transfer/refund/simulate`

Use the `/sandbox/transfer/refund/simulate` endpoint to simulate a refund event in the Sandbox environment.  Note that while an event will be simulated and will appear when using endpoints such as `/transfer/event/sync` or `/transfer/event/list`, no transactions will actually take place and funds will not move between accounts, even within the Sandbox.

## Request body

- SandboxTransferRefundSimulateRequest — Defines the request schema for `/sandbox/transfer/refund/simulate`
  - `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` string, required — Plaid's unique identifier for a refund.
  - `test_clock_id` string, nullable — Plaid's unique identifier for a test clock. If provided, the event to be simulated is created at the `virtual_time` on the provided `test_clock`.
  - `event_type` string, required — The asynchronous event to be simulated. May be: `refund.posted`, `refund.settled`, `refund.failed`, or `refund.returned`. An error will be returned if the event type is incompatible with the current refund status. Compatible status --> event type transitions include: `refund.pending` --> `refund.failed` `refund.pending` --> `refund.posted` `refund.posted` --> `refund.returned` `refund.posted` --> `refund.settled` `refund.posted` events can only be simulated if the refunded transfer has been transitioned to settled. This mimics the ordering of events in Production.
  - `failure_reason` TransferFailure, nullable — The failure reason if the event type for a transfer is `"failed"` or `"returned"`. Null value otherwise.
    - `failure_code` string, nullable — The failure code, e.g. `R01`. A failure code will be provided if and only if the transfer status is `returned`. See [ACH return codes](https://plaid.com/docs/errors/transfer/#ach-return-codes) for a full listing of ACH return codes and [RTP/RfP error codes](https://plaid.com/docs/errors/transfer/#rtprfp-error-codes) for RTP error codes.
    - `ach_return_code` string, nullable — The ACH return code, e.g. `R01`. A return code will be provided if and only if the transfer status is `returned`. For a full listing of ACH return codes, see [Transfer errors](https://plaid.com/docs/errors/transfer/#ach-return-codes).
    - `description` string — A human-readable description of the reason for the failure or reversal.
  - `webhook` string, url — The webhook URL to which a `TRANSFER_EVENTS_UPDATE` webhook should be sent.

## Response `200`

OK

- SandboxTransferRefundSimulateResponse — Defines the response schema for `/sandbox/transfer/refund/simulate`
  - `request_id` string, required — A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

## Other responses

- `default` — Error response

---

[API](https://skmtc.net/plaid/apis/the-plaid-api.md) · [All operations](https://skmtc.net/plaid/apis/the-plaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/plaid/the-plaid-api/versions/64c4514ea59b/schema)
