QOM X API Documentation

Base URL: https://api.qomx.io (clean paths)

Single trading pair: QOM/USDT (symbol: QOMUSDT)

Rate limits: ~800 req/min global (per IP), ~300 req/min public polling (per IP), ~30 req/min private actions (per wallet), ~12 req/min on order place/cancel (per wallet).

Public Endpoints (No Auth Needed)

Private Trading API (Wallet Auth Required - Bot Friendly)

Web3-native auth: No API keys. Bots sign with wallet private key.

Step 1: Get Nonce

POST /auth/nonce
{ "address": "0xYourWalletAddress" }

Step 2: Sign Message

Use this exact message format:

Login to QOMX
Address: 0xYourWalletAddress
Nonce: [nonce-from-step1]

Sign with ethers.js/viem (personal_sign or eth_sign).

Step 3: Login for JWT

POST /auth/login
{
  "address": "0xYourWalletAddress",
  "signature": "0x...",
  "message": "Login to QOMX\nAddress: 0x...\nNonce: ..."
}

Response includes token (valid ~24h). Use in header: Authorization: Bearer [token]

Trading Endpoints

Example Bot Code (Node.js + ethers + axios)
// Install: npm i ethers axios
const axios = require('axios');
const { ethers } = require('ethers');

const API = 'https://api.qomx.io';
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY'); // Secure this!

async function getToken() {
  const { data: { nonce } } = await axios.post(`${API}/auth/nonce`, { address: wallet.address });
  const message = `Login to QOMX\nAddress: ${wallet.address}\nNonce: ${nonce}`;
  const signature = await wallet.signMessage(message);
  const { data } = await axios.post(`${API}/auth/login`, { address: wallet.address, signature, message });
  return data.token;
}

async function placeMarketBuy(amount) {
  const token = await getToken();
  const res = await axios.post(`${API}/order`, {
    symbol: 'QOMUSDT',
    side: 'BUY',
    type: 'MARKET',
    quantity: amount.toString()
  }, { headers: { Authorization: `Bearer ${token}` } });
  console.log(res.data);
}

placeMarketBuy(100);

For support: qomx.io or @QomX_io on X.