Internal transfers
Moving funds between the balance types of one account group, and reading the movements back.
Two calls that move funds between the balance types of a single currency account, and list what has moved:
POST /api/3/transfer # move funds between balance types
POST /api/3/transfer/list # what has moved
This is not a transfer between account groups. Both from and to are
balance types on one account within one account group — typically moving
AVAILABLE funds to BROKERAGE so they can be traded, and back again. The
account group is chosen by accountGroupUuid, and both sides sit inside it.
A successful transfer does not carry resultCode. It answers uuid and
status; every failure answers the ordinary resultCode and description
shape instead. Test for uuid, not for resultCode being OK.
The move needs two separate permissions. The API key must carry
Move Funds, and the account group must permit internal transfers. A key
without the first is refused MOVE_FUNDS_PERMISSION_REQUIRED; the second
produces NO_PERMISSION.
Transfer request
Sent as a signed body, like every /api/3 call. See
making requests.
| Field | Type | Required | Notes |
|---|---|---|---|
nonce | string | A counter that must increase with each request. An alternative to tonce | |
tonce | string | The current Unix time in microseconds. Send this or nonce | |
userUuid | string | The user the credentials act for. Set automatically from the API key; sending it has no effect | |
from | BalanceType | Required | The balance type to move out of |
to | BalanceType | Required | The balance type to move into |
amount | decimal | Required | How much to move. Must be positive, and is rejected if it carries more decimal places than the currency allows for withdrawal — min 0.00000001 |
ccy | string | Required | The currency to move. Both sides are the same currency — this call never converts |
accountGroupUuid | string | Conditional | The account group holding the account. Required when your credential covers more than one |
BalanceType
The pairs that can actually move. from and to must differ, and one side must
be AVAILABLE — except MARGIN_LONG, which pairs only with BROKERAGE. Other
balance types exist on the ledger and are not valid here; EXCHANGE in
particular is refused outright, whichever side it is on.
| Value | Meaning |
|---|---|
AVAILABLE | Settled funds, free to withdraw or trade. One side of almost every transfer |
BROKERAGE | Funds committed to request-for-stream and OTC trading. This is the pair you will use |
MARGIN_LONG | Margin balance. Moves only to and from BROKERAGE, never directly to AVAILABLE |
LEVERAGE | Leveraged trading balance, subject to a separate restriction on your account |
CUSTODY | External custody. Refused unless the account group's trading venue has both a custody profile and an external custodian configured |
Transfer response
Returned only when the transfer succeeded.
| Field | Type | Notes |
|---|---|---|
uuid | string | The identifier of the movement, which is what appears as uuid in the list below |
status | string | The HTTP status, repeated in the body |
List request
Returns fund movements for the account group, newest first.
Omitting from does not mean "everything". With no from, the window
defaults to the last seven days; with no to, it ends now. Ask for an older
period explicitly.
| Field | Type | Required | Notes |
|---|---|---|---|
nonce | string | Optional | A counter that must increase with each request. An alternative to tonce |
tonce | string | Optional | The current Unix time in microseconds. Send this or nonce |
userUuid | string | Optional | The user the credentials act for. Set automatically from the API key; sending it has no effect |
ccy | string | Optional | Restrict to one currency. Omit it for every currency in the group |
accountGroupUuid | string | Conditional | The account group to read. Required when your credential covers more than one |
from | integer | Optional | Start of the window, as Unix milliseconds. Defaults to seven days ago |
to | integer | Optional | End of the window, as Unix milliseconds. Defaults to now |
max | integer | Optional | How many records to return. Defaults to 50 — min 1, max 200 |
offset | integer | Optional | Index to start from, for paging |
List response
Carries the resultCode, description and timestamp fields common to every
/api/3 response.
| Field | Type | Notes |
|---|---|---|
transfers | Map[] | The movements in the window. Untyped in source; the shape is below |
count | int | How many records this response carries |
totalCount | int | How many exist in the window, for paging |
Transfer
One movement. Assembled per record rather than declared as a class, so the keys here are the contract and nothing more is returned.
| Field | Notes |
|---|---|
uuid | The movement's identifier, as returned by the transfer call |
ccy | The currency moved |
amount | How much moved, as a decimal string |
fromType | The balance type moved out of |
toType | The balance type moved into |
state | The movement's state, in readable form |
lastUpdated | When it last changed, as yyyy-MM-dd HH:mm:ss — a formatted string, not a timestamp, rendered in your user's time zone where one is set and otherwise UTC. Unlike every other date on the REST API, which is Unix milliseconds |
fromAccountGroupName | The account group moved out of. null unless both group names resolve, so treat its absence as "not stated" rather than "same group" |
toAccountGroupName | The account group moved into, on the same terms |