# Create a transfer

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 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.

Endpoint: POST /v1/transfers
Security: UserToken, PersonalToken

## Request fields (application/json):

  - `sourceAccount` (integer)
    Refund recipient account ID

  - `targetAccount` (integer, required)
    Recipient account ID. You can create multiple transfers to same recipient account

  - `quoteUuid` (string, 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, required)
    Required to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts

  - `details` (object)

  - `details.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

  - `details.transferPurpose` (string)
    Conditionally required. For example when target currency is THB. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions

  - `details.transferPurposeSubTransferPurpose` (string)
    Conditionally required. For example when target currency is CNY. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions

  - `details.transferPurposeInvoiceNumber` (string)
    Conditionally required. For example when target currency is INR. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions

  - `details.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 fields (application/json):

  - `id` (integer)
    Transfer ID
    Example: 16521632

  - `user` (integer)
    Your user ID
    Example: 4342275

  - `targetAccount` (integer)
    Recipient account ID
    Example: 8692237

  - `sourceAccount` (integer,null)
    Refund recipient account ID

  - `quote` (integer,null)
    V1 quote ID

  - `quoteUuid` (string)
    V2 quote ID
    Example: "8fa9be20-ba43-4b15-abbb-9424e1481050"

  - `status` (string)
    Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses.
    Example: "incoming_payment_waiting"

  - `rate` (number)
    Exchange rate value
    Example: 0.89

  - `created` (string)
    Timestamp when transfer was created
    Example: "2017-11-24 10:47:49"

  - `business` (integer,null)
    Your business profile ID

  - `details` (object)

  - `details.reference` (string)
    Payment reference text
    Example: "Testing"

  - `hasActiveIssues` (boolean)
    Are there any pending issues which stop executing the transfer?

  - `sourceCurrency` (string)
    Source currency code
    Example: "EUR"

  - `sourceValue` (number)
    Transfer amount in source currency

  - `targetCurrency` (string)
    Target currency code
    Example: "GBP"

  - `targetValue` (number)
    Transfer amount in target currency
    Example: 150

  - `customerTransactionId` (string)
    Unique identifier randomly generated per transfer request by the calling client
    Example: "54a6bc09-cef9-49a8-9041-f1f0c654cd88"

  - `payinSessionId` (string)
    ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer
    Example: "23330542-8e9e-419f-95eb-312b880f92ad"

  - `reference` (string)
    Deprecated, use details.reference instead
    Example: "reference text"

  - `transferRequest` (integer,null)
    Deprecated


