Simulation
Sandbox simulations: transfers, cards, KYC reviews, top-ups and incoming payments.
Operations
Every route this entity exposes. Each route links to its own reference on this page.
| Method | Route | SDK operation | Returns |
|---|---|---|---|
POST |
/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/authorisation |
create |
Simulated card authorisation |
POST |
/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/clearing |
create |
Simulated transaction clearing result |
POST |
/simulation/spend/profiles/{profileId}/cards/{cardToken}/production |
create |
Card production state changed successfully |
POST |
/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/reversal |
create |
Simulated transaction reversal result |
POST |
/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/add |
create |
Requirement added successfully. No content returned |
POST |
/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/submit |
create |
Requirement submitted successfully. No content returned |
POST |
/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/verify |
create |
KYC review verified successfully. No content returned |
POST |
/simulation/profiles/{profileId}/bank-transactions/import |
create |
Bank transaction imported successfully. No content returned |
POST |
/simulation/profiles/{profileId}/swift-in |
create |
Swift payment simulated successfully |
POST |
/simulation/profiles/{profileId}/verifications |
create |
Verification state changed successfully. No content returned |
POST |
/simulation/transfers/{transferId}/payout-failure |
create |
Successful initiation of payout failure |
POST |
/simulation/balance/topup |
create |
Simulated balance top-up result |
POST |
/simulation/sanction-cases |
create |
Sanction case successfully closed |
POST |
/simulation/settlement/funds |
create |
Funds received simulation completed successfully |
POST |
/simulation/verify-profile |
create |
Verification state changed successfully. No content returned |
GET |
/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions |
list |
List of simulated card transactions |
GET |
/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements |
list |
List of KYC review requirements |
GET |
/simulation/transfers/{transferId}/{status} |
load |
Transfer with updated status |
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:
simulations, err := client.Simulation(nil).List(map[string]any{"card_token": "example", "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(simulations)
simulation, err := client.Simulation(nil).Load(map[string]any{"status": "example", "transfer_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(simulation)
created, err := client.Simulation(nil).Create(map[string]any{"transfer_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(created)
Lua
Construct client as shown in the Lua setup, then call the operations:
local simulations, err = client:Simulation():list({ card_token = "example", profile_id = 1 })
local simulation, err = client:Simulation():load({ status = "example", transfer_id = 1 })
local created, err = client:Simulation():create({ transfer_id = 1 })
PHP
Construct client as shown in the PHP setup, then call the operations:
$simulations = $client->Simulation()->list(["card_token" => "example", "profile_id" => 1]);
$simulation = $client->Simulation()->load(["status" => "example", "transfer_id" => 1]);
$created = $client->Simulation()->create(["transfer_id" => 1]);
Python
Construct client as shown in the Python setup, then call the operations:
simulations = client.Simulation().list({"card_token": "example", "profile_id": 1})
simulation = client.Simulation().load({"status": "example", "transfer_id": 1})
created = client.Simulation().create({ "transfer_id": 1 })
Ruby
Construct client as shown in the Ruby setup, then call the operations:
simulations = client.Simulation.list({ "card_token" => "example", "profile_id" => 1 })
simulation = client.Simulation.load({ "status" => "example", "transfer_id" => 1 })
created = client.Simulation.create({ "transfer_id" => 1 })
TypeScript
Construct client as shown in the TypeScript setup, then call the operations:
const simulations = await client.Simulation().list({ card_token: "example", profile_id: 1 })
const simulation = await client.Simulation().load({ status: "example", transfer_id: 1 })
const created = await client.Simulation().create({ transfer_id: 1 })
Fields
| Field | Type | Required | Description |
|---|---|---|---|
business |
string |
No | Business |
created |
string |
No | Created |
creationTime |
number |
No | Time when the card transaction was created. |
description |
one,string,null |
No | Description of the KYC review item. |
details |
object |
No | Details |
failure_reason_code |
string |
No | Failure reason code to trigger for payout failure. |
hasActiveIssues |
boolean |
No | Has Active Issues |
id |
string |
No | Id |
key |
string |
No | KYC review item key. |
quote |
integer |
No | Quote |
rate |
number |
No | Rate |
reference |
string |
No | Reference |
sourceAccount |
string |
No | Source Account |
sourceCurrency |
string |
No | Source Currency |
sourceValue |
integer |
No | Source Value |
state |
string |
No | State of the KYC review item. |
status |
string |
No | Status |
targetAccount |
integer |
No | Target Account |
targetCurrency |
string |
No | Target Currency |
targetValue |
number |
No | Target Value |
transactionId |
integer |
No | ID of the transaction. |
transferRequest |
string |
No | Transfer Request |
user |
integer |
No | User |
wise_id |
integer |
No | Wise Id |
create
POST /simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/authorisation
Operation ID: simulationCardTransactionAuthorisation.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
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 |
|---|---|---|---|
amount |
object |
No | |
amount.currency |
string |
No | Currency code. |
amount.value |
number |
No | Transaction amount. |
cardNumber |
string |
No | Primary Account Number of the card. |
mcc |
integer (int32) |
No | Merchant category code. |
pos |
string |
No | The point-of-sale used for the transaction. - For POS transactions: CHIP_AND_PIN - For e-commerce transactions: E_COMMERCE_NO_3DS - For ATM transactions: CHIP_AND_PIN - For refund transactions: CHIP_AND_PIN or E_COMMERCE_NO_3DS |
transactionType |
string |
No | The type of the transaction. - For POS and e-commerce transactions: GOODS_AND_SERVICES - For ATM transactions: CASH_WITHDRAWAL - For refund transactions: REFUND |
Responses
200: Simulated card authorisation
application/json
| Property | Type | Required | Description |
|---|---|---|---|
error |
string,null |
No | An error returned by the transaction, if it exists. |
reference |
object |
No | The transaction reference. This can be used in a following request for reversal and clearing. |
Example response:
{
"error": null,
"reference": {
"authorizationIdResponse": "123646",
"requestMti": "0200",
"transaction": {
"acquirer": {
"acceptorIdCode": "CARD ACCEPTOR",
"acceptorTerminalId": "TERMID01",
"city": "CITY NAME",
"country": "GB",
"forwardingInstitutionId": "400050",
"institutionId": "430010",
"merchantCategoryCode": 5499,
"name": "ACQUIRER NAME"
},
"card": {
"cardStatus": "ACTIVE",
"country": "SG",
"currencies": [
"SGD"
],
"cvv1": "123",
"cvv2": "789",
"expiration": [
2029,
7
],
"icvv": "456",
"pan": "4242424242424242",
"pin": "1234",
"profileId": 2,
"schemeName": "VISA",
"sequenceNumber": 1,
"token": "59123122-223d-45f9-b840-0ad4a4f80937",
"userId": 5
},
"pos": {
"acceptsOnlinePins": true,
"hasChip": true,
"maxPinLength": 12,
"supports3ds": false,
"type": "CHIP_AND_PIN"
},
"retrievalReferenceNum": "230805363054",
"schemeTransactionId": "932290252416153",
"stan": "363054",
"transactionStartTime": 1667541087.0476434
}
}
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/clearing
Operation ID: simulationCardTransactionClearing.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
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 |
|---|---|---|---|
amount |
object |
No | |
amount.currency |
string |
No | Currency code. |
amount.value |
number |
No | Transaction amount. |
ref |
object |
No | The transaction reference. This can be obtained from a previous authorisation request. |
transactionType |
string |
No | The type of the transaction. Use the same transaction type from the previous authorisation request. |
Example request body:
{
"amount": {
"currency": "SGD",
"value": 10
},
"ref": {
"authorizationIdResponse": "123646",
"requestMti": "0200",
"transaction": {
"acquirer": {
"acceptorIdCode": "CARD ACCEPTOR",
"acceptorTerminalId": "TERMID01",
"city": "CITY NAME",
"country": "GB",
"forwardingInstitutionId": "400050",
"institutionId": "430010",
"merchantCategoryCode": 5499,
"name": "ACQUIRER NAME"
},
"card": {
"cardStatus": "ACTIVE",
"country": "SG",
"currencies": [
"SGD"
],
"cvv1": "123",
"cvv2": "789",
"expiration": [
2029,
7
],
"icvv": "456",
"pan": "4242424242424242",
"pin": "1234",
"profileId": 2,
"schemeName": "VISA",
"sequenceNumber": 1,
"token": "59123122-223d-45f9-b840-0ad4a4f80937",
"userId": 5
},
"pos": {
"acceptsOnlinePins": true,
"hasChip": true,
"maxPinLength": 12,
"supports3ds": false,
"type": "CHIP_AND_PIN"
},
"retrievalReferenceNum": "230805363054",
"schemeTransactionId": "932290252416153",
"stan": "363054",
"transactionStartTime": 1667541087.0476434
}
},
"transactionType": "GOODS_AND_SERVICES"
}
Responses
200: Simulated transaction clearing result
application/json
| Property | Type | Required | Description |
|---|---|---|---|
error |
string,null |
No | An error returned by the transaction, if it exists. |
reference |
object |
No | The transaction reference. |
Example response:
{
"error": null,
"reference": {
"authorizationIdResponse": "123646",
"requestMti": "0200",
"transaction": {
"acquirer": {
"acceptorIdCode": "CARD ACCEPTOR",
"acceptorTerminalId": "TERMID01",
"city": "CITY NAME",
"country": "GB",
"forwardingInstitutionId": "400050",
"institutionId": "430010",
"merchantCategoryCode": 5499,
"name": "ACQUIRER NAME"
},
"card": {
"cardStatus": "ACTIVE",
"country": "SG",
"currencies": [
"SGD"
],
"cvv1": "123",
"cvv2": "789",
"expiration": [
2029,
7
],
"icvv": "456",
"pan": "4242424242424242",
"pin": "1234",
"profileId": 2,
"schemeName": "VISA",
"sequenceNumber": 1,
"token": "59123122-223d-45f9-b840-0ad4a4f80937",
"userId": 5
},
"pos": {
"acceptsOnlinePins": true,
"hasChip": true,
"maxPinLength": 12,
"supports3ds": false,
"type": "CHIP_AND_PIN"
},
"retrievalReferenceNum": "230805363054",
"schemeTransactionId": "932290252416153",
"stan": "363054",
"transactionStartTime": 1667541087.0476434
}
}
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/spend/profiles/{profileId}/cards/{cardToken}/production
Operation ID: simulationCardProduction.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
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 |
|---|---|---|---|
errorCode |
string |
No | The error code to simulate. This field should be set only if the status is PRODUCTION_ERROR. |
status |
enum: PRODUCED, PRODUCTION_ERROR |
No | The intended production status of the card. |
Example request body:
{
"errorCode": "PRT_NOT_REACHABLE",
"status": "PRODUCTION_ERROR"
}
Responses
200: Card production state changed successfully
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/reversal
Operation ID: simulationCardTransactionReversal.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
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 |
|---|---|---|---|
amount |
object |
No | |
amount.currency |
string |
No | Currency code. |
amount.value |
number |
No | Transaction amount. Set to 0 for full reversal, or the intended final value for partial reversal. |
ref |
object |
No | The transaction reference. This can be obtained from a previous authorisation request. |
transactionType |
string |
No | The type of the transaction. Use the same transaction type from the previous authorisation request. |
Example request body:
{
"amount": {
"currency": "SGD",
"value": 3
},
"ref": {
"authorizationIdResponse": "123646",
"requestMti": "0200",
"transaction": {
"acquirer": {
"acceptorIdCode": "CARD ACCEPTOR",
"acceptorTerminalId": "TERMID01",
"city": "CITY NAME",
"country": "GB",
"forwardingInstitutionId": "400050",
"institutionId": "430010",
"merchantCategoryCode": 5499,
"name": "ACQUIRER NAME"
},
"card": {
"cardStatus": "ACTIVE",
"country": "SG",
"currencies": [
"SGD"
],
"cvv1": "123",
"cvv2": "789",
"expiration": [
2029,
7
],
"icvv": "456",
"pan": "4242424242424242",
"pin": "1234",
"profileId": 2,
"schemeName": "VISA",
"sequenceNumber": 1,
"token": "59123122-223d-45f9-b840-0ad4a4f80937",
"userId": 5
},
"pos": {
"acceptsOnlinePins": true,
"hasChip": true,
"maxPinLength": 12,
"supports3ds": false,
"type": "CHIP_AND_PIN"
},
"retrievalReferenceNum": "230805363054",
"schemeTransactionId": "932290252416153",
"stan": "363054",
"transactionStartTime": 1667541087.0476434
}
},
"transactionType": "GOODS_AND_SERVICES"
}
Responses
200: Simulated transaction reversal result
application/json
| Property | Type | Required | Description |
|---|---|---|---|
error |
string,null |
No | An error returned by the transaction, if it exists. |
reference |
object |
No | The transaction reference. |
Example response:
{
"error": null,
"reference": {
"authorizationIdResponse": "123646",
"requestMti": "0200",
"transaction": {
"acquirer": {
"acceptorIdCode": "CARD ACCEPTOR",
"acceptorTerminalId": "TERMID01",
"city": "CITY NAME",
"country": "GB",
"forwardingInstitutionId": "400050",
"institutionId": "430010",
"merchantCategoryCode": 5499,
"name": "ACQUIRER NAME"
},
"card": {
"cardStatus": "ACTIVE",
"country": "SG",
"currencies": [
"SGD"
],
"cvv1": "123",
"cvv2": "789",
"expiration": [
2029,
7
],
"icvv": "456",
"pan": "4242424242424242",
"pin": "1234",
"profileId": 2,
"schemeName": "VISA",
"sequenceNumber": 1,
"token": "59123122-223d-45f9-b840-0ad4a4f80937",
"userId": 5
},
"pos": {
"acceptsOnlinePins": true,
"hasChip": true,
"maxPinLength": 12,
"supports3ds": false,
"type": "CHIP_AND_PIN"
},
"retrievalReferenceNum": "230805363054",
"schemeTransactionId": "932290252416153",
"stan": "363054",
"transactionStartTime": 1667541087.0476434
}
}
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/add
Operation ID: simulationKycReviewRequirementsAdd.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID requiring the new requirement to be added. |
kycReviewId |
path |
string (uuid) |
Yes | The ID of the existing KYC review. |
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 |
|---|---|---|---|
requestedAction |
enum: APPROVE, REJECT |
No | The action to be carried out. |
requirement |
string |
No | Requirement to simulate hosted journey for. |
Responses
202: Requirement added successfully. No content returned
400: Bad request
application/json
Example response:
{
"category": "CLIENT",
"code": "invalid-request",
"description": "Profile 123L is a personal type, not permitted to simulate evidence request",
"details": null
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/submit
Operation ID: simulationKycReviewRequirementsSubmit.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
kycReviewId |
path |
string (uuid) |
Yes | The ID of the existing KYC review. |
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 |
|---|---|---|---|
requirement |
string |
No | Requirement to simulate hosted journey for. |
Example request body:
{
"requirement": "ACCOUNT_PURPOSE"
}
Responses
202: Requirement submitted successfully. No content returned
400: Bad request
application/json
Example response:
{
"category": "CLIENT",
"code": "invalid-request",
"description": "Invalid request. KycRequirement {ACCOUNT_PURPOSE} was not found for KycReview",
"details": null
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/verify
Operation ID: simulationKycReviewVerify.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
kycReviewId |
path |
string (uuid) |
Yes | The ID of the existing KYC review. |
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 |
|---|---|---|---|
requestedAction |
enum: APPROVE, REJECT |
No | The action to be carried out. |
requirements |
array of string |
No | Zero or more requirements to be verified. If not provided, all blocking requirements are verified. |
Example request body:
{
"requestedAction": "APPROVE",
"requirements": [
"ACCOUNT_PURPOSE_V2"
]
}
Responses
202: KYC review verified successfully. No content returned
400: Bad request
application/json
Example response:
{
"category": "CLIENT",
"code": "kyc_review.state_update_not_allowed",
"description": "Invalid action passed in request, action: APPROVED",
"details": null
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/bank-transactions/import
Operation ID: simulationBankTransactionImport.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile 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. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
amount |
number |
Yes | The payment amount. |
beneficiaryAddress |
object |
No | Beneficiary address. |
beneficiaryAddress.addressFirstLine |
string |
No | Address line: street, house, apartment. |
beneficiaryAddress.city |
string |
No | City name. |
beneficiaryAddress.country |
string |
No | Country code (ISO 3166-1 alpha-2). |
beneficiaryAddress.postalCode |
string |
No | Postal code. |
beneficiaryAddress.stateCode |
string |
No | State code. |
beneficiaryName |
string |
No | Beneficiary name - defaults to account holder name. |
currency |
string |
Yes | The currency of the bank account details that you want to make payment to. |
reference |
string |
No | Custom payment reference to identify the payment. |
senderAccountNumber |
string |
No | Sender's bank account number. |
senderAddress |
object |
No | Sender address. |
senderAddress.addressFirstLine |
string |
No | Address line: street, house, apartment. |
senderAddress.city |
string |
No | City name. |
senderAddress.country |
string |
No | Country code (ISO 3166-1 alpha-2). |
senderAddress.postalCode |
string |
No | Postal code. |
senderAddress.stateCode |
string |
No | State code. |
senderBankCode |
string |
No | Sender bank code. |
senderName |
string |
No | Sender full name. |
Responses
201: Bank transaction imported successfully. No content returned
400: Bad request
application/json
Example response:
{
"code": "not.valid",
"message": "No account details found for profile currency pair"
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/swift-in
Operation ID: simulationSwiftIn.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile 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. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
amount |
number |
Yes | Amount received by Wise. |
beneficiaryAccount |
string |
No | Account number of the ultimate beneficiary. It can be either a local account number or an IBAN. If the provided IBAN resolves to a BIC that does not match any connected test BICs, simulation is not allowed and an error is returned. |
beneficiaryAddress |
object and object |
No | Address of the ultimate beneficiary. |
beneficiaryName |
string |
No | Name of the ultimate beneficiary. |
charges |
array of object |
No | List of fees declared by correspondents (for example, handling fee). |
charges[].agent |
string |
Yes | BIC of the agent incurring the fee. |
charges[].amount |
number |
Yes | Fee amount. |
charges[].currency |
string |
Yes | Fee currency. 3-letter ISO currency code. |
currencyCode |
string |
Yes | Currency received by Wise. 3-letter ISO currency code. |
instructedAmount |
number |
No | Amount sent by the sender. If not provided, it is assumed to be the same as amount plus same currency fees. Any outstanding fees in other currencies are ignored. Required if instructedCurrencyCode is provided. |
instructedCurrencyCode |
string |
No | Currency sent by the sender. 3-letter ISO currency code. If not provided, it is assumed to be the same as currencyCode. |
paymentReference |
string |
No | Custom payment reference. |
previousInstructingAgents |
array of string |
No | List of previous instructing agents. Maximum 3 items. |
senderAccount |
string |
No | Account number of the sender. It can be either an IBAN or local account number. |
senderAddress |
object and object |
No | Address of the sender. |
senderBank |
any or any or any or any |
No | Details of the sender's bank. Cannot be provided together with senderBic. |
senderBank.address |
object and object |
No | Address of the sender's bank. |
senderBank.bic |
string |
No | BIC of the sender's bank. |
senderBank.clearingSystemCode |
string |
No | Code identifying the clearing system in which the sender bank is registered. |
senderBank.clearingSystemMemberId |
string |
No | Identifier of the sender bank within the clearing system specified by clearingSystemCode. |
senderBank.lei |
string |
No | Legal Entity Identifier (LEI) of the sender bank. |
senderBank.name |
string |
No | Name of the sender's bank. |
senderBic |
string |
No | BIC of the sender's bank. Cannot be provided together with senderBank. |
senderName |
string |
No | Name of the sender. |
Responses
200: Swift payment simulated successfully
application/json
Example response:
{
"ackMessage": false,
"actor": "SYSTEM",
"actorId": null,
"actorOktaId": null,
"amount": 100,
"attributes": null,
"currency": "EUR",
"direction": "INCOMING",
"finMessage": null,
"id": 123,
"jsonMessage": null,
"messageReference": null,
"messageType": "pacs.008.001.08",
"mur": null,
"payoutInstructionId": null,
"processTime": "2026-02-27T09:24:38.484276Z",
"receiver": null,
"sender": null,
"source": "SWIFT_CLOUD",
"state": "RECEIVED",
"transferId": null,
"uetr": "f87c3c37-d97b-4da6-a788-94004414e648",
"valueDate": null
}
400: Bad request
application/json
Example response:
{
"errors": [
{
"arguments": [],
"code": "not.valid",
"message": "must be greater than 0",
"path": "amount"
}
]
}
422: Unprocessable Entity
application/json
Example response:
{
"arguments": [],
"code": "not.valid",
"message": "None of connected BICs match beneficiary account DE00000000000000000000 (TESTDE00)"
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/profiles/{profileId}/verifications
Operation ID: simulationVerification.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The ID of the profile to verify. |
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: Verification state changed successfully. No content returned
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/transfers/{transferId}/payout-failure
Operation ID: simulationTransferPayoutFailure.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The ID of the transfer to simulate. |
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 |
|---|---|---|---|
failure_reason_code |
string |
No | Failure reason code to trigger for payout failure. When not provided, a failure code is selected at random and returned. |
Responses
200: Successful initiation of payout failure
application/json
Example response:
{
"failure_description": "Invalid recipient's ID document number",
"failure_reason_code": "WRONG_ID_NUMBER",
"occurred_at": "2023-08-10T10:17:23.123Z"
}
400: Bad request - invalid input or transfer state
application/json
The response is object.
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
500: Internal server error
application/json
The response is object.
Example response:
{
"errors": [
{
"code": "system_error",
"message": "Something went wrong in our side. Please try again in 5 minutes. If this does not help, please let us know api@wise.com"
}
]
}
POST /simulation/balance/topup
Operation ID: simulationBalanceTopup.
Authentication: bearer token (UserToken).
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 |
|---|---|---|---|
amount |
number |
Yes | The amount to top up the balance account with. |
balanceId |
integer (int64) |
Yes | The ID of the balance account that is going to receive the funds. |
channel |
enum: TRANSFER, CARD |
No | Type of top-up. Not providing a channel will default to CARD. |
currency |
string |
Yes | The currency to top up the balance account in. Must be the same currency as the balance account. |
profileId |
integer (int64) |
Yes | The profile ID linked to the balance account. |
Example request body:
{
"amount": 100,
"balanceId": 5,
"channel": "TRANSFER",
"currency": "EUR",
"profileId": 2
}
Responses
200: Simulated balance top-up result
application/json
| Property | Type | Required | Description |
|---|---|---|---|
balancesAfter |
array of object |
No | |
balancesAfter[].currency |
string |
No | The currency of the balance account. |
balancesAfter[].id |
integer (int64) |
No | The ID of the balance account. |
balancesAfter[].value |
number |
No | The new amount available in the balance account. |
state |
string |
No | The state of the transaction. COMPLETED is always returned when using this endpoint. |
transactionId |
integer (int64) |
No | The ID of the top-up transaction. |
Example response:
{
"balancesAfter": [
{
"currency": "EUR",
"id": 5,
"value": 100
}
],
"state": "COMPLETED",
"transactionId": 5
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/sanction-cases
Operation ID: simulateSanctionCase.
Authentication: bearer token (UserToken).
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 |
|---|---|---|---|
caseId |
integer (int64) |
No | The self-service case ID to close. Required when status is CLOSE. When status is OPEN, this can optionally be provided to specify the case ID; otherwise, one will be auto-generated. |
closingReason |
enum: EXPIRED, INVALIDATED, ABORTED, COMPLETED |
No | The reason for closing the case. Required when status is CLOSE. - EXPIRED: The case expired without resolution - INVALIDATED: The case was determined to be invalid - ABORTED: The case was aborted/cancelled - COMPLETED: The case was successfully resolved |
profileId |
integer (int64) |
Yes | The profile ID linked to the transfer. |
sanctionType |
enum: SANCTION |
Yes | The type of sanction. Currently only SANCTION is supported. |
simulationSanctionSubType |
enum: REFERENCE_SANCTION_HIT, RECIPIENT_SANCTION_HIT, REFERENCE_LOCATION_HIT, RECIPIENT_LOCATION_HIT, DEPOSIT_SANCTION_HIT |
No | The specific subtype of sanction case to simulate. Required when sanctionType is SANCTION. - REFERENCE_SANCTION_HIT: Sanction hit on the transfer reference/sender - RECIPIENT_SANCTION_HIT: Sanction hit on the recipient - REFERENCE_LOCATION_HIT: Location-based hit on the reference/sender - RECIPIENT_LOCATION_HIT: Location-based hit on the recipient - DEPOSIT_SANCTION_HIT: Sanction hit on an incoming deposit |
status |
enum: OPEN, CLOSE |
Yes | The action to perform. - OPEN: Create a new sanction case - CLOSE: Close an existing sanction case |
transferId |
integer (int64) |
Yes | The ID of the transfer associated with the sanction case. |
Responses
200: Sanction case successfully closed
application/json
| Property | Type | Required | Description |
|---|---|---|---|
caseId |
integer (int64) |
No | The ID of the case in the partner support system. May be null if the case hasn't been fully processed yet. |
eventId |
string (uuid) |
No | The unique identifier for this simulation event. |
Example response:
{
"caseId": 42,
"eventId": "550e8400-e29b-41d4-a716-446655440001"
}
201: Sanction case successfully created
application/json
| Property | Type | Required | Description |
|---|---|---|---|
caseId |
integer (int64) |
No | The ID of the case in the partner support system. May be null if the case hasn't been fully processed yet. |
eventId |
string (uuid) |
No | The unique identifier for this simulation event. |
400: Bad request - validation error
application/json
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/settlement/funds
Operation ID: SimulateSettlementAllocationsFunds.
Authentication: bearer token (ClientCredentialsToken).
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 |
|---|---|---|---|
amount |
number (decimal) |
Yes | The amount to be simulated as received. |
currency |
string |
Yes | Currency code (ISO 4217). |
paymentReference |
string |
Yes | Payment reference for the settlement allocation. Must start with 'BYOPSP_'. |
Responses
204: Funds received simulation completed successfully
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /simulation/verify-profile
Operation ID: simulationVerifyProfile.
Authentication: bearer token (UserToken).
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. |
Responses
200: Verification state changed successfully. No content returned
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
list
GET /simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions
Operation ID: simulationCardTransactions.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
limit |
query |
integer (int32) |
No | The maximum number of transactions to return. The default value is 10. |
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: List of simulated card transactions
application/json
| Property | Type | Required | Description |
|---|---|---|---|
[].creationTime |
number |
No | Time when the card transaction was created. |
[].transactionId |
integer (int64) |
No | ID of the transaction. |
Example response:
[
{
"creationTime": 1723600773.748887,
"transactionId": 5028
},
{
"creationTime": 1723600659.095692,
"transactionId": 5027
},
{
"creationTime": 1723600648.133955,
"transactionId": 5026
},
{
"creationTime": 1723545470.449374,
"transactionId": 5025
},
{
"creationTime": 1723545430.790566,
"transactionId": 5024
}
]
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements
Operation ID: simulationKycReviewRequirementsList.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
kycReviewId |
path |
string (uuid) |
Yes | The ID of the existing KYC review. |
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: List of KYC review requirements
application/json
| Property | Type | Required | Description |
|---|---|---|---|
requirements |
array of object |
No | |
requirements[].description |
string,null |
No | Description of the KYC review item. |
requirements[].key |
string |
No | KYC review item key. |
requirements[].state |
enum: NOT_PROVIDED, IN_REVIEW, VERIFIED, REJECTED |
No | State of the KYC review item. |
Example response:
{
"requirements": [
{
"description": null,
"key": "ID_DOCUMENT_WITH_LIVENESS",
"state": "IN_REVIEW"
}
]
}
404: KYC review not found
application/json
Example response:
{
"category": "CLIENT",
"code": "kyc_review.not_found",
"description": "KycReview not found",
"details": null
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
load
GET /simulation/transfers/{transferId}/{status}
Operation ID: simulationTransferStateChange.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
transferId |
path |
integer (int64) |
Yes | The ID of the transfer to simulate. |
status |
path |
enum: processing, funds_converted, outgoing_payment_sent, bounced_back, funds_refunded |
Yes | The target transfer status. |
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 with updated status
application/json
Example response:
{
"business": null,
"created": "2017-03-14 15:25:51",
"details": {
"reference": "good times"
},
"hasActiveIssues": false,
"id": 15574445,
"quote": 113379,
"rate": 1.2151,
"reference": "good times",
"sourceAccount": null,
"sourceCurrency": "EUR",
"sourceValue": 1000,
"status": "processing",
"targetAccount": 7993919,
"targetCurrency": "GBP",
"targetValue": 895.32,
"transferRequest": null,
"user": 294205
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.