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.

Bearer access token

          

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:

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

  1. The user completes KYC in the AUDD web app. A personal virtual bank account is opened for them automatically.
  2. Call payments_routes with currency_id: "AUDD" and read fiat_deposit_properties on the bank-transfer route: account name, BSB, account number and reference.
  3. The user (or your treasury) sends AUD to that account from any Australian bank.
  4. When the funds clear, the same amount of AUDD is minted and credited to the user's MAIN wallet. The deposit appears in payments (type: deposit) and as a payment entry in account_transactions.

Withdraw to an Australian bank account

  1. Find the withdrawal route: payments_routes with currency_id: "AUDD", the entry with is_crypto_to_fiat: on and withdrawal_enabled: on.
  2. Optionally check calculate_payments_limits and payments_fees.
  3. Call create_withdrawal_fiat with the route, the amount, fiat_beneficiary_account_number and a fiat_bsb property. Saved accounts from user.audd_withdrawal_bank_accounts can be reused.
  4. Poll payments with the returned payment_id: new → processing → completed (or rejected, 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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: SignInResult!
Rate limit: 10 requests / 60 s, min. 2000 ms between calls

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: WalletsResult!
Permission: wallets

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation create_wallet Create a personal wallet.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Wallet!
Permission: create_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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation update_wallet Rename a wallet or change its description.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Wallet!
Permission: update_wallet

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation deactivate_wallet Permanently deactivate a wallet (zero balance required).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Wallet!
Permission: deactivate_wallet

The wallet must have a zero balance in every currency. This cannot be undone.

Inputs

NameTypeRequiredDescription
wallet_id String! required Wallet to deactivate.

Response

Fields of Wallet selected in the operation below.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation create_wallet_transfer Move funds between two of the user's wallets.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: WalletTransfer!
Permission: create_wallet_transfer
Rate limit: 30 requests / 60 s, min. 1000 ms between calls

Both wallets must belong to the authenticated user. The transfer is booked immediately as two wallet_transfer ledger entries (see account_transactions).

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query wallet_transfers List transfers between the user's wallets.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [WalletTransfer!]!
Permission: account_transactions

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this

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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [AccountBalance!]!
Permission: accounts_balances
Rate limit: 60 requests / 60 s

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query portfolio_history_v2 Portfolio value over time with PnL and ROI (the Dashboard chart and change %).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: PortfolioHistoryResult!

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query account_transactions Read the account ledger (deposits, withdrawals, fees, wallet transfers).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [AccountTransaction!]!
Permission: account_transactions
Rate limit: 60 requests / 60 s

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this

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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [PaymentRoute!]!
Permission: payments_routes
Rate limit: 60 requests / 60 s

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query deposit_address_crypto Get (or generate, if none exists) an on-chain AUDD deposit address.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: DepositAddressCrypto!
Permission: deposit_addresses_crypto
Rate limit: 10 requests / 60 s, min. 3000 ms between calls

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this

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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: User!
Rate limit: 60 requests / 60 s

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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation update_user Rename or hide saved withdrawal bank accounts.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: User!
Permission: update_user
Rate limit: 60 requests / 60 s, min. 1000 ms between calls

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

NameTypeRequiredDescription
audd_withdrawal_bank_accounts [AuddWithdrawalBankAccountItem!] optional Complete list of saved bank accounts.

Response

Fields of User selected in the operation below.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation calculate_payments_limits Remaining daily / weekly / monthly withdrawal or deposit limits.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: LimitsStatus!

Declared as a mutation even though it only reads data.

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query payments_fees Deposit and withdrawal fee schedule.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [PaymentFee!]!
Permission: payments_fees
Rate limit: 30 requests / 60 s

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation create_withdrawal_fiat Withdraw AUDD to an Australian bank account (paid out in AUD).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Payment!
Permission: create_withdrawal_fiat
Rate limit: 30 requests / 60 s
Optional header: x-idempotency-key: a repeated key within 5 minutes is rejected with ERR_DUPLICATE_REQUEST.
Signed request: X-Signature + X-Nonce required when the API key has hmac_required: on (see create_api_key).

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation create_withdrawal_crypto Send AUDD on-chain to an external address.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Payment!
Permission: create_withdrawal_crypto
Rate limit: 30 requests / 60 s
Optional header: x-idempotency-key: a repeated key within 5 minutes is rejected with ERR_DUPLICATE_REQUEST.
Signed request: X-Signature + X-Nonce required when the API key has hmac_required: on (see create_api_key).

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

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query payments Deposit and withdrawal history.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [Payment!]!
Permission: payments
Rate limit: 60 requests / 60 s

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this

Markets

Currencies, instruments and prices shown on the Markets page. These queries do not require authentication.

query currencies List supported currencies.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [Currency!]!
Rate limit: 60 requests / 60 s

Authentication is optional.

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query instruments List instruments with current prices.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [Instrument!]!
Rate limit: 120 requests / 60 s

Authentication is optional.

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
query instrument_price_bars Historical OHLC bars for an instrument (price charts).
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [InstrumentPriceHistory!]!
Rate limit: 120 requests / 60 s

Authentication is optional.

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this

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.
Endpoint: WSS wss://vakotrade-audd.cryptosrvc.com/graphql
Type: Subscription
Returns: InstrumentPrice!

Inputs

NameTypeRequiredDescription
instrument_id String optional Instrument to follow; omit for all instruments.

Each update

Fields of InstrumentPrice selected in the operation below.

FieldTypeDescription
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.
Endpoint: WSS wss://vakotrade-audd.cryptosrvc.com/graphql
Type: Subscription
Returns: InstrumentPriceHistory!

Inputs

NameTypeRequiredDescription
instrument_id String! required Instrument to subscribe to.
periodicity InstrumentHistoryPeriodicity! required Bar interval.

Each update

Fields of InstrumentPriceHistory selected in the operation below.

FieldTypeDescription
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

PermissionDescription
accounts_balancesRead balances (accounts_balances).
account_transactionsRead the ledger and wallet transfers (account_transactions, wallet_transfers).

Wallets

PermissionDescription
walletsList wallets (wallets).
create_walletCreate personal wallets.
update_walletRename wallets.
deactivate_walletDeactivate wallets.
create_wallet_transferMove funds between wallets.

Deposits and withdrawals

PermissionDescription
payments_routesList deposit / withdrawal routes and bank deposit details.
deposit_addresses_cryptoGet on-chain deposit addresses.
paymentsRead deposit and withdrawal history.
payments_feesRead the fee schedule.
create_withdrawal_fiatWithdraw to a bank account.
create_withdrawal_cryptoWithdraw on-chain.
update_userRename or hide saved withdrawal bank accounts.

API keys

PermissionDescription
api_keysList 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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Query
Returns: [ApiKey!]!
Permission: api_keys

Inputs

NameTypeRequiredDescription
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.

FieldTypeDescription
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

Authenticate at the top of the page to try this
mutation create_api_key Create a new API key.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: CreateApiKeyResult!
Permission: create_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

NameTypeRequiredDescription
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.

FieldTypeDescription
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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Boolean!
Permission: update_api_key

Inputs

NameTypeRequiredDescription
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.
Endpoint: POST https://vakotrade-audd.cryptosrvc.com/graphql
Type: Mutation
Returns: Boolean!
Permission: delete_api_key

Inputs

NameTypeRequiredDescription
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

FieldTypeRequiredDescription
idString!requiredBank account ID assigned when the account was registered (read it from user.audd_withdrawal_bank_accounts).
bsbString!requiredBSB. Normalised to NNN-NNN when saved.
accountNumberString!requiredBank account number.
is_showToggleSwitch!requiredon to list the account in the withdrawal form, off to hide it.
accountNameStringoptionalDisplay name.

enum CryptoAddressTagType

destination_tag memo_id note tag

enum CryptoNetworkFeePreference

low medium high

enum CurrencyType

crypto fiat

input DateRangeInput

FieldTypeRequiredDescription
time_fromStringoptionalTime FROM filter, YYYY-MM-DD HH:mm:ss
time_toStringoptionalTime TO filter, YYYY-MM-DD HH:mm:ss

enum FeeCalculationType

sum max

input FiatDepositPropertyInput

FieldTypeRequiredDescription
nameString!requiredProperty name, e.g. fiat_bsb.
valueString!requiredProperty value.

enum InstrumentHistoryPeriodicity

minute minute5 minute10 minute15 minute30 hour hour4 hour8 day week month

input PagerInput

FieldTypeRequiredDescription
limitIntoptional, default 30pager limit, default 30
offsetIntoptional, default 0pager 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

FieldTypeRequiredDescription
serial_id_fromIntoptionalSerial ID FROM filter
serial_id_toIntoptionalSerial ID TO filter

enum SortDirection

ASC DESC

input SortInput

FieldTypeRequiredDescription
directionSortDirectionoptional, default DESCSort direction
propertyStringoptionalSort property
fieldStringoptionalLegacy 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

FieldTypeRequiredDescription
propertyString!requiredProperty name, e.g. icon_name, icon_color.
valueString!requiredProperty value.

enum WalletType

Traders create and manage PERSONAL wallets only. MAIN always exists.

MAIN PERSONAL BOT INTERNAL LEADER LIMITED