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 timestamp

    • to (optional): End timestamp

    • limit (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

  1. Connect to WebSocket endpoint

  2. Send authentication message with user address and unique ID

  3. 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?