Transfer
A transfer: create, list, get or cancel one, and its receipts and payout information.
Operations
Every route this entity exposes. Each route links to its own reference on this page.
| Method | Route | SDK operation | Returns |
|---|---|---|---|
POST |
/transfers |
create |
Transfer successfully created |
GET |
/transfers |
list |
Returns an array of transfer objects, with or without an originator block depending on the type of each transfer |
GET |
/transfers/{transferId} |
load |
Returns the transfer object, with or without an originator block depending on the type of transfer |
GET |
/transfers/{transferId}/documents/noc |
load |
Non objection certificate in PDF format |
GET |
/transfers/{transferId}/invoices/bankingpartner |
load |
Returns payout information for the transfer |
GET |
/transfers/{transferId}/receipt.pdf |
load |
Transfer confirmation receipt in Wise branded PDF format |
GET |
/transfers/{transferId}/us-combined-receipt.pdf |
load |
The US Combined Receipt in Wise branded PDF format |
PUT |
/transfers/{transferId}/cancel |
update |
Returns the transfer object with status set to cancelled. If the original transfer was a third-party transfer, the response includes the originator object |
Examples
One example per SDK, generated from the API model. The argument names are the parameters and fields of this entity, and the values are placeholders. The examples are not compiled or executed.
Golang
Construct client as shown in the Golang setup, then call the operations:
transfers, err := client.Transfer(nil).List(nil, nil)
if err != nil {
panic(err)
}
fmt.Println(transfers)
transfer, err := client.Transfer(nil).Load(map[string]any{"id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(transfer)
created, err := client.Transfer(nil).Create(map[string]any{"customerTransactionId": "example", "quoteUuid": "example", "targetAccount": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(created)
updated, err := client.Transfer(nil).Update(map[string]any{"id": 1, "business": 1, "created": "example"}, nil)
if err != nil {
panic(err)
}
fmt.Println(updated)
Lua
Construct client as shown in the Lua setup, then call the operations:
local transfers, err = client:Transfer():list()
local transfer, err = client:Transfer():load({ id = 1 })
local created, err = client:Transfer():create({ customerTransactionId = "example", quoteUuid = "example", targetAccount = 1 })
local updated, err = client:Transfer():update({ id = 1, business = 1, created = "example" })
PHP
Construct client as shown in the PHP setup, then call the operations:
$transfers = $client->Transfer()->list();
$transfer = $client->Transfer()->load(["id" => 1]);
$created = $client->Transfer()->create(["customerTransactionId" => "example", "quoteUuid" => "example", "targetAccount" => 1]);
$updated = $client->Transfer()->update(["id" => 1, "business" => 1, "created" => "example"]);
Python
Construct client as shown in the Python setup, then call the operations:
transfers = client.Transfer().list()
transfer = client.Transfer().load({"id": 1})
created = client.Transfer().create({ "customerTransactionId": "example", "quoteUuid": "example", "targetAccount": 1 })
updated = client.Transfer().update({"id": 1, "business": 1, "created": "example"})
Ruby
Construct client as shown in the Ruby setup, then call the operations:
transfers = client.Transfer.list()
transfer = client.Transfer.load({ "id" => 1 })
created = client.Transfer.create({ "customerTransactionId" => "example", "quoteUuid" => "example", "targetAccount" => 1 })
updated = client.Transfer.update({ "id" => 1, "business" => 1, "created" => "example" })
TypeScript
Construct client as shown in the TypeScript setup, then call the operations:
const transfers = await client.Transfer().list()
const transfer = await client.Transfer().load({ id: 1 })
const created = await client.Transfer().create({ customerTransactionId: "example", quoteUuid: "example", targetAccount: 1 })
const updated = await client.Transfer().update({ id: 1, business: 1, created: "example" })
Fields
| Field | Type | Required | Description |
|---|---|---|---|
business |
one,integer,null |
No | Your business profile ID |
created |
string |
No | Timestamp when transfer was created |
customerTransactionId |
string |
No | Unique identifier randomly generated per transfer request by the calling client |
details |
object |
No | Details |
hasActiveIssues |
boolean |
No | Are there any pending issues which stop executing the transfer? |
id |
integer |
No | Transfer ID |
payinSessionId |
string |
No | ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer |
quote |
one,integer,null |
No | V1 quote ID |
quoteUuid |
string |
No | V2 quote ID |
rate |
number |
No | Exchange rate value |
reference |
string |
No | Deprecated, use details.reference instead |
sourceAccount |
one,integer,null |
No | Refund recipient account ID |
sourceCurrency |
string |
No | Source currency code |
sourceValue |
number |
No | Transfer amount in source currency |
status |
string |
No | Transfer current status. |
targetAccount |
integer |
No | Recipient account ID |
targetCurrency |
string |
No | Target currency code |
targetValue |
number |
No | Transfer amount in target currency |
transferRequest |
one,integer,null |
No | Deprecated |
user |
integer |
No | Your user ID |
create
POST /transfers
Operation ID: transferCreate.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
customerTransactionId |
string (uuid) |
Yes | Required to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts |
details |
object |
No | |
details.reference |
string |
No | Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See Business Payments Tips for a full list |
details.sourceOfFunds |
string |
No | Conditionally required. For example when target currency is USD and transfer amount exceeds 80k. See Transfer Requirements for conditions |
details.transferPurpose |
string |
No | Conditionally required. For example when target currency is THB. See Transfer Requirements for conditions |
details.transferPurposeInvoiceNumber |
string |
No | Conditionally required. For example when target currency is INR. See Transfer Requirements for conditions |
details.transferPurposeSubTransferPurpose |
string |
No | Conditionally required. For example when target currency is CNY. See Transfer Requirements for conditions |
quoteUuid |
string (uuid) |
Yes | V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers |
sourceAccount |
integer (int64) |
No | Refund recipient account ID |
targetAccount |
integer (int64) |
Yes | Recipient account ID. You can create multiple transfers to same recipient account |
Responses
200: Transfer successfully created
application/json
| Property | Type | Required | Description |
|---|---|---|---|
business |
integer,null (int64) |
No | Your business profile ID |
created |
string (date-time) |
No | Timestamp when transfer was created |
customerTransactionId |
string (uuid) |
No | Unique identifier randomly generated per transfer request by the calling client |
details |
object |
No | |
details.reference |
string |
No | Payment reference text |
hasActiveIssues |
boolean |
No | Are there any pending issues which stop executing the transfer? |
id |
integer (int64) |
No | Transfer ID |
payinSessionId |
string (uuid) |
No | ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer |
quote |
integer,null (int64) |
No | V1 quote ID |
quoteUuid |
string (uuid) |
No | V2 quote ID |
rate |
number |
No | Exchange rate value |
reference |
string |
No | Deprecated, use details.reference instead |
sourceAccount |
integer,null (int64) |
No | Refund recipient account ID |
sourceCurrency |
string |
No | Source currency code |
sourceValue |
number |
No | Transfer amount in source currency |
status |
string |
No | Transfer current status. See Transfer statuses for all possible statuses. |
targetAccount |
integer (int64) |
No | Recipient account ID |
targetCurrency |
string |
No | Target currency code |
targetValue |
number |
No | Transfer amount in target currency |
transferRequest |
integer,null |
No | Deprecated |
user |
integer (int64) |
No | Your user ID |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
list
GET /transfers
Operation ID: transferList.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profile |
query |
integer (int64) |
No | User profile ID. If parameter is omitted, defaults to user's personal profile |
status |
query |
string |
No | Comma separated list of one or more status codes to filter transfers. See Transfer statuses for complete list of statuses. |
sourceCurrency |
query |
string |
No | Source currency code |
targetCurrency |
query |
string |
No | Target currency code |
createdDateStart |
query |
string (date-time) |
No | Starting date to filter transfers, inclusive of the provided date |
createdDateEnd |
query |
string (date-time) |
No | Ending date to filter transfers, inclusive of the provided date |
limit |
query |
integer (int32) |
No | Maximum number of records to be returned in response |
offset |
query |
integer (int32) |
No | Starting record number |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Returns an array of transfer objects, with or without an originator block depending on the type of each transfer
application/json
The response is array of object or object.
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
load
GET /transfers/{transferId}
Operation ID: transferGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Returns the transfer object, with or without an originator block depending on the type of transfer
application/json
The response is object or object.
404: Transfer not found
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /transfers/{transferId}/documents/noc
Operation ID: transferNocGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Non objection certificate in PDF format
application/pdf
The response is string (binary).
404: Transfer not found
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /transfers/{transferId}/invoices/bankingpartner
Operation ID: transferPayoutInfoGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Returns payout information for the transfer
application/json
| Property | Type | Required | Description |
|---|---|---|---|
bankingPartnerName |
string |
No | The name of the sending bank to the recipient's bank |
bankingPartnerReference |
string |
No | The reference used by the partner bank to identify and track the transfer |
deliveryMode |
string |
No | The delivery mode for the payment (for example SWIFT) |
mt103 |
string,null |
No | The MT103 of the transfer, if available |
processorName |
string |
No | The legal entity that processed the transfer on behalf of the customer |
Example response:
{
"bankingPartnerName": "Global Bank Corp.",
"bankingPartnerReference": "ABCD1234",
"deliveryMode": "SWIFT",
"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",
"processorName": "Acme Bank Ltd."
}
404: Transfer not found (this error can also occur if querying the endpoint before the transfer has finished processing)
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /transfers/{transferId}/receipt.pdf
Operation ID: transferReceiptGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Transfer confirmation receipt in Wise branded PDF format
application/pdf
The response is string (binary).
404: Transfer not found
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /transfers/{transferId}/us-combined-receipt.pdf
Operation ID: transferUsCombinedReceiptGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: The US Combined Receipt in Wise branded PDF format
application/pdf
The response is string (binary).
404: Transfer not found
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
update
PUT /transfers/{transferId}/cancel
Operation ID: transferCancel.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The transfer ID |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Returns the transfer object with status set to cancelled. If the original transfer was a third-party transfer, the response includes the originator object
application/json
The response is object or object.
404: Transfer not found
409: Transfer cannot be cancelled because it is in a non-cancellable state or has other restrictions. The error response includes the code transfer.cancellation.not.allowed
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.