Transfer

A transfer is a payment order to recipient account based on a quote.

Once created, a transfer needs to be funded within the next fourteen days. Otherwise, it will be automatically canceled.

Endpoints
POST/v1/transfers
POST/v1/transfer-requirements
GET/v1/transfers
GET/v1/transfers/{{transferId}}/receipt.pdf
GET/v1/transfers/{{transferId}}/invoices/bankingpartner
GET/v2/transfers/{{transferId}}/invoices/bankingpartner
Fields
idinteger

Transfer ID

userinteger

Your user ID

targetAccountinteger

Recipient account ID

sourceAccountinteger

Refund recipient account ID

quoteinteger

v1 quote ID (where applicable)

quoteUuidtext

v2 quote ID

statustext
referencetext

Deprecated, use details.reference instead

ratedecimal

Exchange rate value

createdtimestamp

Timestamp when transfer was created

businessinteger

Your business profile ID

transferRequestinteger

Deprecated

details.referencetext

Payment reference text

hasActiveIssuesboolean

Are there any pending issues which stop executing the transfer?

sourceCurrencytext

Source currency code

sourceValuedecimal

Transfer amount in source currency

targetCurrencytext

Target currency code

targetValuedecimal

Transfer amount in target currency

customerTransactionIduuid

Unique identifier randomly generated per transfer request by the calling client

originatorgroup

Data block to capture payment originator details

originator.legalEntityTypetext

Payment originator legal type

originator.referencetext

Unique customer ID in your system

originator.name.givenNametext

Payment originator first name

originator.name.middleNamestext array

Payment originator middle name(s)

originator.name.familyNametext

Payment originator family name

originator.name.patronymicNametext

Payment originator patronymic name

originator.name.fullNametext

Payment originator full legal name

originator.dateOfBirthyyyy-mm-dd

Payment originator date of birth

originator.businessRegistrationCodetext

Payment originator business registry or incorporation number

originator.address.firstLinetext

Payment originator address first line

originator.address.citytext

Payment originator address city

originator.address.stateCodetext

Payment originator address state code

originator.address.countryCodetext

Payment originator address first line

originator.address.postCodetext

Payment originator address zip code

Standard Transfer Object
{
"id": 16521632,
"user": 4342275,
"targetAccount": 8692237,
"sourceAccount": null,
"quote": 657171,
"status": "cancelled",
"reference": "reference text",
"rate": 0.89,
"created": "2017-11-24 10:47:49",
"business": null,
"transferRequest": null,
"details": {
"reference": "Testing"
},
"hasActiveIssues": false,
"sourceCurrency": "EUR",
"sourceValue": 0,
"targetCurrency": "GBP",
"targetValue": 150,
"customerTransactionId": "54a6bc09-cef9-49a8-9041-f1f0c654cd88"
}
Originator Transfer Object
{
"id": 16521632,
"user": 4342275,
"targetAccount": 8692237,
"sourceAccount": null,
"quote": null,
"quoteUuid": "8fa9be20-ba43-4b15-abbb-9424e1481050",
"status": "cancelled",
"reference": "reference text",
"rate": 0.89,
"created": "2017-11-24 10:47:49",
"business": null,
"transferRequest": null,
"details": {
"reference": "Testing"
},
"originator": {
"name": {
"givenName": "John",
"middleNames": [
"Ryan"
],
"familyName": "Godspeed",
"patronymicName": null,
"fullName": "John Godspeed"
},
"dateOfBirth": "1977-07-01",
"reference": "CST-2991992",
"legalEntityType": "PRIVATE",
"businessRegistrationCode": null,
"address": {
"firstLine": "Salu tee 14",
"city": "Tallinn",
"stateCode": null,
"countryCode": "EE",
"postCode": "12112"
}
},
"hasActiveIssues": false,
"sourceCurrency": "EUR",
"sourceValue": 0,
"targetCurrency": "GBP",
"targetValue": 150,
"customerTransactionId": "54a6bc09-cef9-49a8-9041-f1f0c654cd88"
}

