AUDD API Reference
Programmatic access to AUDD accounts over GraphQL: balances, wallets, AUD deposits and withdrawals, and market data.
Get a Bearer Token
Obtain a JWT to pass as Authorization: Bearer <token> on every request in this document, and to enable the Try It action on each endpoint below. The token expires together with the API key; sign in again to get a new one. Create API keys in your AUDD account settings.
Introduction
The AUDD API is a GraphQL API. Every request is a POST to https://vakotrade-audd.cryptosrvc.com/graphql with a JSON body containing query and variables, and an Authorization: Bearer <token> header. Obtain the token with service_signin or the form above.
The API covers what an AUDD account can do in the web app:
- Dashboard: total balance, portfolio value over time and asset allocation (Balances & History).
- Wallets: wallets, balances per asset, history, deposits, withdrawals and transfers between wallets (Wallets, Deposits, Withdrawals).
- Markets: currencies, instruments and prices (Markets, Subscriptions).
Amounts are decimal numbers in the currency's own units. AUDD is redeemable 1:1 for Australian dollars.
Request shape
POST /graphql HTTP/1.1
Host: vakotrade-audd.cryptosrvc.com
Authorization: Bearer <token>
Content-Type: application/json
{
"query": "query { accounts_balances(hide_zero_balances: on) { currency_id total_balance free_balance } }",
"variables": {}
}
A single request may contain at most 9 aliased fields; larger documents are rejected.
Errors
Errors are returned in the errors array of the response body. extensions.code carries the machine-readable code (for example GQL_ERR.THROTTLE.SOFT_LOCK when a rate limit is exceeded); the message ends with a request reference in parentheses. Quote that reference when contacting support.
Version
Platform release 4.35, November 2026.
Deposit AUD by bank transfer
- The user completes KYC in the AUDD web app. A personal virtual bank account is opened for them automatically.
- Call
payments_routeswithcurrency_id: "AUDD"and readfiat_deposit_propertieson the bank-transfer route: account name, BSB, account number and reference. - The user (or your treasury) sends AUD to that account from any Australian bank.
- When the funds clear, the same amount of AUDD is minted and credited to the user's
MAINwallet. The deposit appears inpayments(type: deposit) and as apaymententry inaccount_transactions.
Withdraw to an Australian bank account
- Find the withdrawal route:
payments_routeswithcurrency_id: "AUDD", the entry withis_crypto_to_fiat: onandwithdrawal_enabled: on. - Optionally check
calculate_payments_limitsandpayments_fees. - Call
create_withdrawal_fiatwith the route, the amount,fiat_beneficiary_account_numberand afiat_bsbproperty. Saved accounts fromuser.audd_withdrawal_bank_accountscan be reused. - Poll
paymentswith the returnedpayment_id:new→processing→completed(orrejected, in which case the funds are returned to the wallet).
Authentication
Exchange an API key and secret for a bearer token.
mutation service_signin Sign in with an API key and secret; returns the bearer JWT.
Public: no Authorization header. Send the returned jwt as Authorization: Bearer <jwt> on every other request. The token is valid until the API key's own expires_at; there is no refresh call. Sign in again to obtain a new token.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
service_api_key |
String! |
required | API key ID (api_key_id). |
service_api_secret |
String! |
required | API secret (shown only once, when the key is created). |
Response
Fields of SignInResult selected in the operation below.
| Field | Type | Description |
|---|---|---|
jwt |
String! |
Bearer token (RS256-signed JWT). |
expires_at |
Float! |
Token expiry, Unix time in milliseconds. |
GraphQL Operation
mutation service_signin($service_api_key: String!, $service_api_secret: String!) {
service_signin(service_api_key: $service_api_key, service_api_secret: $service_api_secret) {
jwt expires_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation service_signin($service_api_key: String!, $service_api_secret: String!) { service_signin(service_api_key: $service_api_key, service_api_secret: $service_api_secret) { jwt expires_at } }","variables":{"service_api_key":"YOUR_API_KEY","service_api_secret":"YOUR_API_SECRET"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Content-Type": "application/json",
}
payload = {
"query": """mutation service_signin($service_api_key: String!, $service_api_secret: String!) { service_signin(service_api_key: $service_api_key, service_api_secret: $service_api_secret) { jwt expires_at } }""",
"variables": {
"service_api_key": "YOUR_API_KEY",
"service_api_secret": "YOUR_API_SECRET"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation service_signin($service_api_key: String!, $service_api_secret: String!) { service_signin(service_api_key: $service_api_key, service_api_secret: $service_api_secret) { jwt expires_at } }`,
variables: {
"service_api_key": "YOUR_API_KEY",
"service_api_secret": "YOUR_API_SECRET"
},
}),
});
const data = await response.json();
console.log(data);The Get a Bearer Token form at the top of this page calls this mutation.
Wallets
List, create and manage wallets, and move funds between them. Every user has a MAIN wallet; additional PERSONAL wallets can be created (the Wallets tab and Create Wallet / Transfer buttons in the web app).
query
wallets
List the user's wallets (use the returned wallet_id in wallet-scoped operations).
The MAIN wallet is always returned first (it is not stored as a row, so do not select serial_id on it). Wallet-scoped operations default to MAIN when wallet_id is omitted.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
wallet_id |
String |
optional | Wallet filter. |
name |
String |
optional | Filter by name. |
description |
String |
optional | Filter by description. |
is_active |
ToggleSwitch |
optional | Wallet status filter. Defaults to on; the MAIN wallet is included only when filtering for active wallets. |
type |
WalletType |
optional | Filter by type. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
dateRange |
DateRangeInput |
optional | Filter by wallet creation date. |
Response
Fields of WalletsResult selected in the operation below.
| Field | Type | Description |
|---|---|---|
wallets |
[Wallet!]! |
Wallets of the user, MAIN first: wallet_id, name, description, type, is_active, created_at. |
personal_wallets_limit |
Float! |
Maximum number of personal wallets the user may create. |
GraphQL Operation
query wallets($wallet_id: String, $name: String, $description: String, $is_active: ToggleSwitch, $type: WalletType, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) {
wallets(wallet_id: $wallet_id, name: $name, description: $description, is_active: $is_active, type: $type, pager: $pager, sort: $sort, dateRange: $dateRange) {
wallets { wallet_id name description type is_active created_at } personal_wallets_limit
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query wallets($wallet_id: String, $name: String, $description: String, $is_active: ToggleSwitch, $type: WalletType, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallets(wallet_id: $wallet_id, name: $name, description: $description, is_active: $is_active, type: $type, pager: $pager, sort: $sort, dateRange: $dateRange) { wallets { wallet_id name description type is_active created_at } personal_wallets_limit } }","variables":{}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query wallets($wallet_id: String, $name: String, $description: String, $is_active: ToggleSwitch, $type: WalletType, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallets(wallet_id: $wallet_id, name: $name, description: $description, is_active: $is_active, type: $type, pager: $pager, sort: $sort, dateRange: $dateRange) { wallets { wallet_id name description type is_active created_at } personal_wallets_limit } }""",
"variables": {},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query wallets($wallet_id: String, $name: String, $description: String, $is_active: ToggleSwitch, $type: WalletType, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallets(wallet_id: $wallet_id, name: $name, description: $description, is_active: $is_active, type: $type, pager: $pager, sort: $sort, dateRange: $dateRange) { wallets { wallet_id name description type is_active created_at } personal_wallets_limit } }`,
variables: {},
}),
});
const data = await response.json();
console.log(data);Try It
mutation create_wallet Create a personal wallet.
Traders can create PERSONAL wallets only (the default). The name must be unique among the user's wallets, and the number of personal wallets is capped by personal_wallets_limit (see wallets).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
name |
String! |
required | Wallet name. |
description |
String |
optional | Free-text description. |
type |
WalletType |
optional, default PERSONAL |
Wallet type. Must be PERSONAL for traders. |
wallet_meta_properties |
[WalletMetaPropertyInput!] |
optional | Display properties (e.g. icon_name, icon_color). When omitted, type-based defaults are applied. |
Response
Fields of Wallet selected in the operation below.
| Field | Type | Description |
|---|---|---|
wallet_id |
String! |
New wallet ID. |
name |
String! |
Name. |
description |
String |
Description. |
type |
WalletType |
Wallet type. |
is_active |
ToggleSwitch! |
Active flag. |
created_at |
String! |
Creation time. |
GraphQL Operation
mutation create_wallet($name: String!, $description: String) {
create_wallet(name: $name, description: $description) {
wallet_id name description type is_active created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation create_wallet($name: String!, $description: String) { create_wallet(name: $name, description: $description) { wallet_id name description type is_active created_at } }","variables":{"name":"Savings","description":"Long-term AUDD"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation create_wallet($name: String!, $description: String) { create_wallet(name: $name, description: $description) { wallet_id name description type is_active created_at } }""",
"variables": {
"name": "Savings",
"description": "Long-term AUDD"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation create_wallet($name: String!, $description: String) { create_wallet(name: $name, description: $description) { wallet_id name description type is_active created_at } }`,
variables: {
"name": "Savings",
"description": "Long-term AUDD"
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation update_wallet Rename a wallet or change its description.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
wallet_id |
String! |
required | Wallet to update. |
name |
String |
optional | New name. |
description |
String |
optional | New description. |
Response
Fields of Wallet selected in the operation below.
| Field | Type | Description |
|---|---|---|
wallet_id |
String! |
Wallet ID. |
name |
String! |
Name. |
description |
String |
Description. |
GraphQL Operation
mutation update_wallet($wallet_id: String!, $name: String, $description: String) {
update_wallet(wallet_id: $wallet_id, name: $name, description: $description) {
wallet_id name description
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation update_wallet($wallet_id: String!, $name: String, $description: String) { update_wallet(wallet_id: $wallet_id, name: $name, description: $description) { wallet_id name description } }","variables":{"wallet_id":"WALLET_ID","name":"Savings 2"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation update_wallet($wallet_id: String!, $name: String, $description: String) { update_wallet(wallet_id: $wallet_id, name: $name, description: $description) { wallet_id name description } }""",
"variables": {
"wallet_id": "WALLET_ID",
"name": "Savings 2"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation update_wallet($wallet_id: String!, $name: String, $description: String) { update_wallet(wallet_id: $wallet_id, name: $name, description: $description) { wallet_id name description } }`,
variables: {
"wallet_id": "WALLET_ID",
"name": "Savings 2"
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation deactivate_wallet Permanently deactivate a wallet (zero balance required).
The wallet must have a zero balance in every currency. This cannot be undone.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
wallet_id |
String! |
required | Wallet to deactivate. |
Response
Fields of Wallet selected in the operation below.
| Field | Type | Description |
|---|---|---|
wallet_id |
String! |
Wallet ID. |
name |
String! |
Name. |
is_active |
ToggleSwitch! |
off after deactivation. |
GraphQL Operation
mutation deactivate_wallet($wallet_id: String!) {
deactivate_wallet(wallet_id: $wallet_id) {
wallet_id name is_active
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation deactivate_wallet($wallet_id: String!) { deactivate_wallet(wallet_id: $wallet_id) { wallet_id name is_active } }","variables":{"wallet_id":"WALLET_ID"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation deactivate_wallet($wallet_id: String!) { deactivate_wallet(wallet_id: $wallet_id) { wallet_id name is_active } }""",
"variables": {
"wallet_id": "WALLET_ID"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation deactivate_wallet($wallet_id: String!) { deactivate_wallet(wallet_id: $wallet_id) { wallet_id name is_active } }`,
variables: {
"wallet_id": "WALLET_ID"
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation create_wallet_transfer Move funds between two of the user's wallets.
Both wallets must belong to the authenticated user. The transfer is booked immediately as two wallet_transfer ledger entries (see account_transactions).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
from_wallet_id |
String! |
required | Source wallet (MAIN or a personal wallet ID). |
to_wallet_id |
String! |
required | Destination wallet. |
currency_id |
String! |
required | Currency to move, e.g. AUDD. |
amount |
Float! |
required | Amount to move. |
Response
Fields of WalletTransfer selected in the operation below.
| Field | Type | Description |
|---|---|---|
transfer_id |
String! |
Transfer ID. |
from_wallet_id |
String! |
Source wallet. |
to_wallet_id |
String! |
Destination wallet. |
currency_id |
String! |
Currency. |
amount |
Float! |
Amount. |
from_post_balance |
Float! |
Source balance after the transfer. |
to_post_balance |
Float! |
Destination balance after the transfer. |
created_at |
String! |
Creation time. |
GraphQL Operation
mutation create_wallet_transfer($from_wallet_id: String!, $to_wallet_id: String!, $currency_id: String!, $amount: Float!) {
create_wallet_transfer(from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, amount: $amount) {
transfer_id from_wallet_id to_wallet_id currency_id amount from_post_balance to_post_balance created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation create_wallet_transfer($from_wallet_id: String!, $to_wallet_id: String!, $currency_id: String!, $amount: Float!) { create_wallet_transfer(from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, amount: $amount) { transfer_id from_wallet_id to_wallet_id currency_id amount from_post_balance to_post_balance created_at } }","variables":{"from_wallet_id":"MAIN","to_wallet_id":"WALLET_ID","currency_id":"AUDD","amount":100}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation create_wallet_transfer($from_wallet_id: String!, $to_wallet_id: String!, $currency_id: String!, $amount: Float!) { create_wallet_transfer(from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, amount: $amount) { transfer_id from_wallet_id to_wallet_id currency_id amount from_post_balance to_post_balance created_at } }""",
"variables": {
"from_wallet_id": "MAIN",
"to_wallet_id": "WALLET_ID",
"currency_id": "AUDD",
"amount": 100
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation create_wallet_transfer($from_wallet_id: String!, $to_wallet_id: String!, $currency_id: String!, $amount: Float!) { create_wallet_transfer(from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, amount: $amount) { transfer_id from_wallet_id to_wallet_id currency_id amount from_post_balance to_post_balance created_at } }`,
variables: {
"from_wallet_id": "MAIN",
"to_wallet_id": "WALLET_ID",
"currency_id": "AUDD",
"amount": 100
},
}),
});
const data = await response.json();
console.log(data);Try It
query wallet_transfers List transfers between the user's wallets.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
transfer_id |
String |
optional | Filter by transfer_id. |
from_wallet_id |
String |
optional | Filter by source wallet. |
to_wallet_id |
String |
optional | Filter by destination wallet. |
currency_id |
String |
optional | Currency filter. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
dateRange |
DateRangeInput |
optional | Date-time window (time_from, time_to). |
Response
Fields of WalletTransfer selected in the operation below.
| Field | Type | Description |
|---|---|---|
transfer_id |
String! |
Transfer ID. |
from_wallet_id |
String! |
Source wallet. |
to_wallet_id |
String! |
Destination wallet. |
currency_id |
String! |
Currency. |
amount |
Float! |
Amount. |
created_at |
String! |
Creation time. |
GraphQL Operation
query wallet_transfers($transfer_id: String, $from_wallet_id: String, $to_wallet_id: String, $currency_id: String, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) {
wallet_transfers(transfer_id: $transfer_id, from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, pager: $pager, sort: $sort, dateRange: $dateRange) {
transfer_id from_wallet_id to_wallet_id currency_id amount created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query wallet_transfers($transfer_id: String, $from_wallet_id: String, $to_wallet_id: String, $currency_id: String, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallet_transfers(transfer_id: $transfer_id, from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, pager: $pager, sort: $sort, dateRange: $dateRange) { transfer_id from_wallet_id to_wallet_id currency_id amount created_at } }","variables":{}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query wallet_transfers($transfer_id: String, $from_wallet_id: String, $to_wallet_id: String, $currency_id: String, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallet_transfers(transfer_id: $transfer_id, from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, pager: $pager, sort: $sort, dateRange: $dateRange) { transfer_id from_wallet_id to_wallet_id currency_id amount created_at } }""",
"variables": {},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query wallet_transfers($transfer_id: String, $from_wallet_id: String, $to_wallet_id: String, $currency_id: String, $pager: PagerInput, $sort: SortInput, $dateRange: DateRangeInput) { wallet_transfers(transfer_id: $transfer_id, from_wallet_id: $from_wallet_id, to_wallet_id: $to_wallet_id, currency_id: $currency_id, pager: $pager, sort: $sort, dateRange: $dateRange) { transfer_id from_wallet_id to_wallet_id currency_id amount created_at } }`,
variables: {},
}),
});
const data = await response.json();
console.log(data);Try It
Balances & History
Balances, portfolio value and ledger history: the data behind the Dashboard, the Total Balance panel and the Assets / History tabs.
query accounts_balances Read current balances per currency, optionally valued in AUD.
total_balance_quoted and free_balance_quoted take a quote_currency_id argument on the field itself; the operation below values every balance in AUDD.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
currency_id |
String |
optional | Currency filter. |
hide_zero_balances |
ToggleSwitch |
optional, default off |
With on, rows whose total_balance is 0 are removed (the web app's Hide Zero option). |
wallet_id |
String |
optional | Wallet to read. When omitted, balances of all the user's wallets are returned. |
omit_currencies |
[String!] |
optional | Currencies to exclude from the result. |
Response
Fields of AccountBalance selected in the operation below.
| Field | Type | Description |
|---|---|---|
currency_id |
String! |
Currency ID. |
wallet_id |
String |
Wallet the balance belongs to. |
total_balance |
Float! |
Total balance. |
free_balance |
Float! |
Available balance (can be withdrawn or transferred). |
exposed_balance |
Float! |
Reserved balance (e.g. pending withdrawals). |
total_balance_quoted |
Float |
Total balance converted into quote_currency_id. |
GraphQL Operation
query accounts_balances($currency_id: String, $hide_zero_balances: ToggleSwitch, $wallet_id: String, $omit_currencies: [String!]) {
accounts_balances(currency_id: $currency_id, hide_zero_balances: $hide_zero_balances, wallet_id: $wallet_id, omit_currencies: $omit_currencies) {
currency_id wallet_id total_balance free_balance exposed_balance total_balance_quoted(quote_currency_id: "AUDD")
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query accounts_balances($currency_id: String, $hide_zero_balances: ToggleSwitch, $wallet_id: String, $omit_currencies: [String!]) { accounts_balances(currency_id: $currency_id, hide_zero_balances: $hide_zero_balances, wallet_id: $wallet_id, omit_currencies: $omit_currencies) { currency_id wallet_id total_balance free_balance exposed_balance total_balance_quoted(quote_currency_id: \"AUDD\") } }","variables":{"hide_zero_balances":"on"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query accounts_balances($currency_id: String, $hide_zero_balances: ToggleSwitch, $wallet_id: String, $omit_currencies: [String!]) { accounts_balances(currency_id: $currency_id, hide_zero_balances: $hide_zero_balances, wallet_id: $wallet_id, omit_currencies: $omit_currencies) { currency_id wallet_id total_balance free_balance exposed_balance total_balance_quoted(quote_currency_id: "AUDD") } }""",
"variables": {
"hide_zero_balances": "on"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query accounts_balances($currency_id: String, $hide_zero_balances: ToggleSwitch, $wallet_id: String, $omit_currencies: [String!]) { accounts_balances(currency_id: $currency_id, hide_zero_balances: $hide_zero_balances, wallet_id: $wallet_id, omit_currencies: $omit_currencies) { currency_id wallet_id total_balance free_balance exposed_balance total_balance_quoted(quote_currency_id: "AUDD") } }`,
variables: {
"hide_zero_balances": "on"
},
}),
});
const data = await response.json();
console.log(data);Try It
query portfolio_history_v2 Portfolio value over time with PnL and ROI (the Dashboard chart and change %).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
period |
PortfolioHistoryInterval! |
required | Rolling period: day (24 h, hourly points), week (7 days, daily), month (30 days, daily), year (12 months, monthly), all (lifetime). |
wallet_id |
String |
optional | Limit to one wallet. When omitted, all wallets are aggregated. |
currency_id |
String |
optional | Currency the values are expressed in. Defaults to the user's primary_market_currency. |
Response
Fields of PortfolioHistoryResult selected in the operation below.
| Field | Type | Description |
|---|---|---|
currency_id |
String |
Currency every value is expressed in. |
pnl |
Float! |
Profit / loss over the period. |
roi |
Float! |
Return over the period, in percent. |
points |
[PortfolioHistoryPoint!]! |
Series of { ts, value }; ts is Unix time in milliseconds. |
GraphQL Operation
query portfolio_history_v2($period: PortfolioHistoryInterval!, $wallet_id: String, $currency_id: String) {
portfolio_history_v2(period: $period, wallet_id: $wallet_id, currency_id: $currency_id) {
currency_id pnl roi points { ts value }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query portfolio_history_v2($period: PortfolioHistoryInterval!, $wallet_id: String, $currency_id: String) { portfolio_history_v2(period: $period, wallet_id: $wallet_id, currency_id: $currency_id) { currency_id pnl roi points { ts value } } }","variables":{"period":"week","currency_id":"AUDD"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query portfolio_history_v2($period: PortfolioHistoryInterval!, $wallet_id: String, $currency_id: String) { portfolio_history_v2(period: $period, wallet_id: $wallet_id, currency_id: $currency_id) { currency_id pnl roi points { ts value } } }""",
"variables": {
"period": "week",
"currency_id": "AUDD"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query portfolio_history_v2($period: PortfolioHistoryInterval!, $wallet_id: String, $currency_id: String) { portfolio_history_v2(period: $period, wallet_id: $wallet_id, currency_id: $currency_id) { currency_id pnl roi points { ts value } } }`,
variables: {
"period": "week",
"currency_id": "AUDD"
},
}),
});
const data = await response.json();
console.log(data);Try It
query account_transactions Read the account ledger (deposits, withdrawals, fees, wallet transfers).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
account_transaction_id |
String |
optional | Filter by account_transaction_id. |
payment_id |
String |
optional | Entries belonging to one payment. |
currency_id |
String |
optional | Currency filter. |
transaction_class |
AccountTransactionClass |
optional | Filter by class (payment, fee, wallet_transfer, ...). |
type |
AccountTransactionType |
optional | Filter by debit / credit. |
search |
String |
optional | Search term. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
dateRange |
DateRangeInput |
optional | Date-time window (time_from, time_to). When omitted the server applies a default window (14 days back from now in the default platform settings); a range wider than the configured maximum (1 year for user-scoped queries by default) is rejected. Pass it explicitly to read older history. |
serialIdRange |
SerialIdRangeInput |
optional | Filter by serial ID range. |
wallet_id |
String |
optional | Wallet filter. |
reference |
String |
optional | Client reference. |
Response
Fields of AccountTransaction selected in the operation below.
| Field | Type | Description |
|---|---|---|
account_transaction_id |
String! |
Transaction ID. |
currency_id |
String! |
Currency. |
transaction_class |
AccountTransactionClass! |
What produced the entry. |
type |
AccountTransactionType! |
debit or credit. |
amount |
Float! |
Amount. |
post_balance |
Float! |
Account balance after this entry. |
payment_id |
String |
Related payment, for payment entries. |
created_at_iso |
String! |
Creation time (ISO 8601). |
GraphQL Operation
query account_transactions($currency_id: String, $transaction_class: AccountTransactionClass, $pager: PagerInput, $wallet_id: String) {
account_transactions(currency_id: $currency_id, transaction_class: $transaction_class, pager: $pager, wallet_id: $wallet_id) {
account_transaction_id currency_id transaction_class type amount post_balance payment_id created_at_iso
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query account_transactions($currency_id: String, $transaction_class: AccountTransactionClass, $pager: PagerInput, $wallet_id: String) { account_transactions(currency_id: $currency_id, transaction_class: $transaction_class, pager: $pager, wallet_id: $wallet_id) { account_transaction_id currency_id transaction_class type amount post_balance payment_id created_at_iso } }","variables":{"wallet_id":"MAIN","pager":{"limit":20,"offset":0}}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query account_transactions($currency_id: String, $transaction_class: AccountTransactionClass, $pager: PagerInput, $wallet_id: String) { account_transactions(currency_id: $currency_id, transaction_class: $transaction_class, pager: $pager, wallet_id: $wallet_id) { account_transaction_id currency_id transaction_class type amount post_balance payment_id created_at_iso } }""",
"variables": {
"wallet_id": "MAIN",
"pager": {
"limit": 20,
"offset": 0
}
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query account_transactions($currency_id: String, $transaction_class: AccountTransactionClass, $pager: PagerInput, $wallet_id: String) { account_transactions(currency_id: $currency_id, transaction_class: $transaction_class, pager: $pager, wallet_id: $wallet_id) { account_transaction_id currency_id transaction_class type amount post_balance payment_id created_at_iso } }`,
variables: {
"wallet_id": "MAIN",
"pager": {
"limit": 20,
"offset": 0
}
},
}),
});
const data = await response.json();
console.log(data);Try It
Deposits
Fund the account: by bank transfer in AUD (credited as AUDD), or on-chain in AUDD where a crypto route is enabled. Start with payments_routes to see which methods are available to the user.
query payments_routes List available deposit / withdrawal methods, with the user's bank deposit details.
For the AUD bank-transfer route, fiat_deposit_properties returns the user's own virtual account: the account name, BSB, account number and payment reference to use for the transfer. AUD received on that account is minted into AUDD and credited to the user's MAIN wallet. The list is empty until the user's KYC is approved.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
payment_route_id |
String |
optional | Filter by payment_route_id. |
currency_id |
String |
optional | Currency filter, e.g. AUDD. |
psp_service_id |
String |
optional | Filter by payment service provider. |
crypto_network |
String |
optional | Filter by network. |
verification_type |
VerificationType |
optional | Filter by verification_type. |
currency_type |
CurrencyType |
optional | Filter by currency_type. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
Response
Fields of PaymentRoute selected in the operation below.
| Field | Type | Description |
|---|---|---|
payment_route_id |
String! |
Route ID (pass it to deposit and withdrawal operations). |
name |
String |
Display name. |
currency_id |
String! |
Currency. |
psp_service_id |
String! |
Payment service provider. |
crypto_network |
String |
Network, for on-chain routes. |
fiat_transfer_type |
String |
Fiat transfer type. |
is_crypto_to_fiat |
ToggleSwitch |
on for the AUDD → AUD bank withdrawal route. |
deposit_enabled |
ToggleSwitch |
Deposits are enabled on this route. |
withdrawal_enabled |
ToggleSwitch |
Withdrawals are enabled on this route. |
verification_type |
VerificationType |
Second factor required for withdrawals made from the web app. |
is_active |
ToggleSwitch! |
Route is available. |
fiat_deposit_properties |
[FiatDepositProperty!] |
Bank details for deposits by bank transfer, as { name, value } pairs ready to display. |
GraphQL Operation
query payments_routes($currency_id: String) {
payments_routes(currency_id: $currency_id) {
payment_route_id name currency_id psp_service_id crypto_network fiat_transfer_type is_crypto_to_fiat deposit_enabled withdrawal_enabled verification_type is_active fiat_deposit_properties { name value }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query payments_routes($currency_id: String) { payments_routes(currency_id: $currency_id) { payment_route_id name currency_id psp_service_id crypto_network fiat_transfer_type is_crypto_to_fiat deposit_enabled withdrawal_enabled verification_type is_active fiat_deposit_properties { name value } } }","variables":{"currency_id":"AUDD"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query payments_routes($currency_id: String) { payments_routes(currency_id: $currency_id) { payment_route_id name currency_id psp_service_id crypto_network fiat_transfer_type is_crypto_to_fiat deposit_enabled withdrawal_enabled verification_type is_active fiat_deposit_properties { name value } } }""",
"variables": {
"currency_id": "AUDD"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query payments_routes($currency_id: String) { payments_routes(currency_id: $currency_id) { payment_route_id name currency_id psp_service_id crypto_network fiat_transfer_type is_crypto_to_fiat deposit_enabled withdrawal_enabled verification_type is_active fiat_deposit_properties { name value } } }`,
variables: {
"currency_id": "AUDD"
},
}),
});
const data = await response.json();
console.log(data);Try It
query deposit_address_crypto Get (or generate, if none exists) an on-chain AUDD deposit address.
Declared as a query, but generates a new address when none exists yet. Use the crypto_network and payment_route_id of a crypto route from payments_routes.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
currency_id |
String! |
required | Currency, e.g. AUDD. |
network |
String |
optional | Network of the address. |
payment_route_id |
String |
optional | Payment route for the currency. |
psp_service_id |
String |
optional | Payment service provider. |
reference |
String |
optional | Client reference. |
address_type |
String |
optional | Address type. |
Response
Fields of DepositAddressCrypto selected in the operation below.
| Field | Type | Description |
|---|---|---|
deposit_address_crypto_id |
String! |
Deposit address ID. |
currency_id |
String! |
Currency. |
network |
String |
Network. |
address |
String |
Deposit address. |
address_tag_type |
CryptoAddressTagType |
Tag type, for networks that use one. |
address_tag_value |
String |
Tag / memo value, for networks that use one. |
created_at |
String! |
Creation time. |
GraphQL Operation
query deposit_address_crypto($currency_id: String!, $network: String, $payment_route_id: String) {
deposit_address_crypto(currency_id: $currency_id, network: $network, payment_route_id: $payment_route_id) {
deposit_address_crypto_id currency_id network address address_tag_type address_tag_value created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query deposit_address_crypto($currency_id: String!, $network: String, $payment_route_id: String) { deposit_address_crypto(currency_id: $currency_id, network: $network, payment_route_id: $payment_route_id) { deposit_address_crypto_id currency_id network address address_tag_type address_tag_value created_at } }","variables":{"currency_id":"AUDD","network":"NETWORK","payment_route_id":"PAYMENT_ROUTE_ID"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query deposit_address_crypto($currency_id: String!, $network: String, $payment_route_id: String) { deposit_address_crypto(currency_id: $currency_id, network: $network, payment_route_id: $payment_route_id) { deposit_address_crypto_id currency_id network address address_tag_type address_tag_value created_at } }""",
"variables": {
"currency_id": "AUDD",
"network": "NETWORK",
"payment_route_id": "PAYMENT_ROUTE_ID"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query deposit_address_crypto($currency_id: String!, $network: String, $payment_route_id: String) { deposit_address_crypto(currency_id: $currency_id, network: $network, payment_route_id: $payment_route_id) { deposit_address_crypto_id currency_id network address address_tag_type address_tag_value created_at } }`,
variables: {
"currency_id": "AUDD",
"network": "NETWORK",
"payment_route_id": "PAYMENT_ROUTE_ID"
},
}),
});
const data = await response.json();
console.log(data);Try It
Withdrawals
Redeem AUDD to an Australian bank account (paid out in AUD), or send AUDD on-chain where a crypto route is enabled. See the withdraw to a bank account walkthrough.
query user Read the user's saved withdrawal bank accounts.
Bank accounts are saved automatically the first time a withdrawal is made to a new BSB and account number. Show only entries with is_show: on; the full list is returned so that it can be sent back unchanged through update_user.
Inputs
No inputs.
Response
Fields of User selected in the operation below.
| Field | Type | Description |
|---|---|---|
user_id |
String! |
User ID. |
email |
String |
Email. |
primary_market_currency |
String |
Default currency for valuations. |
audd_withdrawal_bank_accounts |
[AuddWithdrawalBankAccount!] |
Saved bank accounts: id, bsb, accountNumber, accountName, is_show. |
GraphQL Operation
query user {
user {
user_id email primary_market_currency audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query user { user { user_id email primary_market_currency audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }","variables":{}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query user { user { user_id email primary_market_currency audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }""",
"variables": {},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query user { user { user_id email primary_market_currency audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }`,
variables: {},
}),
});
const data = await response.json();
console.log(data);Try It
No inputs.
mutation update_user Rename or hide saved withdrawal bank accounts.
audd_withdrawal_bank_accounts replaces the stored list. Read it with user, change the entries you need (for example set is_show: off or edit accountName), and send the complete list back; entries left out are removed. To add an account, make a withdrawal to it.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
audd_withdrawal_bank_accounts |
[AuddWithdrawalBankAccountItem!] |
optional | Complete list of saved bank accounts. |
Response
Fields of User selected in the operation below.
| Field | Type | Description |
|---|---|---|
audd_withdrawal_bank_accounts |
[AuddWithdrawalBankAccount!] |
The stored list after the update. |
GraphQL Operation
mutation update_user($audd_withdrawal_bank_accounts: [AuddWithdrawalBankAccountItem!]) {
update_user(audd_withdrawal_bank_accounts: $audd_withdrawal_bank_accounts) {
audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation update_user($audd_withdrawal_bank_accounts: [AuddWithdrawalBankAccountItem!]) { update_user(audd_withdrawal_bank_accounts: $audd_withdrawal_bank_accounts) { audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }","variables":{"audd_withdrawal_bank_accounts":[{"id":"BANK_ACCOUNT_ID","bsb":"062-000","accountNumber":"12345678","accountName":"Everyday account","is_show":"on"}]}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation update_user($audd_withdrawal_bank_accounts: [AuddWithdrawalBankAccountItem!]) { update_user(audd_withdrawal_bank_accounts: $audd_withdrawal_bank_accounts) { audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }""",
"variables": {
"audd_withdrawal_bank_accounts": [
{
"id": "BANK_ACCOUNT_ID",
"bsb": "062-000",
"accountNumber": "12345678",
"accountName": "Everyday account",
"is_show": "on"
}
]
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation update_user($audd_withdrawal_bank_accounts: [AuddWithdrawalBankAccountItem!]) { update_user(audd_withdrawal_bank_accounts: $audd_withdrawal_bank_accounts) { audd_withdrawal_bank_accounts { id bsb accountNumber accountName is_show } } }`,
variables: {
"audd_withdrawal_bank_accounts": [
{
"id": "BANK_ACCOUNT_ID",
"bsb": "062-000",
"accountNumber": "12345678",
"accountName": "Everyday account",
"is_show": "on"
}
]
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation calculate_payments_limits Remaining daily / weekly / monthly withdrawal or deposit limits.
Declared as a mutation even though it only reads data.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
notion_currency |
String! |
required | Currency the limits are expressed in. |
currency_id |
String! |
required | Currency of the payment. |
type |
PaymentType! |
required | deposit or withdrawal. |
Response
Fields of LimitsStatus selected in the operation below.
| Field | Type | Description |
|---|---|---|
payments |
LimitsStatusPeriods! |
Limits per period; each of daily, weekly, monthly has limit, filled, remaining. |
GraphQL Operation
mutation calculate_payments_limits($notion_currency: String!, $currency_id: String!, $type: PaymentType!) {
calculate_payments_limits(notion_currency: $notion_currency, currency_id: $currency_id, type: $type) {
payments { daily { limit filled remaining } weekly { limit filled remaining } monthly { limit filled remaining } }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation calculate_payments_limits($notion_currency: String!, $currency_id: String!, $type: PaymentType!) { calculate_payments_limits(notion_currency: $notion_currency, currency_id: $currency_id, type: $type) { payments { daily { limit filled remaining } weekly { limit filled remaining } monthly { limit filled remaining } } } }","variables":{"notion_currency":"AUDD","currency_id":"AUDD","type":"withdrawal"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation calculate_payments_limits($notion_currency: String!, $currency_id: String!, $type: PaymentType!) { calculate_payments_limits(notion_currency: $notion_currency, currency_id: $currency_id, type: $type) { payments { daily { limit filled remaining } weekly { limit filled remaining } monthly { limit filled remaining } } } }""",
"variables": {
"notion_currency": "AUDD",
"currency_id": "AUDD",
"type": "withdrawal"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation calculate_payments_limits($notion_currency: String!, $currency_id: String!, $type: PaymentType!) { calculate_payments_limits(notion_currency: $notion_currency, currency_id: $currency_id, type: $type) { payments { daily { limit filled remaining } weekly { limit filled remaining } monthly { limit filled remaining } } } }`,
variables: {
"notion_currency": "AUDD",
"currency_id": "AUDD",
"type": "withdrawal"
},
}),
});
const data = await response.json();
console.log(data);Try It
query payments_fees Deposit and withdrawal fee schedule.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
payment_route_id |
String |
optional | Filter by payment_route_id. |
currency_id |
String |
optional | Currency filter. |
fee_group_id |
String |
optional | Filter by fee group. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
calculation_type |
FeeCalculationType |
optional | Filter by calculation_type. |
Response
Fields of PaymentFee selected in the operation below.
| Field | Type | Description |
|---|---|---|
payment_route_id |
String |
Route the fee applies to. |
currency_id |
String! |
Currency. |
crypto_network |
String |
Network, for on-chain routes. |
withdrawal_flat_fee |
Float |
Fixed withdrawal fee. |
withdrawal_progressive_fee |
Float |
Percentage withdrawal fee. |
deposit_flat_fee |
Float |
Fixed deposit fee. |
deposit_progressive_fee |
Float |
Percentage deposit fee. |
calculation_type |
FeeCalculationType |
How flat and percentage fees combine (sum or max). |
GraphQL Operation
query payments_fees($payment_route_id: String, $currency_id: String) {
payments_fees(payment_route_id: $payment_route_id, currency_id: $currency_id) {
payment_route_id currency_id crypto_network withdrawal_flat_fee withdrawal_progressive_fee deposit_flat_fee deposit_progressive_fee calculation_type
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query payments_fees($payment_route_id: String, $currency_id: String) { payments_fees(payment_route_id: $payment_route_id, currency_id: $currency_id) { payment_route_id currency_id crypto_network withdrawal_flat_fee withdrawal_progressive_fee deposit_flat_fee deposit_progressive_fee calculation_type } }","variables":{"currency_id":"AUDD"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query payments_fees($payment_route_id: String, $currency_id: String) { payments_fees(payment_route_id: $payment_route_id, currency_id: $currency_id) { payment_route_id currency_id crypto_network withdrawal_flat_fee withdrawal_progressive_fee deposit_flat_fee deposit_progressive_fee calculation_type } }""",
"variables": {
"currency_id": "AUDD"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query payments_fees($payment_route_id: String, $currency_id: String) { payments_fees(payment_route_id: $payment_route_id, currency_id: $currency_id) { payment_route_id currency_id crypto_network withdrawal_flat_fee withdrawal_progressive_fee deposit_flat_fee deposit_progressive_fee calculation_type } }`,
variables: {
"currency_id": "AUDD"
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation create_withdrawal_fiat Withdraw AUDD to an Australian bank account (paid out in AUD).
Use the route from payments_routes with is_crypto_to_fiat: on. Send the account number in fiat_beneficiary_account_number and the BSB as a property named fiat_bsb (062000 and 062-000 are both accepted). The bank account is registered for the user on first use and saved to user.audd_withdrawal_bank_accounts.
The withdrawal is created with status: new and moves to processing once approved; the AUDD is redeemed and AUD is paid to the bank account, after which the payment becomes completed. Track it with payments. Requires approved KYC.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
payment_route_id |
String |
optional | Withdrawal route. If omitted, the route is resolved from currency_id (+ optional psp_service_id, fiat_transfer_type). |
amount |
Float! |
required | Amount of AUDD to withdraw. |
fiat_beneficiary_account_number |
String |
optional | Bank account number. Required for AUDD bank withdrawals. |
properties |
[FiatDepositPropertyInput!] |
optional, default [] |
Additional properties. Required for AUDD: [{ "name": "fiat_bsb", "value": "062-000" }]. |
currency_id |
String |
optional | Currency, used to resolve the route when payment_route_id is omitted. |
psp_service_id |
String |
optional | Payment service provider, used to resolve the route when payment_route_id is omitted. |
fees_included |
ToggleSwitch |
optional, default on |
With on the fee is deducted from amount; with off it is charged on top. |
wallet_id |
String! |
optional, default MAIN |
Source wallet. |
reference |
String |
optional | Client reference (filterable in payments). |
message |
String |
optional | Message stored with the payment. |
mfa_token |
String |
optional | TOTP code, when the route requires verification. Not checked for tokens issued from an API key. |
Response
Fields of Payment selected in the operation below.
| Field | Type | Description |
|---|---|---|
payment_id |
String! |
Payment ID. |
currency_id |
String! |
Currency. |
amount |
Float! |
Amount. |
fee_amount |
Float |
Fee amount. |
status |
PaymentStatus! |
Processing status. |
approval_status |
PaymentApprovalStatus! |
Approval status. |
created_at |
String! |
Creation time. |
GraphQL Operation
mutation create_withdrawal_fiat($payment_route_id: String, $amount: Float!, $fiat_beneficiary_account_number: String, $properties: [FiatDepositPropertyInput!], $reference: String) {
create_withdrawal_fiat(payment_route_id: $payment_route_id, amount: $amount, fiat_beneficiary_account_number: $fiat_beneficiary_account_number, properties: $properties, reference: $reference) {
payment_id currency_id amount fee_amount status approval_status created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation create_withdrawal_fiat($payment_route_id: String, $amount: Float!, $fiat_beneficiary_account_number: String, $properties: [FiatDepositPropertyInput!], $reference: String) { create_withdrawal_fiat(payment_route_id: $payment_route_id, amount: $amount, fiat_beneficiary_account_number: $fiat_beneficiary_account_number, properties: $properties, reference: $reference) { payment_id currency_id amount fee_amount status approval_status created_at } }","variables":{"payment_route_id":"PAYMENT_ROUTE_ID","amount":250,"fiat_beneficiary_account_number":"12345678","properties":[{"name":"fiat_bsb","value":"062-000"}],"reference":"payout-0001"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation create_withdrawal_fiat($payment_route_id: String, $amount: Float!, $fiat_beneficiary_account_number: String, $properties: [FiatDepositPropertyInput!], $reference: String) { create_withdrawal_fiat(payment_route_id: $payment_route_id, amount: $amount, fiat_beneficiary_account_number: $fiat_beneficiary_account_number, properties: $properties, reference: $reference) { payment_id currency_id amount fee_amount status approval_status created_at } }""",
"variables": {
"payment_route_id": "PAYMENT_ROUTE_ID",
"amount": 250,
"fiat_beneficiary_account_number": "12345678",
"properties": [
{
"name": "fiat_bsb",
"value": "062-000"
}
],
"reference": "payout-0001"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation create_withdrawal_fiat($payment_route_id: String, $amount: Float!, $fiat_beneficiary_account_number: String, $properties: [FiatDepositPropertyInput!], $reference: String) { create_withdrawal_fiat(payment_route_id: $payment_route_id, amount: $amount, fiat_beneficiary_account_number: $fiat_beneficiary_account_number, properties: $properties, reference: $reference) { payment_id currency_id amount fee_amount status approval_status created_at } }`,
variables: {
"payment_route_id": "PAYMENT_ROUTE_ID",
"amount": 250,
"fiat_beneficiary_account_number": "12345678",
"properties": [
{
"name": "fiat_bsb",
"value": "062-000"
}
],
"reference": "payout-0001"
},
}),
});
const data = await response.json();
console.log(data);Try It
mutation create_withdrawal_crypto Send AUDD on-chain to an external address.
Available only where a crypto withdrawal route is enabled for AUDD (payments_routes with a crypto_network and withdrawal_enabled: on). Requires approved KYC.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
payment_route_id |
String |
optional | Withdrawal route. If omitted, the route is resolved from currency_id (+ optional crypto_network, psp_service_id). |
amount |
Float! |
required | Amount to withdraw. |
crypto_address |
String! |
required | Recipient address. |
crypto_address_tag_type |
CryptoAddressTagType |
optional | Tag type, for networks that use one. |
crypto_address_tag_value |
String |
optional | Tag value. |
currency_id |
String |
optional | Currency, used to resolve the route. |
crypto_network |
String |
optional | Network, used to resolve the route. |
psp_service_id |
String |
optional | Payment service provider, used to resolve the route. |
crypto_network_fee_preference |
CryptoNetworkFeePreference |
optional, default medium |
Network fee level. |
fees_included |
ToggleSwitch |
optional, default on |
With on the fee is deducted from amount. |
skip_address_validation |
Boolean |
optional, default false |
Skip address format validation. |
wallet_id |
String! |
optional, default MAIN |
Source wallet. |
reference |
String |
optional | Client reference. |
comment |
String |
optional | Free-text comment stored with the payment. |
mfa_token |
String |
optional | TOTP code, when the route requires verification. Not checked for tokens issued from an API key. |
Response
Fields of Payment selected in the operation below.
| Field | Type | Description |
|---|---|---|
payment_id |
String! |
Payment ID. |
currency_id |
String! |
Currency. |
amount |
Float! |
Amount. |
fee_amount |
Float |
Fee amount. |
status |
PaymentStatus! |
Processing status. |
crypto_network |
String |
Network. |
crypto_address |
String |
Destination address. |
created_at |
String! |
Creation time. |
GraphQL Operation
mutation create_withdrawal_crypto($payment_route_id: String, $amount: Float!, $crypto_address: String!) {
create_withdrawal_crypto(payment_route_id: $payment_route_id, amount: $amount, crypto_address: $crypto_address) {
payment_id currency_id amount fee_amount status crypto_network crypto_address created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation create_withdrawal_crypto($payment_route_id: String, $amount: Float!, $crypto_address: String!) { create_withdrawal_crypto(payment_route_id: $payment_route_id, amount: $amount, crypto_address: $crypto_address) { payment_id currency_id amount fee_amount status crypto_network crypto_address created_at } }","variables":{"payment_route_id":"PAYMENT_ROUTE_ID","amount":100,"crypto_address":"DESTINATION_ADDRESS"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation create_withdrawal_crypto($payment_route_id: String, $amount: Float!, $crypto_address: String!) { create_withdrawal_crypto(payment_route_id: $payment_route_id, amount: $amount, crypto_address: $crypto_address) { payment_id currency_id amount fee_amount status crypto_network crypto_address created_at } }""",
"variables": {
"payment_route_id": "PAYMENT_ROUTE_ID",
"amount": 100,
"crypto_address": "DESTINATION_ADDRESS"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation create_withdrawal_crypto($payment_route_id: String, $amount: Float!, $crypto_address: String!) { create_withdrawal_crypto(payment_route_id: $payment_route_id, amount: $amount, crypto_address: $crypto_address) { payment_id currency_id amount fee_amount status crypto_network crypto_address created_at } }`,
variables: {
"payment_route_id": "PAYMENT_ROUTE_ID",
"amount": 100,
"crypto_address": "DESTINATION_ADDRESS"
},
}),
});
const data = await response.json();
console.log(data);Try It
query payments Deposit and withdrawal history.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
payment_id |
String |
optional | Filter by payment_id. |
type |
PaymentType |
optional | deposit or withdrawal. |
status |
[PaymentStatus!] |
optional | Filter by status. |
approval_status |
[PaymentApprovalStatus!] |
optional | Filter by approval status. |
currency_id |
String |
optional | Currency filter. |
reference |
String |
optional | Client reference. |
search |
String |
optional | Search term. |
wallet_id |
String |
optional | Wallet filter. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
dateRange |
DateRangeInput |
optional | Date-time window (time_from, time_to). When omitted the server applies a default window (14 days back from now in the default platform settings); a range wider than the configured maximum (1 year for user-scoped queries by default) is rejected. Pass it explicitly to read older history. |
Response
Fields of Payment selected in the operation below.
| Field | Type | Description |
|---|---|---|
payment_id |
String! |
Payment ID. |
currency_id |
String! |
Currency. |
amount |
Float! |
Amount. |
type |
PaymentType! |
deposit or withdrawal. |
status |
PaymentStatus! |
Processing status. |
approval_status |
PaymentApprovalStatus! |
Approval status (withdrawals are approved automatically or by the operations team). |
fee_amount |
Float |
Fee amount. |
crypto_network |
String |
Network, for on-chain payments. |
crypto_transaction_id |
String |
On-chain transaction hash. |
crypto_address |
String |
Destination (withdrawal) or deposit address. |
message |
String |
Message stored with the payment. |
created_at |
String! |
Creation time. |
GraphQL Operation
query payments($type: PaymentType, $status: [PaymentStatus!], $pager: PagerInput) {
payments(type: $type, status: $status, pager: $pager) {
payment_id currency_id amount type status approval_status fee_amount crypto_network crypto_transaction_id crypto_address message created_at
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query payments($type: PaymentType, $status: [PaymentStatus!], $pager: PagerInput) { payments(type: $type, status: $status, pager: $pager) { payment_id currency_id amount type status approval_status fee_amount crypto_network crypto_transaction_id crypto_address message created_at } }","variables":{"type":"withdrawal","pager":{"limit":20,"offset":0}}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query payments($type: PaymentType, $status: [PaymentStatus!], $pager: PagerInput) { payments(type: $type, status: $status, pager: $pager) { payment_id currency_id amount type status approval_status fee_amount crypto_network crypto_transaction_id crypto_address message created_at } }""",
"variables": {
"type": "withdrawal",
"pager": {
"limit": 20,
"offset": 0
}
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query payments($type: PaymentType, $status: [PaymentStatus!], $pager: PagerInput) { payments(type: $type, status: $status, pager: $pager) { payment_id currency_id amount type status approval_status fee_amount crypto_network crypto_transaction_id crypto_address message created_at } }`,
variables: {
"type": "withdrawal",
"pager": {
"limit": 20,
"offset": 0
}
},
}),
});
const data = await response.json();
console.log(data);Try It
Markets
Currencies, instruments and prices shown on the Markets page. These queries do not require authentication.
query currencies List supported currencies.
Authentication is optional.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
search |
String |
optional | Search term. |
type |
CurrencyType |
optional | Filter by type. |
is_active |
ToggleSwitch |
optional | Filter by is_active. |
page |
Int |
optional | Page number (1-based). |
limit |
Int! |
optional, default 100 |
Page size; applied only when page is set. |
omit_currencies |
[String!] |
optional | Currencies to exclude. |
Response
Fields of Currency selected in the operation below.
| Field | Type | Description |
|---|---|---|
currency_id |
String! |
Currency ID. |
name |
String |
Name. |
precision |
Int! |
Decimal precision. |
type |
CurrencyType! |
Type. |
is_active |
ToggleSwitch! |
Active flag. |
GraphQL Operation
query currencies($is_active: ToggleSwitch) {
currencies(is_active: $is_active) {
currency_id name precision type is_active
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Content-Type: application/json' \
-d '{"query":"query currencies($is_active: ToggleSwitch) { currencies(is_active: $is_active) { currency_id name precision type is_active } }","variables":{"is_active":"on"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Content-Type": "application/json",
}
payload = {
"query": """query currencies($is_active: ToggleSwitch) { currencies(is_active: $is_active) { currency_id name precision type is_active } }""",
"variables": {
"is_active": "on"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query currencies($is_active: ToggleSwitch) { currencies(is_active: $is_active) { currency_id name precision type is_active } }`,
variables: {
"is_active": "on"
},
}),
});
const data = await response.json();
console.log(data);Try It
query instruments List instruments with current prices.
Authentication is optional.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
instrument_id |
String |
optional | Return a single instrument. |
is_active |
ToggleSwitch |
optional | Filter by active status. |
search |
String |
optional | Search term. |
page |
Int |
optional | Page number (1-based). |
limit |
Int! |
optional, default 100 |
Page size. |
sort |
SortInput |
optional | Sort order. |
omit_currencies |
[String!] |
optional | Exclude instruments involving these currencies. |
Response
Fields of Instrument selected in the operation below.
| Field | Type | Description |
|---|---|---|
instrument_id |
String! |
Instrument ID. |
name |
String! |
Name. |
base_currency_id |
String! |
Base currency. |
quote_currency_id |
String! |
Quote currency. |
price_decimals |
Float! |
Price precision (decimal places). |
is_active |
ToggleSwitch! |
Active flag. |
price |
InstrumentPrice |
Latest price: ask, bid, price_24h_change (%), ts_iso. |
GraphQL Operation
query instruments($instrument_id: String, $is_active: ToggleSwitch) {
instruments(instrument_id: $instrument_id, is_active: $is_active) {
instrument_id name base_currency_id quote_currency_id price_decimals is_active price { ask bid price_24h_change ts_iso }
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Content-Type: application/json' \
-d '{"query":"query instruments($instrument_id: String, $is_active: ToggleSwitch) { instruments(instrument_id: $instrument_id, is_active: $is_active) { instrument_id name base_currency_id quote_currency_id price_decimals is_active price { ask bid price_24h_change ts_iso } } }","variables":{"is_active":"on"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Content-Type": "application/json",
}
payload = {
"query": """query instruments($instrument_id: String, $is_active: ToggleSwitch) { instruments(instrument_id: $instrument_id, is_active: $is_active) { instrument_id name base_currency_id quote_currency_id price_decimals is_active price { ask bid price_24h_change ts_iso } } }""",
"variables": {
"is_active": "on"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query instruments($instrument_id: String, $is_active: ToggleSwitch) { instruments(instrument_id: $instrument_id, is_active: $is_active) { instrument_id name base_currency_id quote_currency_id price_decimals is_active price { ask bid price_24h_change ts_iso } } }`,
variables: {
"is_active": "on"
},
}),
});
const data = await response.json();
console.log(data);Try It
query instrument_price_bars Historical OHLC bars for an instrument (price charts).
Authentication is optional.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
instrument_id |
String! |
required | Instrument ID (from instruments). |
periodicity |
InstrumentHistoryPeriodicity |
optional, default day |
Bar interval. |
limit |
Int |
optional, default 24 |
Number of bars. |
date_range |
DateRangeInput |
optional | Date-time window (time_from, time_to). |
Response
Fields of InstrumentPriceHistory selected in the operation below.
| Field | Type | Description |
|---|---|---|
instrument_id |
String! |
Instrument. |
open |
Float! |
Open price. |
high |
Float! |
High price. |
low |
Float! |
Low price. |
close |
Float! |
Close price. |
ts_iso |
String! |
Bar start time (ISO 8601). |
GraphQL Operation
query instrument_price_bars($instrument_id: String!, $periodicity: InstrumentHistoryPeriodicity, $limit: Int, $date_range: DateRangeInput) {
instrument_price_bars(instrument_id: $instrument_id, periodicity: $periodicity, limit: $limit, date_range: $date_range) {
instrument_id open high low close ts_iso
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Content-Type: application/json' \
-d '{"query":"query instrument_price_bars($instrument_id: String!, $periodicity: InstrumentHistoryPeriodicity, $limit: Int, $date_range: DateRangeInput) { instrument_price_bars(instrument_id: $instrument_id, periodicity: $periodicity, limit: $limit, date_range: $date_range) { instrument_id open high low close ts_iso } }","variables":{"instrument_id":"INSTRUMENT_ID","periodicity":"hour","limit":24}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Content-Type": "application/json",
}
payload = {
"query": """query instrument_price_bars($instrument_id: String!, $periodicity: InstrumentHistoryPeriodicity, $limit: Int, $date_range: DateRangeInput) { instrument_price_bars(instrument_id: $instrument_id, periodicity: $periodicity, limit: $limit, date_range: $date_range) { instrument_id open high low close ts_iso } }""",
"variables": {
"instrument_id": "INSTRUMENT_ID",
"periodicity": "hour",
"limit": 24
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query instrument_price_bars($instrument_id: String!, $periodicity: InstrumentHistoryPeriodicity, $limit: Int, $date_range: DateRangeInput) { instrument_price_bars(instrument_id: $instrument_id, periodicity: $periodicity, limit: $limit, date_range: $date_range) { instrument_id open high low close ts_iso } }`,
variables: {
"instrument_id": "INSTRUMENT_ID",
"periodicity": "hour",
"limit": 24
},
}),
});
const data = await response.json();
console.log(data);Try It
Subscriptions
Real-time price updates delivered over a WebSocket connection. Subscribe once and receive next messages until you unsubscribe or the server closes the channel.
WebSocket transport
Subscriptions use the graphql-ws protocol over secure WebSocket. The legacy subscriptions-transport-ws protocol is also accepted; the frames shown below are graphql-ws.
Endpoint
wss://vakotrade-audd.cryptosrvc.com/graphql
Authentication
Price subscriptions are public. To authenticate the connection anyway, send your bearer token in connectionParams on the connection_init frame under the key authorization:
{
"type": "connection_init",
"payload": { "authorization": "Bearer <JWT_TOKEN>" }
}
The server replies with {"type": "connection_ack"}.
Opening a subscription
After connection_ack, send a subscribe frame with an id you choose; every next message for that subscription carries the same id:
{
"type": "subscribe",
"id": "1",
"payload": {
"query": "subscription instrument_price($instrument_id: String) { instrument_price(instrument_id: $instrument_id) { instrument_id ask bid price_24h_change ts_iso } }",
"variables": { "instrument_id": "INSTRUMENT_ID" }
}
}
The server ends a stream with {"type": "complete", "id": "1"} (or an error frame if the subscription fails). Send the same complete frame to unsubscribe.
Keeping the connection open
Connections drop occasionally (network changes, load-balancer rotation, an expired token). Let the client library reconnect automatically and re-issue the active subscriptions:
import { createClient } from "graphql-ws";
const client = createClient({
url: "wss://vakotrade-audd.cryptosrvc.com/graphql",
connectionParams: { authorization: `Bearer ${token}` },
shouldRetry: () => true,
retryAttempts: 8,
});
client.subscribe(
{
query: `subscription instrument_price($instrument_id: String) {
instrument_price(instrument_id: $instrument_id) { instrument_id ask bid price_24h_change ts_iso }
}`,
variables: { instrument_id: "INSTRUMENT_ID" },
},
{ next: (msg) => console.log(msg.data), error: console.error, complete: () => {} },
);
subscription instrument_price Real-time price ticks.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
instrument_id |
String |
optional | Instrument to follow; omit for all instruments. |
Each update
Fields of InstrumentPrice selected in the operation below.
| Field | Type | Description |
|---|---|---|
instrument_id |
String! |
Instrument. |
ask |
Float |
Best ask price. |
bid |
Float |
Best bid price. |
price_24h_change |
Float |
Percent change over the last 24 hours. |
ts_iso |
String! |
Tick time (ISO 8601). |
GraphQL Operation
subscription instrument_price($instrument_id: String) {
instrument_price(instrument_id: $instrument_id) {
instrument_id ask bid price_24h_change ts_iso
}
}
subscription instrument_price_bar Real-time OHLC bar updates.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
instrument_id |
String! |
required | Instrument to subscribe to. |
periodicity |
InstrumentHistoryPeriodicity! |
required | Bar interval. |
Each update
Fields of InstrumentPriceHistory selected in the operation below.
| Field | Type | Description |
|---|---|---|
instrument_id |
String! |
Instrument. |
open |
Float! |
Open price. |
high |
Float! |
High price. |
low |
Float! |
Low price. |
close |
Float! |
Close price. |
ts_iso |
String! |
Bar start time (ISO 8601). |
GraphQL Operation
subscription instrument_price_bar($instrument_id: String!, $periodicity: InstrumentHistoryPeriodicity!) {
instrument_price_bar(instrument_id: $instrument_id, periodicity: $periodicity) {
instrument_id open high low close ts_iso
}
}
API Keys
Review the user's API keys. Keys are created in the AUDD web app; the management mutations below require a web-session token, because an API key cannot hold key-management permissions.
API key permissions
An API key carries a list of lowercase permission identifiers, for example ["accounts_balances", "payments", "create_withdrawal_fiat"]. Each operation in this reference shows the permission it requires; operations without a permission line (user, portfolio_history_v2, calculate_payments_limits, market data) only need a valid token. The permissions relevant to AUDD accounts are:
Balances and history
| Permission | Description |
|---|---|
accounts_balances | Read balances (accounts_balances). |
account_transactions | Read the ledger and wallet transfers (account_transactions, wallet_transfers). |
Wallets
| Permission | Description |
|---|---|
wallets | List wallets (wallets). |
create_wallet | Create personal wallets. |
update_wallet | Rename wallets. |
deactivate_wallet | Deactivate wallets. |
create_wallet_transfer | Move funds between wallets. |
Deposits and withdrawals
| Permission | Description |
|---|---|
payments_routes | List deposit / withdrawal routes and bank deposit details. |
deposit_addresses_crypto | Get on-chain deposit addresses. |
payments | Read deposit and withdrawal history. |
payments_fees | Read the fee schedule. |
create_withdrawal_fiat | Withdraw to a bank account. |
create_withdrawal_crypto | Withdraw on-chain. |
update_user | Rename or hide saved withdrawal bank accounts. |
API keys
| Permission | Description |
|---|---|
api_keys | List the user's API keys. |
Trader keys must be restricted to 1 to 3 IP addresses and cannot hold create_api_key, update_api_key or delete_api_key. A user can have up to 20 keys.
query api_keys List the user's API keys.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
search |
String |
optional | Search term. |
type |
ApiKeyTypes |
optional | Filter by key type. |
pager |
PagerInput |
optional | Pagination (limit, offset). |
sort |
SortInput |
optional | Sort order. |
Response
Fields of ApiKey selected in the operation below.
| Field | Type | Description |
|---|---|---|
api_key_id |
String! |
API key ID. |
name |
String |
Name. |
type |
ApiKeyTypes! |
Key type. |
is_active |
ToggleSwitch! |
Active flag. |
permissions |
[Permission!]! |
Permissions on the key. |
ip_address |
[String!]! |
IP allow-list. |
hmac_required |
ToggleSwitch! |
Signed requests required. |
expires_at_iso |
String |
Expiry (ISO 8601). |
created_at_iso |
String! |
Creation time (ISO 8601). |
GraphQL Operation
query api_keys {
api_keys {
api_key_id name type is_active permissions ip_address hmac_required expires_at_iso created_at_iso
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"query api_keys { api_keys { api_key_id name type is_active permissions ip_address hmac_required expires_at_iso created_at_iso } }","variables":{}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """query api_keys { api_keys { api_key_id name type is_active permissions ip_address hmac_required expires_at_iso created_at_iso } }""",
"variables": {},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `query api_keys { api_keys { api_key_id name type is_active permissions ip_address hmac_required expires_at_iso created_at_iso } }`,
variables: {},
}),
});
const data = await response.json();
console.log(data);Try It
No inputs.
mutation create_api_key Create a new API key.
Requires approved KYC. A trader key must list 1 to 3 allowed IP addresses, cannot include create_api_key, update_api_key or delete_api_key, and the number of keys per user is capped.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
name |
String |
optional | Key name. Letters and digits, optionally separated by single spaces, - or _. |
expires_at |
String! |
required | Expiry date-time; must be in the future. Tokens issued by service_signin for this key expire at the same moment. |
is_active |
ToggleSwitch! |
required | Whether the key is active. |
type |
ApiKeyTypes! |
required | Key type. Traders create trader keys. |
ip_address |
[String!] |
optional | IP allow-list, 1 to 3 entries. Required for trader keys. |
permissions |
[Permission!]! |
required | Permission identifiers (see API key permissions). |
hmac_required |
ToggleSwitch |
optional, default off |
When on, create_withdrawal_fiat and create_withdrawal_crypto must be signed: send X-Nonce (unique per request) and X-Signature = lowercase hex HMAC-SHA256 of raw request body + nonce, keyed with hex(HMAC-SHA256(key = api_key_id, message = api_secret)). |
Response
Fields of CreateApiKeyResult selected in the operation below.
| Field | Type | Description |
|---|---|---|
api_key_id |
String! |
New API key ID. |
api_key_secret |
String! |
API secret (shown only once; store it securely). |
GraphQL Operation
mutation create_api_key($name: String, $expires_at: String!, $is_active: ToggleSwitch!, $type: ApiKeyTypes!, $ip_address: [String!], $permissions: [Permission!]!, $hmac_required: ToggleSwitch) {
create_api_key(name: $name, expires_at: $expires_at, is_active: $is_active, type: $type, ip_address: $ip_address, permissions: $permissions, hmac_required: $hmac_required) {
api_key_id api_key_secret
}
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation create_api_key($name: String, $expires_at: String!, $is_active: ToggleSwitch!, $type: ApiKeyTypes!, $ip_address: [String!], $permissions: [Permission!]!, $hmac_required: ToggleSwitch) { create_api_key(name: $name, expires_at: $expires_at, is_active: $is_active, type: $type, ip_address: $ip_address, permissions: $permissions, hmac_required: $hmac_required) { api_key_id api_key_secret } }","variables":{"name":"payouts","expires_at":"2027-12-31 00:00:00","is_active":"on","type":"trader","ip_address":["203.0.113.10"],"permissions":["accounts_balances","payments","payments_routes","create_withdrawal_fiat"]}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation create_api_key($name: String, $expires_at: String!, $is_active: ToggleSwitch!, $type: ApiKeyTypes!, $ip_address: [String!], $permissions: [Permission!]!, $hmac_required: ToggleSwitch) { create_api_key(name: $name, expires_at: $expires_at, is_active: $is_active, type: $type, ip_address: $ip_address, permissions: $permissions, hmac_required: $hmac_required) { api_key_id api_key_secret } }""",
"variables": {
"name": "payouts",
"expires_at": "2027-12-31 00:00:00",
"is_active": "on",
"type": "trader",
"ip_address": [
"203.0.113.10"
],
"permissions": [
"accounts_balances",
"payments",
"payments_routes",
"create_withdrawal_fiat"
]
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation create_api_key($name: String, $expires_at: String!, $is_active: ToggleSwitch!, $type: ApiKeyTypes!, $ip_address: [String!], $permissions: [Permission!]!, $hmac_required: ToggleSwitch) { create_api_key(name: $name, expires_at: $expires_at, is_active: $is_active, type: $type, ip_address: $ip_address, permissions: $permissions, hmac_required: $hmac_required) { api_key_id api_key_secret } }`,
variables: {
"name": "payouts",
"expires_at": "2027-12-31 00:00:00",
"is_active": "on",
"type": "trader",
"ip_address": [
"203.0.113.10"
],
"permissions": [
"accounts_balances",
"payments",
"payments_routes",
"create_withdrawal_fiat"
]
},
}),
});
const data = await response.json();
console.log(data);mutation update_api_key Rename, expire, enable/disable or change permissions of a key.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
api_key_id |
String! |
required | Key to update. |
name |
String |
optional | New name. |
expires_at |
String |
optional | New expiry date-time. |
is_active |
ToggleSwitch |
optional | Enable or disable the key. |
ip_address |
[String!] |
optional | New IP allow-list (1 to 3 entries). |
permissions |
[Permission!] |
optional | Replacement permission list. |
hmac_required |
ToggleSwitch |
optional | Enable / disable request signing. |
Response
true on success.
GraphQL Operation
mutation update_api_key($api_key_id: String!, $name: String, $is_active: ToggleSwitch) {
update_api_key(api_key_id: $api_key_id, name: $name, is_active: $is_active)
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation update_api_key($api_key_id: String!, $name: String, $is_active: ToggleSwitch) { update_api_key(api_key_id: $api_key_id, name: $name, is_active: $is_active) }","variables":{"api_key_id":"API_KEY_ID","name":"payouts","is_active":"off"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation update_api_key($api_key_id: String!, $name: String, $is_active: ToggleSwitch) { update_api_key(api_key_id: $api_key_id, name: $name, is_active: $is_active) }""",
"variables": {
"api_key_id": "API_KEY_ID",
"name": "payouts",
"is_active": "off"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation update_api_key($api_key_id: String!, $name: String, $is_active: ToggleSwitch) { update_api_key(api_key_id: $api_key_id, name: $name, is_active: $is_active) }`,
variables: {
"api_key_id": "API_KEY_ID",
"name": "payouts",
"is_active": "off"
},
}),
});
const data = await response.json();
console.log(data);mutation delete_api_key Revoke an API key.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
api_key_id |
String! |
required | Key to delete. |
Response
true on success.
GraphQL Operation
mutation delete_api_key($api_key_id: String!) {
delete_api_key(api_key_id: $api_key_id)
}
Code Examples
curl -X POST 'https://vakotrade-audd.cryptosrvc.com/graphql' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"query":"mutation delete_api_key($api_key_id: String!) { delete_api_key(api_key_id: $api_key_id) }","variables":{"api_key_id":"API_KEY_ID"}}'
import requests
url = "https://vakotrade-audd.cryptosrvc.com/graphql"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
}
payload = {
"query": """mutation delete_api_key($api_key_id: String!) { delete_api_key(api_key_id: $api_key_id) }""",
"variables": {
"api_key_id": "API_KEY_ID"
},
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://vakotrade-audd.cryptosrvc.com/graphql", {
method: "POST",
headers: {
"Authorization": `Bearer ${YOUR_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: `mutation delete_api_key($api_key_id: String!) { delete_api_key(api_key_id: $api_key_id) }`,
variables: {
"api_key_id": "API_KEY_ID"
},
}),
});
const data = await response.json();
console.log(data);Types
Enums and input types used by the operations above. Enum values are sent as unquoted GraphQL enum literals (for example type: withdrawal) or as the same string in JSON variables.
enum AccountTransactionClass
On AUDD accounts the relevant classes are payment (deposits and withdrawals), fee, wallet_transfer and manual.
trade fee payment reward conversion manual fee_rebalance referral_reward wallet_transfer u2u_transfer vault_payment
enum AccountTransactionType
debit credit
enum ApiKeyTypes
trader admin service
input AuddWithdrawalBankAccountItem
| Field | Type | Required | Description |
|---|---|---|---|
id | String! | required | Bank account ID assigned when the account was registered (read it from user.audd_withdrawal_bank_accounts). |
bsb | String! | required | BSB. Normalised to NNN-NNN when saved. |
accountNumber | String! | required | Bank account number. |
is_show | ToggleSwitch! | required | on to list the account in the withdrawal form, off to hide it. |
accountName | String | optional | Display name. |
enum CryptoAddressTagType
destination_tag memo_id note tag
enum CryptoNetworkFeePreference
low medium high
enum CurrencyType
crypto fiat
input DateRangeInput
| Field | Type | Required | Description |
|---|---|---|---|
time_from | String | optional | Time FROM filter, YYYY-MM-DD HH:mm:ss |
time_to | String | optional | Time TO filter, YYYY-MM-DD HH:mm:ss |
enum FeeCalculationType
sum max
input FiatDepositPropertyInput
| Field | Type | Required | Description |
|---|---|---|---|
name | String! | required | Property name, e.g. fiat_bsb. |
value | String! | required | Property value. |
enum InstrumentHistoryPeriodicity
minute minute5 minute10 minute15 minute30 hour hour4 hour8 day week month
input PagerInput
| Field | Type | Required | Description |
|---|---|---|---|
limit | Int | optional, default 30 | pager limit, default 30 |
offset | Int | optional, default 0 | pager offset, default 0 |
enum PaymentApprovalStatus
pending approved rejected
enum PaymentStatus
new processing rejected completed unconfirmed
enum PaymentType
withdrawal deposit
enum Permission
Values relevant to AUDD accounts (the enum also contains trading and administrative permissions). See API key permissions.
accounts_balances account_transactions wallets create_wallet update_wallet deactivate_wallet create_wallet_transfer payments_routes deposit_addresses_crypto payments payments_fees create_withdrawal_fiat create_withdrawal_crypto is_withdrawal_allowed update_user currencies instruments api_keys create_api_key update_api_key delete_api_key
enum PortfolioHistoryInterval
minute hour day week month year all
input SerialIdRangeInput
| Field | Type | Required | Description |
|---|---|---|---|
serial_id_from | Int | optional | Serial ID FROM filter |
serial_id_to | Int | optional | Serial ID TO filter |
enum SortDirection
ASC DESC
input SortInput
| Field | Type | Required | Description |
|---|---|---|---|
direction | SortDirection | optional, default DESC | Sort direction |
property | String | optional | Sort property |
field | String | optional | Legacy sort field alias (use property instead) |
enum ToggleSwitch
on off
enum VerificationType
none totp bank_id sms passkey passkey_or_mfa local_mfa cognito_mfa
input WalletMetaPropertyInput
| Field | Type | Required | Description |
|---|---|---|---|
property | String! | required | Property name, e.g. icon_name, icon_color. |
value | String! | required | Property value. |
enum WalletType
Traders create and manage PERSONAL wallets only. MAIN always exists.
MAIN PERSONAL BOT INTERNAL LEADER LIMITED