---
title: "Create a transfer"
method: POST
path: "/v1/transfers"
tags: ["standard-transfer"]
---

# Create a transfer

`POST /v1/transfers`

Create a transfer to a recipient account based on a quote.

Some fields are conditionally required depending on the currency route and transfer amount. Always call the [transfer requirements](/api-reference/transfer/transferrequirementsvalidate) endpoint to determine which fields are needed, and submit values accordingly. These requirements may change over time.

#### Avoiding duplicate transfers

The `customerTransactionId` field is used to avoid duplicate transfer requests. If your initial call to create a transfer fails (error or timeout), retry the call using the same `customerTransactionId` value. Subsequent retry messages are treated as repeat messages and will not create duplicate transfers. Use a sensible retry limit, ideally with a back-off approach.

#### Payment Approvals

{% admonition type="warning" %}
Business Payment Approvals created on your wise.com settings page are not compatible with creating transfers over the API.
{% /admonition %}

If you use personal tokens and do not use client credentials, and if your business account has payment approvals, your application will receive this error when attempting to create a transfer: `Quote cannot be accepted with this request due to missing approval.`

Consider removing the payment rule if you are going to use the API to create transfers.

## Headers

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

## Request body

- object
  - `sourceAccount` integer — Refund recipient account ID
  - `targetAccount` integer, required — Recipient account ID. You can create multiple transfers to same recipient account
  - `quoteUuid` string, uuid, required — V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers
  - `customerTransactionId` string, uuid, required — Required to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts
  - `details` object
    - `reference` string — Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list
    - `transferPurpose` string — Conditionally required. For example when target currency is THB. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions
    - `transferPurposeSubTransferPurpose` string — Conditionally required. For example when target currency is CNY. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions
    - `transferPurposeInvoiceNumber` string — Conditionally required. For example when target currency is INR. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions
    - `sourceOfFunds` string — Conditionally required. For example when target currency is USD and transfer amount exceeds 80k. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions

## Response `200`

Transfer successfully created.

- Transfer
  - `id` integer — Transfer ID
  - `user` integer — Your user ID
  - `targetAccount` integer — Recipient account ID
  - `sourceAccount` integer, nullable — Refund recipient account ID
  - `quote` integer, nullable — V1 quote ID
  - `quoteUuid` string, uuid — V2 quote ID
  - `status` string — Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses.
  - `reference` string — Deprecated, use `details.reference` instead
  - `rate` number — Exchange rate value
  - `created` string, date-time — Timestamp when transfer was created
  - `business` integer, nullable — Your business profile ID
  - `transferRequest` integer, nullable — Deprecated
  - `details` object
    - `reference` string — Payment reference text
  - `hasActiveIssues` boolean — Are there any pending issues which stop executing the transfer?
  - `sourceCurrency` string — Source currency code
  - `sourceValue` number — Transfer amount in source currency
  - `targetCurrency` string — Target currency code
  - `targetValue` number — Transfer amount in target currency
  - `customerTransactionId` string, uuid — Unique identifier randomly generated per transfer request by the calling client
  - `payinSessionId` string, uuid — ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer

## 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/versions/4907a1d269ab/schema)
