Balance

Balance accounts are included as part of the Wise Multi-Currency Account.

Fields
idinteger

Balance id

currencytext

Currency code (ISO 4217 Alphabetic Code)

typetext

Type (STANDARD, SAVINGS)

nametext

Name of the balance

icontext

Emoji string

investmentStatetext

Investment state of balance (NOT_INVESTED, INVESTED, DIVESTING, UNKNOWN)

amount.valuedecimal

Available balance value that can be used to fund transfers

amount.currencytext

Currency code (ISO 4217 Alphabetic Code)

reservedAmount.valuedecimal

Amount reserved for transactions

reservedAmount.currencytext

Currency code (ISO 4217 Alphabetic Code)

cashAmount.valuedecimal

Cash amount in the account

cashAmount.currencytext

Currency code (ISO 4217 Alphabetic Code)

totalWorth.valuedecimal

Current total worth

totalWorth.currencytext

Currency code (ISO 4217 Alphabetic Code)

creationTimetimestamp

Date of when the balance was created

modificationTimetimestamp

Date of when the balance was last modified

visibleboolean

Balance is visible for the user or not

Balance Object
{
"id": 200001,
"currency": "EUR",
"type": "STANDARD",
"name": null,
"icon": null,
"investmentState": "NOT_INVESTED",
"amount": {
"value": 0,
"currency": "EUR"
},
"reservedAmount": {
"value": 0,
"currency": "EUR"
},
"cashAmount": {
"value": 0,
"currency": "EUR"
},
"totalWorth": {
"value": 0,
"currency": "EUR"
},
"creationTime": "2020-05-20T14:43:16.658Z",
"modificationTime": "2020-05-20T14:43:16.658Z",
"visible": true
}

POST /v4/profiles/{{profileId}}/balances

This endpoint opens a balance within the specified profile, in the currency and type specified in the request.

For STANDARD balances, only one can be created for a currency. For SAVINGS balances, multiples in the same currency can be opened.

When sending the request, the currency and type are required. If creating a SAVINGS type balance, a name is also required.

Request
currencytext

Currency code (ISO 4217 Alphabetic Code)

typetext

Type (STANDARD, SAVINGS)

nametext

Name of the balance

Returns a balance object.

Example Request
curl -X POST https://api.sandbox.transferwise.tech/v4/profiles/{{profileId}}/balances \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-H 'X-idempotence-uuid: <generated uuid>' \
-d '{
"currency": "EUR",
"type": "STANDARD"
}'

GET /v4/profiles/{{profileId}}/balances/{{balanceId}}

This endpoint returns a balance based on the specified balance ID.

Returns a balance object.

Example Request
curl -X GET https://api.sandbox.transferwise.tech/v4/profiles/{{profileId}}/balances/{{balanceId}} \
-H 'Authorization: Bearer <your api token>'

GET /v4/profiles/{{profileId}}/balances?types=STANDARD

Retrieve the user's multi-currency account balance accounts. It returns all balance accounts the profile has in the types specified.

A parameter of type must be passed and include at least a single type. To return more than one type, comma separate the values. Acceptable values are STANDARD and SAVINGS.

Returns an array of balance objects.

Example Request
curl -X GET https://api.sandbox.transferwise.tech/v4/profiles/{{profileId}}/balances?types=STANDARD \
-H 'Authorization: Bearer <your api token>'

DELETE /v4/profiles/{{profileId}}/balances/{{balanceId}}

Close a balance account for the users profile. Balance accounts must have a zero balance in order for it to be closed. Bank account details for a balance account will also be deactivated and may not be restored in the future.

Returns a balance object.

Example Request
curl -X DELETE https://api.sandbox.transferwise.tech/v4/profiles/{{profileId}}/balances/{{balanceId}} \
-H 'Authorization: Bearer <your api token>'

POST /v2/profiles/{{profileId}}/balance-movements

This endpoint allows the conversion of funds between two STANDARD balance accounts in different currencies. You first must generate a quote with "payOut": "BALANCE".

Request
profileIdinteger

Authenticated profile id

quoteIduuid

Quote id - quote must be created with "payOut": "BALANCE".

X-idempotence-uuiduuid

Unique identifier assigned by you. Used for idempotency check purposes. Should your call fail for technical reasons then you can use the same value again for making retry call.

Please also note that this call needs an extra field in the header called "X-idempotence-uuid". This should be generated and used for any subsequent retry call in the case that the initial POST fails.
Interested in moving money in/out of Jars?
Move money between balances
Example Request
curl -X POST https://api.sandbox.transferwise.tech/v2/profiles/{{profileId}}/balance-movements \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-H 'X-idempotence-uuid: <generated uuid>' \
-d '{
"quoteId": {{quote id}}
}'
Example Response
{
"id": 30000001,
"type": "CONVERSION",
"state": "COMPLETED",
"balancesAfter": [
{
"id": 1,
"value": 10000594.71,
"currency": "GBP"
},
{
"id": 2,
"value": 9998887.01,
"currency": "EUR"
}
],
"creationTime": "2017-11-21T09:55:49.275Z",
"steps": [
{
"id": 369588,
"type": "CONVERSION",
"creationTime": "2017-11-21T09:55:49.276Z",
"balancesAfter": [
{
"value": 9998887.01,
"currency": "EUR"
},
{
"value": 10000594.71,
"currency": "GBP"
}
],
"channelName": null,
"channelReferenceId": null,
"tracingReferenceCode": null,
"sourceAmount": {
"value": 113.48,
"currency": "EUR"
},
"targetAmount": {
"value": 100,
"currency": "GBP"
},
"fee": {
"value": 0.56,
"currency": "EUR"
},
"rate": 0.88558
}
],
"sourceAmount": {
"value": 113.48,
"currency": "EUR"
},
"targetAmount": {
"value": 100,
"currency": "GBP"
},
"rate": 0.88558,
"feeAmounts": [
{
"value": 0.56,
"currency": "EUR"
}
]
}