POST /v1/transfers

Request
sourceAccount (optional)integer

Refund recipient account ID

targetAccountinteger

Recipient account ID. You can create multiple transfers to same recipient account.

quoteUuidtext

V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers.

customerTransactionIduuid

This is required to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts.

details.referencetext

Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. Business Payments Tips article has a full list.

details.transferPurpose (conditionally required)text

For example when target currency is THB. See more about conditions at Transfers.Requirements

details.transferPurposeSubTransferPurpose (conditionally required)text

For example when target currency is CNY. See more about conditions at Transfers.Requirements

details.transferPurposeInvoiceNumber (conditionally required)text

For example when target currency is INR. See more about conditions at Transfers.Requirements

details.sourceOfFunds (conditionally required)text

For example when target currency is USD and transfer amount exceeds 80k. See more about conditions at Transfers.Requirements

There are two options to deal with conditionally required fields:

  • Always call transfer-requirements endpoint and submit values only if indicated so.
  • Always provide values for these fields based on a dynamically retrieved list (transfer-requirements endpoint). It is possible these fields change over time so hard coding the options does create some risk of issues. Contact api@wise.com if you have questions about this property, especially if considering hardcoding a value.

Response

Returns a standard transfer object.

Avoiding duplicate transfers

We use customerTransactionId field to avoid duplicate transfer requests. If your initial call to create a transfer fails (error or timeout) then you should retry the call using the same value in the customerTransactionId field that you used in the original call. This way we can treat subsequent retry messages as repeat messages and will not create duplicate transfers to your account should one have succeeded before. You should not retry indefinitely but use a sensible limit, perhaps with a back-off approach.

Example Request
curl -X POST https://api.sandbox.transferwise.tech/v1/transfers \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"sourceAccount": <refund recipient account id>,
"targetAccount": <recipient account id>,
"quoteUuid": <quote id>,
"customerTransactionId": "<the unique identifier you generated for the transfer attempt>",
"details" : {
"reference" : "to my friend",
"transferPurpose": "verification.transfers.purpose.pay.bills",
"transferPurposeSubTransferPurpose": "verification.sub.transfers.purpose.pay.interpretation.service"
"sourceOfFunds": "verification.source.of.funds.other"
}
}'

POST /v2/profiles/{{profileId}}/third-party-transfers

This is very similar to Create transfers endpoint, but please note these differences:

  • Originator datablock is additionally required
  • Depending on the legal entity type of the originator (PRIVATE or BUSINESS), the required fields vary. Please refer the two sample request examples on the right.
  • OriginalTransferId field is being used instead of customerTransactionId
Request
targetAccountinteger

Recipient account ID. You can create multiple transfers to same recipient account.

quotetext

V2 quote ID. You can only create one transfer per one quote.
You cannot use same quote ID to create multiple transfers.

originalTransferIdtext

Unique transfer ID in your system. We use this field also to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts. You can only submit one transfer with same originalTransferId.

details.reference (optional)text

Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. Business Payments Tips article has a full list.

originatorgroup

Data block to capture payment originator details.

originator.legalEntityTypetext

PRIVATE or BUSINESS. Payment originator legal type.

originator.referencetext

Unique customer ID in your system. This allows us to uniquely identify each originator. Required.

originator.nametext

Data block to capture the originator name details.
Depends on the type of legal entity (PRIVATE or BUSINESS), the required fields and inputs are different.

originator.name.givenNametext

Payment originator first name. Required if legalEntityType = PRIVATE.

originator.name.middleNames (optional)text array

Payment originator middle name(s). Used only if legalEntityType = PRIVATE.

originator.name.familyNametext

Payment originator family name. Required if legalEntityType = PRIVATE.

originator.name.patronymicName (optional)text

Payment originator patronymic name. Used only if legalEntityType = PRIVATE.

originator.name.fullNametext

Payment originator full legal name. Required if legalEntityType = BUSINESS.

originator.dateOfBirthyyyy-mm-dd

Payment originator date of birth. Required if legalEntityType = PRIVATE.

