Balance
A balance account: create, list, get or remove one, convert or move money between balances, and get total funds.
Operations
Every route this entity exposes. Each route links to its own reference on this page.
| Method | Route | SDK operation | Returns |
|---|---|---|---|
POST |
/profiles/{profileId}/balances/hold-limit-breach/{holdLimitBreachId} |
create |
Returns 204 No Content on success |
POST |
/profiles/{profileId}/balance-movements |
create |
Created - Movement completed successfully |
POST |
/profiles/{profileId}/balances |
create |
Created - Balance successfully created |
GET |
/profiles/{profileId}/balances |
list |
OK - Successfully retrieved balances |
GET |
/profiles/{profileId}/total-funds/{currency} |
load |
OK - Successfully retrieved total funds |
GET |
/profiles/{profileId}/balances/{balanceId} |
load |
OK - Successfully retrieved the balance |
DELETE |
/profiles/{profileId}/balances/{balanceId} |
remove |
No Content - Balance successfully removed |
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:
balances, err := client.Balance(nil).List(map[string]any{"profile_id": 1, "type": "example"}, nil)
if err != nil {
panic(err)
}
fmt.Println(balances)
balance, err := client.Balance(nil).Load(map[string]any{"currency": "example", "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(balance)
created, err := client.Balance(nil).Create(map[string]any{"profile_id": 1, "currency": "example", "state": "example", "targetRecipientId": 1, "type": "example"}, nil)
if err != nil {
panic(err)
}
fmt.Println(created)
removed, err := client.Balance(nil).Remove(map[string]any{"id": 1, "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(removed)
Lua
Construct client as shown in the Lua setup, then call the operations:
local balances, err = client:Balance():list({ profile_id = 1, type = "example" })
local balance, err = client:Balance():load({ currency = "example", profile_id = 1 })
local created, err = client:Balance():create({ profile_id = 1, currency = "example", state = "example", targetRecipientId = 1, type = "example" })
local removed, err = client:Balance():remove({ id = 1, profile_id = 1 })
PHP
Construct client as shown in the PHP setup, then call the operations:
$balances = $client->Balance()->list(["profile_id" => 1, "type" => "example"]);
$balance = $client->Balance()->load(["currency" => "example", "profile_id" => 1]);
$created = $client->Balance()->create(["profile_id" => 1, "currency" => "example", "state" => "example", "targetRecipientId" => 1, "type" => "example"]);
$client->Balance()->remove(["id" => 1, "profile_id" => 1]);
Python
Construct client as shown in the Python setup, then call the operations:
balances = client.Balance().list({"profile_id": 1, "type": "example"})
balance = client.Balance().load({"currency": "example", "profile_id": 1})
created = client.Balance().create({ "profile_id": 1, "currency": "example", "state": "example", "targetRecipientId": 1, "type": "example" })
client.Balance().remove({"id": 1, "profile_id": 1})
Ruby
Construct client as shown in the Ruby setup, then call the operations:
balances = client.Balance.list({ "profile_id" => 1, "type" => "example" })
balance = client.Balance.load({ "currency" => "example", "profile_id" => 1 })
created = client.Balance.create({ "profile_id" => 1, "currency" => "example", "state" => "example", "targetRecipientId" => 1, "type" => "example" })
client.Balance.remove({ "id" => 1, "profile_id" => 1 })
TypeScript
Construct client as shown in the TypeScript setup, then call the operations:
const balances = await client.Balance().list({ profile_id: 1, type: "example" })
const balance = await client.Balance().load({ currency: "example", profile_id: 1 })
const created = await client.Balance().create({ profile_id: 1, currency: "example", state: "example", targetRecipientId: 1, type: "example" })
await client.Balance().remove({ id: 1, profile_id: 1 })
Fields
| Field | Type | Required | Description |
|---|---|---|---|
amount |
object |
No | Available balance that can be used to fund transfers. |
cashAmount |
object |
No | Cash amount in the account. |
creationTime |
string |
No | Date when the balance was created. |
currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
icon |
one,object,null |
No | Icon for the balance. |
id |
integer |
No | Balance ID. |
investmentState |
string |
No | Investment state of the balance. |
modificationTime |
string |
No | Date when the balance was last modified. |
name |
one,string,null |
No | Name of the balance. |
overdraft |
object |
No | Overdraft details for the account. |
reservedAmount |
object |
No | Amount reserved for transactions. |
state |
string |
Yes | Must be CLOSED. |
targetRecipientId |
integer |
Yes | ID of the recipient to receive the refund of the excess funds. |
totalAvailable |
object |
No | Total available balance, which is the sum of cash ledger balance and any approved overdraft limit. |
totalCash |
object |
No | Total cash balance across all balances, including group balances but excluding asset portfolios. |
totalWorth |
object |
No | Total worth of the account, including cash ledger balance and valuation of any asset portfolio if invested. |
type |
string |
No | Type of balance account. |
visible |
boolean |
No | Whether the balance is visible to the user. |
create
POST /profiles/{profileId}/balances/hold-limit-breach/{holdLimitBreachId}
Operation ID: holdLimitBreachClose.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
holdLimitBreachId |
path |
integer (int64) |
Yes | The hold limit breach 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 |
|---|---|---|---|
state |
string |
Yes | Must be CLOSED. This is the only supported value. |
targetRecipientId |
integer |
Yes | ID of the recipient to receive the refund of the excess funds. |
Responses
204: Returns 204 No Content on success
400: Invalid state used
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
No | A list of specific validation failures. |
errors[].code |
string |
No | A specific code for the validation failure type. |
errors[].detail |
string |
No | A detailed description of the validation failure. |
errors[].ref |
string |
No | A reference to the field that failed validation. |
instance |
string |
No | The uri that triggered the error |
status |
string |
No | Bad request error |
title |
string |
No | Validation Error |
type |
string (uri-reference) |
No | Must be /errors/types/validation for this error type |
403: Caller attempts to close a holdLimitBreach that does not belong to them
application/json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
No | Error code of the request |
detail |
string |
No | Detail of the error |
instance |
string |
No | The uri that triggered the error |
status |
string |
No | Forbidden error |
title |
string |
No | Forbidden |
type |
string (uri-reference) |
No | Must be /errors/types/access for this error type |
404: Caller attempts to close a holdLimitBreach that does not exist
application/json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
No | Error code of the request |
detail |
string |
No | Detail of the error |
instance |
string |
No | The uri that triggered the error |
status |
string |
No | Validation error |
title |
string |
No | Validation Error |
type |
string (uri-reference) |
No | Must be /errors/types/validation for this error type |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /profiles/{profileId}/balance-movements
Operation ID: balanceMovement.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
X-idempotence-uuid |
header |
string (uuid) |
Yes | 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 a retry call. |
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 to move. Required for same-currency movements. Either amount or quoteId must be provided. |
amount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
amount.value |
number |
No | Amount value. |
quoteId |
string (uuid) |
No | Quote ID. Required for cross-currency movements. Quote must be created with payOut: BALANCE. |
sourceBalanceId |
integer (int64) |
No | Source balance ID. Required when moving between balances (with targetBalanceId). |
targetBalanceId |
integer (int64) |
No | Target balance ID. Required when moving between balances (with sourceBalanceId). |
Responses
201: Created - Movement completed successfully
application/json
| Property | Type | Required | Description |
|---|---|---|---|
balancesAfter |
array of object |
No | Balance states after the movement. |
balancesAfter[].currency |
string |
No | Currency code. |
balancesAfter[].id |
integer (int64) |
No | Balance ID. |
balancesAfter[].value |
number |
No | Balance value after movement. |
creationTime |
string (date-time) |
No | When the movement was created. |
feeAmounts |
array of object |
No | Fee amounts charged for the movement. |
feeAmounts[].currency |
string |
No | |
feeAmounts[].value |
number |
No | |
id |
integer (int64) |
No | Movement transaction ID. |
rate |
number |
No | Exchange rate applied to the conversion. |
sourceAmount |
object |
No | Source amount of the movement. |
sourceAmount.currency |
string |
No | |
sourceAmount.value |
number |
No | |
state |
enum: PENDING, COMPLETED, CANCELLED, REVERSED |
No | State of the movement. |
steps |
array of object |
No | Steps involved in the movement. |
steps[].balancesAfter |
array of object |
No | |
steps[].balancesAfter[].currency |
string |
No | |
steps[].balancesAfter[].value |
number |
No | |
steps[].creationTime |
string (date-time) |
No | When the step was created. |
steps[].fee |
object |
No | |
steps[].fee.currency |
string |
No | |
steps[].fee.value |
number |
No | |
steps[].id |
integer (int64) |
No | Step ID. |
steps[].rate |
number |
No | Exchange rate applied. |
steps[].sourceAmount |
object |
No | |
steps[].sourceAmount.currency |
string |
No | |
steps[].sourceAmount.value |
number |
No | |
steps[].targetAmount |
object |
No | |
steps[].targetAmount.currency |
string |
No | |
steps[].targetAmount.value |
number |
No | |
steps[].type |
string |
No | Step type. |
targetAmount |
object |
No | Target amount of the movement. |
targetAmount.currency |
string |
No | |
targetAmount.value |
number |
No | |
type |
enum: DEPOSIT, WITHDRAWAL, CONVERSION |
No | Type of movement. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /profiles/{profileId}/balances
Operation ID: balanceCreate.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
X-idempotence-uuid |
header |
string (uuid) |
Yes | 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 a retry call. |
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 |
|---|---|---|---|
currency |
string |
Yes | Currency code (ISO 4217 Alphabetic Code). |
name |
string |
No | Name of the balance. Required for SAVINGS type balances. |
type |
enum: STANDARD, SAVINGS |
Yes | Type of balance account. - STANDARD - Standard balance account. Only one per currency per profile. - SAVINGS - Savings balance (Jar). Multiple allowed per currency. |
Example request body:
{
"currency": "EUR",
"type": "STANDARD"
}
Responses
201: Created - Balance successfully created
application/json
| Property | Type | Required | Description |
|---|---|---|---|
amount |
object |
No | Available balance that can be used to fund transfers. |
amount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
amount.value |
number |
No | Amount value. |
cashAmount |
object |
No | Cash amount in the account. |
cashAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
cashAmount.value |
number |
No | Amount value. |
creationTime |
string (date-time) |
No | Date when the balance was created. |
currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
icon |
object,null |
No | Icon for the balance. |
icon.type |
enum: EMOJI |
No | Icon type. |
icon.value |
string |
No | Icon value (for example, emoji character). |
id |
integer (int64) |
No | Balance ID. |
investmentState |
enum: NOT_INVESTED, INVESTED, INVESTING, DIVESTING, UNKNOWN |
No | Investment state of the balance. - NOT_INVESTED - Balance is not invested. - INVESTED - Balance is invested in assets. - INVESTING - Balance is being invested into assets. - DIVESTING - Balance is being divested from assets. - UNKNOWN - Investment state is unknown. |
modificationTime |
string (date-time) |
No | Date when the balance was last modified. |
name |
string,null |
No | Name of the balance. Required for SAVINGS balances. |
reservedAmount |
object |
No | Amount reserved for transactions. |
reservedAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
reservedAmount.value |
number |
No | Amount value. |
totalWorth |
object |
No | Current total worth. |
totalWorth.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
totalWorth.value |
number |
No | Amount value. |
type |
enum: STANDARD, SAVINGS |
No | Type of balance account. - STANDARD - Standard balance account. Only one per currency per profile. - SAVINGS - Savings balance (Jar). Multiple allowed per currency. |
visible |
boolean |
No | Whether the balance is visible to the user. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
list
GET /profiles/{profileId}/balances
Operation ID: balanceList.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
types |
query |
string |
Yes | Comma-separated list of balance types to return. Acceptable values are STANDARD and SAVINGS. |
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: OK - Successfully retrieved balances
application/json
| Property | Type | Required | Description |
|---|---|---|---|
[].amount |
object |
No | Available balance that can be used to fund transfers. |
[].amount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
[].amount.value |
number |
No | Amount value. |
[].cashAmount |
object |
No | Cash amount in the account. |
[].cashAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
[].cashAmount.value |
number |
No | Amount value. |
[].creationTime |
string (date-time) |
No | Date when the balance was created. |
[].currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
[].icon |
object,null |
No | Icon for the balance. |
[].icon.type |
enum: EMOJI |
No | Icon type. |
[].icon.value |
string |
No | Icon value (for example, emoji character). |
[].id |
integer (int64) |
No | Balance ID. |
[].investmentState |
enum: NOT_INVESTED, INVESTED, INVESTING, DIVESTING, UNKNOWN |
No | Investment state of the balance. - NOT_INVESTED - Balance is not invested. - INVESTED - Balance is invested in assets. - INVESTING - Balance is being invested into assets. - DIVESTING - Balance is being divested from assets. - UNKNOWN - Investment state is unknown. |
[].modificationTime |
string (date-time) |
No | Date when the balance was last modified. |
[].name |
string,null |
No | Name of the balance. Required for SAVINGS balances. |
[].reservedAmount |
object |
No | Amount reserved for transactions. |
[].reservedAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
[].reservedAmount.value |
number |
No | Amount value. |
[].totalWorth |
object |
No | Current total worth. |
[].totalWorth.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
[].totalWorth.value |
number |
No | Amount value. |
[].type |
enum: STANDARD, SAVINGS |
No | Type of balance account. - STANDARD - Standard balance account. Only one per currency per profile. - SAVINGS - Savings balance (Jar). Multiple allowed per currency. |
[].visible |
boolean |
No | Whether the balance is visible to the user. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
load
GET /profiles/{profileId}/total-funds/{currency}
Operation ID: totalFunds.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
currency |
path |
string |
Yes | Currency code (ISO 4217 Alphabetic Code). All values will be converted to this currency. |
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: OK - Successfully retrieved total funds
application/json
| Property | Type | Required | Description |
|---|---|---|---|
overdraft |
object |
No | Overdraft details for the account. |
overdraft.available |
object |
No | Amount of overdraft currently available (limit minus used). |
overdraft.available.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
overdraft.available.value |
number |
No | Amount value. |
overdraft.availableByCurrency |
array of object |
No | Available overdraft amounts converted to each currency the customer has a balance in. |
overdraft.availableByCurrency[].currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
overdraft.availableByCurrency[].value |
number |
No | Amount value. |
overdraft.limit |
object |
No | Maximum overdraft available through an overdraft program. Zero if no approved overdraft. |
overdraft.limit.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
overdraft.limit.value |
number |
No | Amount value. |
overdraft.used |
object |
No | Portion of the approved overdraft limit currently being utilized. |
overdraft.used.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
overdraft.used.value |
number |
No | Amount value. |
totalAvailable |
object |
No | Total available balance, which is the sum of cash ledger balance and any approved overdraft limit. |
totalAvailable.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
totalAvailable.value |
number |
No | Amount value. |
totalCash |
object |
No | Total cash balance across all balances, including group balances but excluding asset portfolios. |
totalCash.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
totalCash.value |
number |
No | Amount value. |
totalWorth |
object |
No | Total worth of the account, including cash ledger balance and valuation of any asset portfolio if invested. |
totalWorth.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
totalWorth.value |
number |
No | Amount value. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
GET /profiles/{profileId}/balances/{balanceId}
Operation ID: balanceGet.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
balanceId |
path |
integer (int64) |
Yes | The balance 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: OK - Successfully retrieved the balance
application/json
| Property | Type | Required | Description |
|---|---|---|---|
amount |
object |
No | Available balance that can be used to fund transfers. |
amount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
amount.value |
number |
No | Amount value. |
cashAmount |
object |
No | Cash amount in the account. |
cashAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
cashAmount.value |
number |
No | Amount value. |
creationTime |
string (date-time) |
No | Date when the balance was created. |
currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
icon |
object,null |
No | Icon for the balance. |
icon.type |
enum: EMOJI |
No | Icon type. |
icon.value |
string |
No | Icon value (for example, emoji character). |
id |
integer (int64) |
No | Balance ID. |
investmentState |
enum: NOT_INVESTED, INVESTED, INVESTING, DIVESTING, UNKNOWN |
No | Investment state of the balance. - NOT_INVESTED - Balance is not invested. - INVESTED - Balance is invested in assets. - INVESTING - Balance is being invested into assets. - DIVESTING - Balance is being divested from assets. - UNKNOWN - Investment state is unknown. |
modificationTime |
string (date-time) |
No | Date when the balance was last modified. |
name |
string,null |
No | Name of the balance. Required for SAVINGS balances. |
reservedAmount |
object |
No | Amount reserved for transactions. |
reservedAmount.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
reservedAmount.value |
number |
No | Amount value. |
totalWorth |
object |
No | Current total worth. |
totalWorth.currency |
string |
No | Currency code (ISO 4217 Alphabetic Code). |
totalWorth.value |
number |
No | Amount value. |
type |
enum: STANDARD, SAVINGS |
No | Type of balance account. - STANDARD - Standard balance account. Only one per currency per profile. - SAVINGS - Savings balance (Jar). Multiple allowed per currency. |
visible |
boolean |
No | Whether the balance is visible to the user. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
remove
DELETE /profiles/{profileId}/balances/{balanceId}
Operation ID: balanceDelete.
Authentication: bearer token (UserToken) or bearer token (PersonalToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
balanceId |
path |
integer (int64) |
Yes | The balance 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
204: No Content - Balance successfully removed
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.