POST /v2/profiles/{{profileId}}/balance-movements

This endpoint allows the following money movements:

  • Add money to same-currency jar (i.e move money from STANDARD to SAVINGS balance without conversion, amount is provided as request parameter);
  • Add money to another-currency jar (i.e. convert money, amount is determined by provided quoteId);
  • Withdraw money from jar (i.e move money from SAVINGS to STANDARD balance without conversion, amount is provided as request parameter).
Request
profileIdinteger

Authenticated profile id

sourceBalanceIdinteger

Source balance id. If present, targetBalanceId is required.

targetBalanceIdinteger

Target balance id. If present, sourceBalanceId is required.

quoteIduuid

Quote id - quote must be created with "payOut": "BALANCE". Required for cross-currency movements.

amountmoney

Either amount or quoteId are required.

X-idempotence-uuiduuid

Unique identifier assigned by you. Used for idempotency check purposes. If your call fails for technical reasons, you can use the same value again for making a retry call.

Interested in converting money from one balance to another?
Convert across balance accounts
Example Request
curl -X POST https://api.sandbox.transferwise.tech/v2/profiles/{{profileId}}/balance-movements \
-H 'Authorization: Bearer <your api token>' \
-H 'Content-Type: application/json' \
-H 'X-idempotence-uuid: <generated uuid>' \
-d '{
"amount": {
"value": <decimal>,
"currency": <currency>
}
"sourceBalanceId": <source id>,
"targetBalanceId": <target balance id>,
"quoteId": {{quote id}}
}'
Example Response
{
"id": <conversion transaction id>,
"type": "CONVERSION",
"state": "COMPLETED",
"balancesAfter": [
{
"id": 1,
"value": 10000594.71,
"currency": "GBP"
},
{
"id": 2,
"value": 9998887.01,
"currency": "EUR"
}
],
"creationTime": "2017-11-21T09:55:49.275Z",
"steps": [
{
"id": 369588,
"type": "CONVERSION",
"creationTime": "2017-11-21T09:55:49.276Z",
"balancesAfter": [
{
"value": 9998887.01,
"currency": "EUR"
},
{
"value": 10000594.71,
"currency": "GBP"
}
],
"channelName": null,
"channelReferenceId": null,
"tracingReferenceCode": null,
"sourceAmount": {
"value": 113.48,
"currency": "EUR"
},
"targetAmount": {
"value": 100,
"currency": "GBP"
},
"fee": {
"value": 0.56,
"currency": "EUR"
},
"rate": 0.88558
}
],
"sourceAmount": {
"value": 113.48,
"currency": "EUR"
},
"targetAmount": {
"value": 100,
"currency": "GBP"
},
"rate": 0.88558,
"feeAmounts": [
{
"value": 0.56,
"currency": "EUR"
}
]
}

GET /v1/profiles/{{profileId}}/balance-capacity

This endpoint allows a user to check how much money they are able to deposit in their balance based on regulatory limits.

It is useful for personal profiles located in countries that have hold limits.

We advise to call this API before depositing money into an account if the profile is located in Singapore or Malaysia.

Request Parameters
currencytext

Currency code (ISO 4217 Alphabetic Code) - The deposit limit will be returned in this currency

Response
hasLimitboolean

True if there is a regulatory hold limit for that profile's country

depositLimit.amountdecimal

Amount of money that can be added to the account

depositLimit.currencytext

Currency code (ISO 4217 Alphabetic Code) of money that can be added to the account. Specified in the request

Example Request
curl -X GET https://api.sandbox.transferwise.tech/v1/profiles/{{profileId}}/balance-capacity?currency=SGD \
-H 'Authorization: Bearer <your api token>'
Example Response
{
"hasLimit": true,
"depositLimit": {
"amount": 2000.00,
"currency": "SGD"
}
}

POST /v1/profiles/{profileId}/excess-money-account

If a balance goes over the regulatory hold limit, we need to automatically move the excess amount to another account at the end of the day.

To do this, we require a recipient where the money will be moved to be added to the profile.

This API is primarily used for SG and MY customers.

Request
recipientIdinteger

ID of the recipient for excess money transfers (Recipient)

Response

Response
userProfileIdinteger

ID of the profile

recipientIdinteger

ID of the recipient for excess money transfers

Example Request
curl -X POST https://api.sandbox.transferwise.tech/v1/profiles/{profileId}/excess-money-account \
-H 'Authorization: Bearer <your api token> \'
-d '{
"recipientId": 148393305
}'
Example Response
{
"userProfileId": 12321323,
"recipientId": 148393305
}