originator.businessRegistrationCodetext

Payment originator business registry number / incorporation number. Required if legalEntityType = BUSINESS.

originator.address.firstLinetext

Payment originator address first line. Required

originator.address.citytext

Payment originator address city. Required

originator.address.stateCodetext

Payment originator address state code. Required if address country code in (US, CA, BR, AU). See Countries and states

originator.address.countryCodetext

Payment originator address first line. Required

originator.address.postCode (optional)text

Originator address zip code.

Response

Returns an originator transfer object.

You need to save the transfer ID for tracking its status later via webhooks.

Avoiding duplicate transfers

We use originalTransferId field to avoid duplicate transfer requests. When your first call fails (error or timeout) then you should use the same value in originalTransferId field that you used in the original call when you are submitting a retry message. This way we can treat subsequent retry messages as repeat messages and will not create duplicate transfers to your account.

Example Request - Personal
curl -X POST https://api.sandbox.transferwise.tech/v2/profiles/{{profileId}}/third-party-transfers \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"targetAccount": <recipient account id>,
"quote": "<quote id>",
"originalTransferId": "<unique transfer id in your system>",
"details" : {
"reference" : "Ski trip"
},
"originator" : {
"legalEntityType" : "PRIVATE",
"reference" : "<unique customer id in your system>",
"name" : {
"givenName": "John",
"middleNames": ["Ryan"],
"familyName": "Godspeed"
},
"dateOfBirth": "1977-07-01",
"address" : {
"firstLine": "Salu tee 100, Apt 4B",
"city": "Tallinn",
"countryCode": "EE",
"postCode": "12112"
}
}
}'
Example Request - Business
curl -X POST https://api.sandbox.transferwise.tech/v2/profiles/{{profileId}}/third-party-transfers \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"targetAccount": <recipient account id>,
"quote": "<quote id>",
"originalTransferId": "<unique transfer id in your system>",
"details" : {
"reference" : "Payment for invoice 22092"
},
"originator" : {
"legalEntityType" : "BUSINESS",
"reference" : "<originator customer id in your system>",
"name" : {
"fullName": "Hot Air Balloon Services Ltd"
},
"businessRegistrationCode": "1999212",
"address" : {
"firstLine": "Aiandi tee 1431",
"city": "Tallinn",
"countryCode": "EE",
"postCode": "12112"
}
}
}'

POST /v1/profiles/{{profileId}}/partner-licence-transfers

This is very similar to Create transfers endpoint, but please note these differences:

  • originator datablock is additionally required
Request
sourceAccount (optional)integer

Refund recipient account ID.

targetAccountinteger

Recipient account ID. You can create multiple transfers to same recipient account.

quotetext

V2 quote ID. You can only create one transfer per one quote.
You cannot use same quote ID to create multiple transfers.

customerTransactionIdtext

Unique transfer ID in your system. We use this field also to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts. You can only submit one transfer with same customerTransactionId.

details.reference (optional)text

Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. Business Payments Tips article has a full list.

originatorgroup

Data block to capture payment originator details.

originator.legalEntityTypetext

PRIVATE or BUSINESS. Payment originator legal type.

originator.externalIdtext

Unique customer ID in your system. This allows us to uniquely identify each originator. Required.

originator.name.givenNametext

Payment originator first name. Required if legalEntityType = PRIVATE.

originator.name.middleNamestext array

Payment originator middle name(s). Used only if legalEntityType = PRIVATE. Optional

originator.name.familyNametext

Payment originator family name. Required if legalEntityType = PRIVATE.

originator.name.patronymicNametext

Payment originator patronymic name. Used only if legalEntityType = PRIVATE. Optional

originator.name.fullNametext

Payment originator full legal name. Required if legalEntityType = BUSINESS.

originator.dateOfBirthyyyy-mm-dd

Payment originator date of birth. Required if legalEntityType = PRIVATE.

originator.businessRegistrationCodetext

Payment originator business registry number / incorporation number. Required if legalEntityType = BUSINESS.

originator.address.firstLinetext

