API Documentation
REST API
Base URL
https://back.dmex.app/
Endpoints
1. Get Candles
Method:
GET
Path:
/candles
Query Parameters:
symbol
(required): Asset symbol (e.g., "btcusd")interval
(required): Time interval ("1", "5", "15", "60", "240", "1440")from
(optional): Start timestampto
(optional): End timestamplimit
(optional): Number of candles (default: 500)
Example Request:
GET /candles?symbol=btcusd&interval=60&limit=100
Response:
{
"s": "ok",
"c": [50000, 50100, 50050],
"o": [49950, 50000, 50100],
"h": [50200, 50150, 50200],
"l": [49900, 49980, 50000],
"v": [1500, 1200, 800],
"t": [1640995200, 1640998800, 1641002400]
}
2. Server Ping
Method:
GET
Path:
/sPing
Response:
{
"status": "ok",
"timestamp": 1640995200000
}
3. Contracts
Method:
GET
Path:
/contracts
Description: Returns all available derivative contracts
Response:
[
{
"ticker_id": "BTC-USD",
"base_currency": "BTC",
"target_currency": "USD",
"last_price": "50000.00",
"base_volume": "150.25",
"target_volume": "7512500.00",
"bid": "49950.00",
"ask": "50050.00",
"high": "51000.00",
"low": "49000.00",
"product_type": "Perpetual",
"open_interest": "1000.50",
"open_interest_usd": "50025000.00",
"index_price": "50000.00",
"index_name": "BTC Index",
"index_currency": "BTC",
"start_timestamp": 0,
"end_timestamp": 0,
"funding_rate": "0.00010000",
"next_funding_rate": "0.00010000",
"next_funding_rate_timestamp": 1641002400,
"contract_type": "Vanilla",
"contract_price": "50000.00",
"contract_price_currency": "USD"
}
]
4. Orderbook
Method:
GET
Path:
/orderbook
Query Parameters:
ticker_id
(required): Ticker ID (e.g., "BTC-USD")depth
(optional): Number of orders per side (default: 100, max: 500)
Example Request:
GET /orderbook?ticker_id=BTC-USD&depth=50
Response:
{
"ticker_id": "BTC-USD",
"timestamp": 1640995200000,
"bids": [
["49950.00", "1.5"],
["49900.00", "2.0"]
],
"asks": [
["50050.00", "1.2"],
["50100.00", "0.8"]
]
}
WebSocket API
Connection
URL:
wss://back.dmex.app/ws
Protocol: WebSocket
Authentication: Required for most operations
Message Format
All WebSocket messages follow this JSON structure:
{
"type": "message_type",
"data": {
// Message-specific data
}
}
Client to Server Messages
1. Authentication
{
"type": "auth",
"data": {
"user_address": "0x1234567890abcdef...",
}
}
Response: User data, balances, positions, orders, etc.
2. Create Order
{
"type": "order",
"data": {
"symbol": "btcusd",
"side": "buy|sell",
"amount": "1.5",
"price": "50000.00",
"leverage": "10",
"margin_type": "isolated|cross",
"order_type": "limit|market",
"reduce_only": false,
"post_only": false
}
}
3. Cancel Order
{
"type": "cancelOrder",
"data": {
"order_id": "order_hash",
"hash": "0x...",
"v": 27,
"r": "0x...",
"s": "0x...",
"user": "0x..."
}
}
4. Subscribe to Asset
{
"type": "subscribeAsset",
"data": {
"asset": "btcusd"
}
}
Response: Asset data, orderbook, trades
5. Update Margin
{
"type": "updateMargin",
"data": {
"position_id": "position_hash",
"margin_delta": "100.00",
"hash": "0x...",
"v": 27,
"r": "0x...",
"s": "0x...",
"user": "0x..."
}
}
6. Change Risk Limit
{
"type": "changeRiskLimit",
"data": {
"risk_limit": "5000",
"hash": "0x...",
"v": 27,
"r": "0x...",
"s": "0x...",
"user": "0x..."
}
}
7. Withdraw
{
"type": "withdraw",
"data": {
"currency": "btc|eth|usdt|...",
"amount": "1.0",
"address": "destination_address",
"network": "bitcoin|ethereum|...",
"hash": "0x...",
"v": 27,
"r": "0x...",
"s": "0x...",
"user": "0x..."
}
}
8. Request Deposit Address
{
"type": "requestBtcAddress|requestEthAddress|requestXmrAddress|requestTronAddress|requestSolanaAddress",
"data": {}
}
9. Event Tracking
{
"type": "event",
"data": {
"unique_user_id": "user_id",
"event": "event_name",
"memo": "additional_info"
}
}
10. Ping
"ping"
Response: Connection stays alive
Server to Client Messages
1. Asset Data
{
"type": "assets",
"data": [
{
"symbol": "btcusd",
"last_price": "50000.00",
"mark_price": 50100.00,
"high": 51000.00,
"low": 49000.00,
"volume": 1500.50,
"change": 2.5,
"funding_rate": "0.0001",
"open_interest": 25000000.00,
"daily_trades": 1250
}
]
}
2. User Parameters
{
"type": "params_user",
"data": {
"risk_limit": "5000",
"mm_multiplier": "1.0",
"fr_multiplier": "1.0",
"btc_deposit_address": "bc1q...",
"eth_deposit_address": "0x...",
"xmr_deposit_address": "4...",
"tron_deposit_address": "T...",
"solana_deposit_address": "..."
}
}
3. Balances
{
"type": "balances",
"data": [
{
"currency": "btc",
"available": "1.5",
"total": "2.0",
"reserved": "0.5"
}
]
}
4. Positions
{
"type": "positions",
"data": [
{
"symbol": "btcusd",
"side": "long",
"size": "1.5",
"entry_price": "49500.00",
"mark_price": "50000.00",
"liquidation_price": "45000.00",
"unrealized_pnl": "750.00",
"margin": "5000.00",
"leverage": "10",
"margin_type": "isolated"
}
]
}
5. Orders
{
"type": "orders",
"data": [
{
"id": "order_hash",
"symbol": "btcusd",
"side": "buy",
"amount": "1.0",
"price": "49000.00",
"filled": "0.5",
"status": "open|filled|cancelled",
"type": "limit|market",
"timestamp": 1640995200000
}
]
}
6. Trades
{
"type": "trades",
"data": [
{
"symbol": "btcusd",
"price": "50000.00",
"amount": "0.5",
"side": "buy",
"timestamp": 1640995200000
}
]
}
7. Orderbook
{
"type": "orderbook",
"data": {
"symbol": "btcusd",
"bids": [
["49950.00", "1.5"],
["49900.00", "2.0"]
],
"asks": [
["50050.00", "1.2"],
["50100.00", "0.8"]
]
}
}
8. Mark Price Updates
{
"type": "mark_price",
"data": {
"symbol": "btcusd",
"price": 50125.50,
"timestamp": 1640995200000
}
}
9. Funding Rate Updates
{
"type": "funding_rate",
"data": {
"symbol": "btcusd",
"funding_rate": "0.0001"
}
}
10. Error Messages
{
"type": "error",
"data": {
"message": "Error description"
}
}
11. Success Messages
{
"type": "success",
"data": {
"message": "Operation successful"
}
}
Authentication
WebSocket Authentication
Connect to WebSocket endpoint
Send authentication message with user address and unique ID
Server validates and responds with user data
Message Signing
For sensitive operations (orders, withdrawals, margin updates), messages must be signed:
hash: Keccak256 hash of message data
v: Recovery ID (27 or 28)
r: First 32 bytes of signature
s: Last 32 bytes of signature
user: User's Ethereum address
Rate Limiting
Global Limits
Global: 1000 requests per second with burst of 5000
Per IP: 1 request per second with burst of 5
Connection Limits
Max connections per user: 5
Max total connections: Configurable via environment
Rate Limit Headers
Rate limit information is not exposed in headers but enforced server-side.
Error Handling
WebSocket Errors
{
"type": "error",
"data": {
"message": "Error description"
}
}
HTTP Errors
400 Bad Request: Invalid parameters
404 Not Found: Endpoint or resource not found
429 Too Many Requests: Rate limit exceeded
500 Internal Server Error: Server error
Common Error Messages
"Invalid wallet"
: Authentication failed"Too Many Requests"
: Rate limit exceeded"Ticker not found"
: Invalid asset symbol"SERVER MAX ALLOWED CONNECTIONS REACHED"
: Connection limit exceeded"Invalid Signature"
: Message signature validation failed
Data Types
Precision
Prices: Stored as big integers with 1e8 precision
Amounts: Stored as big integers with asset-specific precision
Funding Rates: Stored as big integers with 1e16 precision
Timestamps
WebSocket: Unix timestamps in milliseconds
REST: Unix timestamps in seconds or milliseconds (endpoint-specific)
Asset Symbols
Format:
{base}usd
(e.g., "btcusd", "ethusd")Case-insensitive but returned in lowercase
Order Sides
"buy"
or"sell"
Order Types
"limit"
: Limit order"market"
: Market order
Margin Types
"isolated"
: Isolated margin"cross"
: Cross margin
Order Status
"open"
: Active order"filled"
: Completely filled"cancelled"
: Cancelled order"partially_filled"
: Partially filled
Last updated
Was this helpful?