---
title: "Simulate transfer state change"
method: GET
path: "/v1/simulation/transfers/{transferId}/{status}"
tags: ["simulation"]
---

# Simulate transfer state change

`GET /v1/simulation/transfers/{transferId}/{status}`

Changes the transfer status to the specified state. The available state transitions are:

- `processing` — from `incoming_payment_waiting`
- `funds_converted` — from `processing`. Refer to regional guides for special regional requirements.
- `outgoing_payment_sent` — from `funds_converted`
- `bounced_back` — from `outgoing_payment_sent`
- `funds_refunded` — from `bounced_back`.

{% admonition type="info" %}
Important notes
 - Simulation is not supported for email transfers.
 - Fund the transfer first before calling any simulation endpoints.
 - Even if funding moves the transfer to a processing state, you must still call the /processing simulation endpoint.
 - Although the simulation request may respond immediately, processing is asynchronous - wait at least 5 seconds between simulation calls.
{% /admonition %}

### Sandbox refund simulation behaviour {% #sandbox-refund %}

When simulating `funds_refunded`, a `transfers#refund` webhook is delivered with a simulated `refund_amount`. The amount is calculated as follows:

- **SWIFT payouts:** A random fee between 5-15% is deducted from the source amount. This is non-deterministic — each simulation produces a different refund amount. This is intended for testing your partial refund handling flow.
- **Non-SWIFT payouts:** The full source amount is refunded.

The simulated refund amount only applies to the webhook payload. Balances and the sandbox UI will always reflect the full refund amount regardless of payout method, so the webhook `refund_amount` may differ from what is shown in balances and the sandbox UI for SWIFT transfers.  
This simulation is not suitable for reconciliation testing between webhook amounts and balances.

## Path parameters

- `transferId` integer, required
- `status` 'processing' | 'funds_converted' | 'outgoing_payment_sent' | 'bounced_back' | 'funds_refunded', required

## Headers

- `X-External-Correlation-Id` string, uuid

## Response `200`

Transfer with updated status.

## Other responses

- `429` — Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header.

---

[API](https://skmtc.net/wise/apis/platform-api.md) · [All operations](https://skmtc.net/wise/apis/platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/wise/platform-api/revisions/4907a1d269ab/schema)