Payment originator address first line. Required

originator.address.citytext

Payment originator address city. Required

originator.address.stateCodetext

Payment originator address state code. Required if address country code in (US, CA, BR, AU). See Countries and states

originator.address.countryCodetext

Payment originator address first line. Required

originator.address.postCodetext

Originator address zip code. Optional

Response

Returns an originator transfer object.

You need to save the transfer ID for tracking its status later via webhooks.

Avoiding duplicate transfers

We use customerTransactionId field to avoid duplicate transfer requests. When your first call fails (error or timeout) then you should use the same value in customerTransactionId field that you used in the original call when you are submitting a retry message. This way we can treat subsequent retry messages as repeat messages and will not create duplicate transfers to your account.

Example Request - Personal
curl -X POST https://api.sandbox.transferwise.tech/v1/profiles/{{profileId}}/partner-licence-transfers \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"sourceAccount": <refund recipient account id>,
"targetAccount": <recipient account id>,
"quote": "<quote id>",
"customerTransactionId": "<unique transfer id in your system>",
"details" : {
"reference" : "Ski trip"
},
"originator" : {
"legalEntityType" : "PRIVATE",
"reference" : "<unique customer id in your system>",
"name" : {
"givenName": "John",
"middleNames": ["Ryan"],
"familyName": "Godspeed"
},
"dateOfBirth": "1977-07-01",
"address" : {
"firstLine": "Salu tee 100, Apt 4B",
"city": "Tallinn",
"countryCode": "EE",
"postCode": "12112"
}
}
}'
Example Request - Business
curl -X POST https://api.sandbox.transferwise.tech/v1/profiles/{{profileId}}/partner-licence-transfers \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"sourceAccount": <refund recipient account id>,
"targetAccount": <recipient account id>,
"quote": "<quote id>",
"customerTransactionId": "<unique transfer id in your system>",
"details" : {
"reference" : "Payment for invoice 22092"
},
"originator" : {
"legalEntityType" : "BUSINESS",
"reference" : "<originator customer id in your system>",
"name" : {
"fullName": "Hot Air Balloon Services Ltd"
},
"businessRegistrationCode": "1999212",
"address" : {
"firstLine": "Aiandi tee 1431",
"city": "Tallinn",
"countryCode": "EE",
"postCode": "12112"
}
}
}'

POST /v1/transfer-requirements

Almost every region has its own specific nuances when it comes to the nitty gritty details of domestic payment systems and money transfer regulations. The maximum allowed length of reference text is a good example. The US payment system, ACH, supports 10 characters only, but transfers within Mexico allow up to 100 characters, and so on.

The same is true for requirements arising from Anti Money Laundering regulations adopted in different countries. Depending on the chosen currencies and the amount to be transferred, either in one go or cumulatively over time, Wise may require more details about the customer's source of funds or transfer purpose, for example.

The endpoint /transfer-requirements exposes all these specific requirements based on the sender, the specific quote and selected target recipient account.

To make sure that processing of your customer's transfers does not get delayed because of missing details, we highly recommend to verify the transfer requirements before submitting any transfer and collecting the data we request from the user using the returned dynamic form.

Transfer Requirement Options

Transfer Referencestring

reference - General reference or memo field for a transfer. Mandatory for some transfers, required will be true. It is important to use the minLength, maxLength and validationRegexp in your interface to minimize errors.

Transfer Purposeselect

transferPurpose - A select list of values to help understand the purpose of the transfer. Often required when transfers are over a certain size or through a particular route. As an option is selected, you must refresh requirements, as additional fields could become required.

Sub Transfer Purposeselect

transferPurposeSubTransferPurpose - A secondary select list of values to further help understand the purpose of the transfer. As an option is selected, you must refresh requirements, as additional fields could become required.

Source of Fundsselect

sourceOfFunds - A select list of values to help understand the source of the funds. As an option is selected, you must refresh requirements, as additional fields could become required.

Transfer Natureselect

transferNature - A select list of values to help understand the reason for the transfer, only for routes to and from BRL. Note that transfer nature needs to be added to a quote through creation or update in order to correctly calculate the IOF tax.

