Deriv API
Documentation
Wallet

Wallet REST

List the authenticated client's wallets, browse the transactions for each one, and move funds between wallets and trading platform accounts. The exchange-rate and transfer endpoints are in beta and may change without notice.

Overview

The Wallet APIs let an application read the authenticated client's wallets and their transaction history, and move funds between them. List every wallet with its balances via the wallets endpoint, page through the movements for a single wallet via the transactions endpoint, and move money with the transfers endpoints. All endpoints are standard REST calls and require the payment OAuth2 scope.

Typical Workflow

  1. List the client's wallets with GET /wallet/v1/wallets. Each entry carries its balances in the wallet's native currency; supply conversion_currency to also receive a converted total.
  2. Fetch the movements for one wallet with GET /wallet/v1/transactions/{wallet_type}. Results are cursor-paginated; follow links.next and links.prev to page through them.
  3. For a transfer between different currencies, quote the rate first with GET /wallet/v1/exchange-rate. Send the exchange_rate and rate_token it returns when you execute.
  4. Preview the transfer with POST /wallet/v1/transfers/validate. It moves no money, and returns the fee, the net amount leaving the source account, and the estimated amount the destination receives.
  5. Execute it with POST /wallet/v1/transfers between wallets in the same currency, POST /wallet/v1/transfers/exchange between wallets in different currencies, or POST /wallet/v1/transfers/platforms between a wallet and a trading platform account. Each takes a request_id as its idempotency key.

Available Endpoints

List WalletsGet
Returns the wallets belonging to the authenticated client, with each balance shown in the wallet's native currency. Supply a conversion_currency to also receive each balance converted into that currency, and use start_date_time and end_date_time to bound the balance as of window./wallet/v1/wallets
Wallet TransactionsGet
Returns a cursor-paginated list of transactions for one of the authenticated client's wallets, identified by wallet_type. Filter by request_id, transaction_currency, and a date range. Each row carries a channel showing how the money moved and a category computed relative to the caller./wallet/v1/transactions/{wallet_type}
Exchange RateGetBeta
Returns a quote for converting between two currencies. The quote carries the exchange rate and a rate_token - pass both to a cross-currency transfer to execute at the quoted rate./wallet/v1/exchange-rate
Validate TransferPostBeta
Checks a transfer against the transfer rules before you execute it, and returns the fee, the net amount leaving the source account, and the estimated amount the destination receives. Validation moves no money. An invalid transfer returns an error describing what failed, so is_valid is always true on success./wallet/v1/transfers/validate
Transfer Between WalletsPostBeta
Moves funds between two wallets owned by the authenticated client, in the same currency. Any applicable fee is deducted from the amount before execution, so validate the transfer first to preview the fee and the net amount. request_id is the idempotency key: resubmitting one you have already used does not create a duplicate transfer./wallet/v1/transfers
Cross-Currency TransferPostBeta
Moves funds between two wallets owned by the authenticated client that hold different currencies. Quote the rate first with the exchange-rate endpoint, then send the returned exchange_rate and rate_token to execute at that rate. Any applicable currency-exchange fee is deducted from the amount./wallet/v1/transfers/exchange
Platform TransferPostBeta
Moves funds between a wallet and a trading platform account owned by the authenticated client. direction sets which side is debited: from_wallet funds the platform account, to_wallet funds the wallet. When the wallet and the platform account hold different currencies, also send wallet_currency with a quoted exchange_rate and rate_token./wallet/v1/transfers/platforms

Authentication

All endpoints require the Deriv-App-ID header and an Authorization: Bearer YOUR_OAUTH_TOKEN header. The token must carry the payment scope; otherwise the API returns 403 Forbidden.

OAuth2 Scopes

EndpointScope
GET /wallet/v1/walletspayment
GET /wallet/v1/transactions/{wallet_type}payment
GET /wallet/v1/exchange-ratepayment
POST /wallet/v1/transfers/validatepayment
POST /wallet/v1/transferspayment
POST /wallet/v1/transfers/exchangepayment
POST /wallet/v1/transfers/platformspayment
1curl -X GET "https://api.derivws.com/wallet/v1/wallets?conversion_currency=USD" \
2  -H "Deriv-App-ID: YOUR_APP_ID" \
3  -H "Authorization: Bearer YOUR_OAUTH_TOKEN"

Response Status Codes

The API uses standard HTTP status codes to indicate success or failure:

2xx Success
200 OK — Request successful
4xx/5xx Errors
400 Bad Request — Invalid parameters
401 Unauthorized — Invalid or missing authentication
403 Forbidden — Token lacks the payment scope
404 Not Found — Wallet not found
429 Too Many Requests — Rate limit exceeded
500 Internal Server Error — Server-side error
503 Service Unavailable — Request rejected by the gateway circuit breaker
504 Gateway Timeout — Upstream service timeout

Error Response Format

All error responses follow a consistent envelope with an errors array. Each entry carries a numeric status, a machine-readable code, and a human-readable message:

1{
2  "errors": [
3    {
4      "status": 400,
5      "code": "BadRequest",
6      "message": "conversion_currency must be a 3-letter ISO currency code"
7    }
8  ]
9}

Error codes include: BadRequest, ValidationError, CurrencyNotAllowed, DailyLimitError, DuplicateRequestID, Unauthorized, NotFound, InternalServerError

Click to open live chat support. Get instant help from our support team.