Transfer Purpose Invoice Numbertext

transferPurposeInvoiceNumber - Mandatory for trade related transfers, required will be shown as true for these cases. It is important to use minLength, maxLength and validationRegexp in your interface to minimize errors.

As transfer requirements are part of a dynamic form, the list of options can change. The list above are the most common requirements and when they apply, but others may be included. Always design your integration to work dynamically with this endpoint.

Transfers to-BRL or from-BRL require a transfer nature (see: transferNature). Transfer nature has some special handling:

  • Be aware when rendering this field that labels might be present more than once under the same key.
  • The chosen value must be added when creating a quote or via an update of an existing quote.
  • Failure to include a transfer nature as instructed will prevent the transfer from being sent.

Request

  1. Prepare the request body to create transfer object first. Now post this request body to the transfer-requirements endpoint to figure out if there are any other required fields.

  2. Analyze the returned list of fields. Our example includes reference, sourceOfFunds and transferPurpose fields. Field 'reference' is optional in this example. Fields 'sourceOfFunds' and 'transferPurpose' are required and both have refreshRequirementsOnChange=true which indicates that there could be additional fields required depending on the selected value.

  3. In our example you will have to POST request to/v1/transfer-requirements` second time as well with values set for 'transferPurpose' and 'sourceOfFunds'. So in case you set sourceOfFunds = 'verification.source.of.funds.other' then another text field called "sourceOfFundsOther" is also required where you need to specify the details in free format.

  4. Once you get to the point where you have provided values for all fields which have refreshRequirementsOnChange=true then you have complete set of fields to compose a valid request to create a transfer object. For example this is a valid request to create a transfer.

Response
typetext

"transfer"

fields[n].nametext

Field description

fields[n].group[n].keytext

Key is name of the field you should include in the JSON

fields[n].group[n].nametext

Field description

fields[n].group[n].typetext

Display type of field (e.g. text, select, etc)

fields[n].group[n].refreshRequirementsOnChangeboolean

Tells you whether you should call POST transfer-requirements once the field value is set to discover required lower level fields.

fields[n].group[n].requiredboolean

Indicates if the field is mandatory or not

fields[n].group[n].displayFormattext

Display format pattern.

fields[n].group[n].exampletext

Example value.

fields[n].group[n].minLengthinteger

Min valid length of field value.

fields[n].group[n].maxLengthinteger

Max valid length of field value.

fields[n].group[n].validationRegexptext

Regexp validation pattern.

fields[n].group[n].validationAsynctext

Validator URL and parameter name you should use when submitting the value for validation

fields[n].group[n].valuesAllowed[n].keytext

List of allowed values. Value key

fields[n].group[n].valuesAllowed[n].nametext

List of allowed values. Value name.

Example Request
curl -X POST https://api.sandbox.transferwise.tech/v1/transfer-requirements \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"targetAccount": <recipient account id>,
"quoteUuid": <quote id>,
"details": {
"reference": "good times",
"sourceOfFunds": "verification.source.of.funds.other",
"sourceOfFundsOther": "Trust funds"
},
"customerTransactionId": "6D9188CF-FA59-44C3-87A2-4506CE9C1EA3"
}'
Example Response
[
{
"type": "transfer",
"fields": [
{
"name": "Transfer reference",
"group": [
{
"key": "reference",
"name": "Transfer reference",
"type": "text",
"refreshRequirementsOnChange": false,
"required": false,
"displayFormat": null,
"example": null,
"minLength": null,
"maxLength": 10,
"validationRegexp": "[a-zA-Z0-9- ]*",
"validationAsync": null,
"valuesAllowed": null
}
]
},
{
"name": "Transfer purpose",
"group": [
{
"key": "transferPurpose",
"name": "Transfer purpose",
"type": "select",
"refreshRequirementsOnChange": true,
"required": true,
"displayFormat": null,
"example": null,
"minLength": null,
"maxLength": null,
"validationRegexp": null,
"validationAsync": null,
"valuesAllowed": [
{
"key": "verification.transfers.purpose.purchase.property",
"name": "Buying property abroad"
},
{
"key": "verification.transfers.purpose.pay.bills",
"name": "Rent or other property expenses"
},
{
"key": "verification.transfers.purpose.mortgage",
"name": "Mortgage payment"
},
{
"key": "verification.transfers.purpose.pay.tuition",
"name": "Tuition fees or studying expenses"
},
{
"key": "verification.transfers.purpose.send.to.family",
"name": "Sending money home to family"
},
{
"key": "verification.transfers.purpose.living.expenses",
"name": "General monthly living expenses"
},
{
"key": "verification.transfers.purpose.other",
"name": "Other"
}
]
},
{
"key": "transferPurposeSubTransferPurpose",
"name": "Please select a specific reason for your transfer",
"type": "select",
"refreshRequirementsOnChange": true,
"required": true,
"displayFormat": null,
"example": null,
"minLength": null,
"maxLength": null,
"validationRegexp": null,
"validationAsync": null,
"valuesAllowed": [
{
"key": "INTERPRETATION_SERVICE",
"name": "Interpretation service"
},
{
"key": "TRANSLATION_SERVICE",
"name": "Translation service"
},
{
"key": "HUMAN_RESOURCE_SERVICE",
"name": "Human resource service"
},
{
"key": "ESTATE_AGENCY_SERVICE",
"name": "Estate agency service"
},
{
"key": "SOFTWARE_DEVELOPMENT_SERVICE",
"name": "Software development service"
},
{
"key": "WEB_DESIGN_OR_DEVELOPMENT_SERVICE",
"name": "Web design or development service"
},
{
"key": "DRAFTING_LEGAL_SERVICE",
"name": "Drafting legal service"
},
{
"key": "LEGAL_RELATED_CERTIFICATION_SERVICE",
"name": "Legal related certification service"
},
{
"key": "ACCOUNTING_SERVICE",
"name": "Accounting service"
},
{
"key": "TAX_SERVICE",
"name": "Tax service"
},
{
"key": "ARCHITECTURAL_DECORATION_DESIGN_SERVICE",
"name": "Architectural decoration design service"
},
{
"key": "ADVERTISING_SERVICE",
"name": "Advertising service"
},
{
"key": "MARKET_RESEARCH_SERVICE",
"name": "Market research service"
},
{
"key": "EXHIBITION_BOOTH_SERVICE",
"name": "Exhibition booth service"
}
]
}
]
},
{
"name": "Source of funds",
"group": [
{
"key": "sourceOfFunds",
"name": "Source of funds",
"type": "select",
"refreshRequirementsOnChange": true,
"required": true,
"displayFormat": null,
"example": null,
"minLength": null,
"maxLength": null,
"validationRegexp": null,
"validationAsync": null,
"valuesAllowed": [
{
"key": "verification.source.of.funds.salary",
"name": "Salary"
},
{
"key": "verification.source.of.funds.investment",
"name": "Investments (stocks, properties, etc.)"
},
{
"key": "verification.source.of.funds.inheritance",
"name": "Inheritance"
},
{
"key": "verification.source.of.funds.loan",
"name": "Loan"
},
{
"key": "verification.source.of.funds.other",
"name": "Other"
}
]
}
]
},
{
"name": "Brazilian regulation requires you to provide a reason behind your transaction.",
"group": [
{
"key": "transferNature",
"name": "Please select an option that best describes the reason for your transfer",
"type": "select",
"refreshRequirementsOnChange": false,
"required": true,
"displayFormat": null,
"example": null,
"minLength": null,
"maxLength": null,
"validationRegexp": null,
"validationAsync": null,
"valuesAllowed": [
{
"key": "CHARITABLE_DONATIONS",
"name": "Donations to friends or family"
},
{
"key": "MOVING_MONEY_BETWEEN_OWN_ACCOUNTS",
"name": "Moving money between own accounts"
},
{
"key": "INTERNATIONAL_TRAVEL",
"name": "Tourism service"
},
{
"key": "BUY_OR_SELL_COMPUTER_AND_INFORMATION_SERVICE",
"name": "Technology service"
},
{
"key": "BUY_OR_SELL_OTHER_SERVICE",
"name": "Other service"
},
{
"key": "BUY_OR_SELL_MERCHANDISE",
"name": "Purchase of goods"
},
{
"key": "BUY_OR_SELL_OTHER_SERVICE",
"name": "Property rental"
},
{
"key": "OTHER",
"name": "Property purchase or sale"
},
{
"key": "CHARITABLE_DONATIONS",
"name": "Transfer without compensation"
}
]
}
]
}
]
}
]

GET /v1/transfers/{{transferId}}

Get transfer info by ID. To receive dynamic updates as the state of the transfer changes, please see our documentation on webhooks.

Response

Returns a transfer object, with or without an originator block depending on the type of transfer.

Sample Request
curl -X GET https://api.sandbox.transferwise.tech/v1/transfers/{{transferId}} \
-H 'Authorization: Bearer <your api token>'

POST /v3/profiles/{{profileId}}/transfers/{{transferId}}/payments

This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you. Please read more about implementing SCA below.
Learn more

This API call is the final step for executing payouts when using a balance with Wise. Upon calling the endpoint, Wise will begin the processing of the transfer, depending on the status of funds.

There is currently one type of funding that can be completed:

  • BALANCE - Funds are pulled from a multi-currency account held with Wise.

If funding from BALANCE, and your multi-currency account does not have the required funds to complete the action, then this call will fail with an "insufficient funds" error. Once funds are added and available, you must call this endpoint again.

{{profileId}} refers to the profile that created the transfer. It can be either your personal profile ID, or your business profile ID.

Request
typetext

"BALANCE"
This indicates the type of funding you would like to apply to the transfer.

partnerReference (conditionally required)string

The transaction/payment identifier in your system, uniquely identifies the transfer in your platform. This is required for the Cross Currency Bulk Settlement model.

Response
typetext

"BALANCE"
This indicates the type of funding you would like to apply to the transfer.

statustext

"COMPLETED" or "REJECTED"

errorCodetext

Failure reason. For example "balance.payment-option-unavailable".

Example Request
curl -X POST https://api.sandbox.transferwise.tech/v3/profiles/{{profileId}}/transfers/{{transferId}}/payments \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-d '{
"type": "BALANCE"
}'
Example Request - Balance - Completed
{
"type": "BALANCE",
"status": "COMPLETED",
"errorCode": null
}
Example Request - Balance - Insufficient Funds
{
"type": "BALANCE",
"status": "REJECTED",
"errorCode": "transfer.insufficient_funds"
}

GET /v1/transfers

Get the list of transfers for given user's profile (defaults to user's personal profile).

You can add query parameters to specify user's profile (personal or business), time period and/or payment status.

For example, you can query:

  • all failed payments created since last week
  • all completed payments created since yesterday
Request Parameters
profileinteger

User profile ID. If parameter is omitted, defaults to user's personal profile.

statustext

Comma separated list of one or more status codes to filter transfers. See Track transfer status for complete list of statuses.

sourceCurrencytext

Source currency code

targetCurrencytext

Target currency code

createdDateStartyyyy-mm-dd't'hh:mm:ss.sss'z'

Starting date to filter transfers, inclusive of the provided date.

createdDateEndyyyy-mm-dd't'hh:mm:ss.sss'z'

Ending date to filter transfers, inclusive of the provided date.

limitinteger

Maximum number of records to be returned in response

offsetinteger

Starting record number

Response

Returns an array of transfer objects, with or without an originator block depending on the type of each transfer.

Example Request
curl -X GET https://api.sandbox.transferwise.tech/v1/transfers
?profile={{profileId}}
&status=funds_refunded
&offset=0
&limit=100
&createdDateStart=2018-12-15
&createdDateEnd=2018-12-30 \
-H 'Authorization: Bearer <your api token>'

PUT /v1/transfers/{{transferId}}/cancel

Transfers may be cancelled up until the Transfer is sent. Cancellation is final - it can not be undone.

Response

Returns a transfer object, with or without an originator block depending on the type of the transfer.

Request Example
curl -X PUT https://api.sandbox.transferwise.tech/v1/transfers/{{transferId}}/cancel \
-H 'Authorization: Bearer <your api token>'

GET /v1/transfers/{{transferId}}/receipt.pdf

Download transfer confirmation receipt in PDF format for transfers that are in status outgoing_payment_sent.

Response

Transfer confirmation receipt in Wise branded PDF format.

Request Example
curl -X GET https://api.sandbox.transferwise.tech/v1/transfers/{{transferId}}/receipt.pdf \
-H 'Authorization: Bearer <your api token>'

GET /v1/transfers/{{transferId}}/payments

Fetch completed payments used to fund the transfer.

In most cases there should only be a single payment associated with the transfer. There are rare occasions that a transfer can be funded with multiple payment methods and when this occurs the first completed payment method would be used to calculate the fees provided on the quote.

Response

Response Parameters
idinteger

Transfer ID

methodstring

The payment method used to pay for the transfer

pricingVariant (optional)string

The qualifier that allows to apply different pricing policy within the same payment method. Often the value might be the payment method itself

amountdecimal

Transfer source amount

currencystring

Transfer source currency

timeCreatedtimestamp

Date of when payment was created

timeUpdatedtimestamp

Date of when payment was updated

Request Example
curl -X GET https://api.sandbox.transferwise.tech/v1/transfers/{{transferId}}/payments \
-H 'Authorization: Bearer <your api token>'
Response Example
[
{
"id": 50000000,
"method": "BANK_TRANSFER",
"pricingVariant": null,
"amount": 1000.00,
"currency": "GBP",
"timeCreated": "2020-01-01T12:30:15.000Z",
"timeUpdated": "2020-01-01T12:30:15.000Z"
}
]

To utilize this endpoint, you will need to replace transferID with the specific transfer's unique identifier. The transfer endpoint will return the details of the transfer, including the processorName, deliveryMode, bankingPartnerReference, bankingPartnerName, and mt103. This information will enable your recipients to track the transfer with their bank. It may take up to 3 days to get the correct information through this endpoint, as some partners don't share the information until 3 days later.

GET /v2/transfers/{{transferId}}/invoices/bankingpartner

Fetch banking reference information for transfers that are in outgoing_payment_sent status, enabling you to track transfers with the transfer recipient’s bank.

Request Parameters
transferIDtext

The unique identifier of the transfer.

Response

Response Parameters
processorNamestring

The legal entity that processed the transfer on behalf of the customer.

deliveryModestring

The delivery mode for the payment (e.g., SWIFT).

bankingPartnerReferencestring

The reference used by the partner bank to identify and track the transfer.

bankingPartnerNamestring

The name of the sending bank to the recipient's bank.

mt103string

The MT103 of the transfer, if available.

Request Example
curl -X GET https://api.sandbox.transferwise.tech/v2/transfers/{{transferId}}/invoices/bankingpartner \
-H 'Authorization: Bearer <your api token>'
Response Example
{
"processorName": "Acme Bank Ltd.",
"deliveryMode": "SWIFT",
"bankingPartnerReference": "ABCD1234",
"bankingPartnerName": "Global Bank Corp."
"mt103": "{1:F01XXXXGBXXAXXX0000000000}{2:I103XXXXGBXXXXXXN}{3:{108:1234567}{111:001}{121:00000000-0000-0000-0000-000000000000}}{4:\n:20:1234567\n:23B:CRED\n:32A:221212USD12345,\n:33B:USD12345,\n:50K:/11111111\nSOME COMPANY INC.\n1 SOME STREET MIAMI 33132 US\n:59:/GB00000000000000\nCOMPANY NAME LTD\nUK LONDON 1234 GB\n:70:REFERENCE\n:71A:OUR\n:71G:USD11,\n-}\n"
}