Integrate Mistex
into your product

Build on top of our no-KYC exchange. Get access to 1200+ trading pairs, real-time rates, and instant order creation via a simple REST API.

Getting Started

The Mistex API allows partners to programmatically create exchanges, fetch real-time rates, and monitor order statuses. All endpoints return JSON.

Base URLhttps://mistex.io/api/v1
ProtocolHTTPS only
FormatJSON (Content-Type: application/json)
Rate limit60 requests/minute (default for public endpoints)

Currency and rate lookups (/currencies, /partner/rates) are public and require no authentication. Order endpoints (/partner/orders) require your API key as a Bearer token in theAuthorization header.

Default rate limit is 60 requests/minute for unauthenticated requests. Partners with API keys receive higher limits. To increase your rate limit, please contact support.

Authentication

Order endpoints are authenticated with your API key as a Bearer token. Your key is shown once when you create it in the cabinet, in the formkey_id.secret — send the whole string in the Authorizationheader. That’s the only header you need; no request signing.

AuthorizationBearer your_key_id.secret
Content-Typeapplication/json

The rate and currency endpoints are public and need no authentication at all.

Also accepted (for compatibility). If you prefer, you can send the same key in an X-API-Key header instead of Authorization. An optionalX-Signature header — HMAC-SHA256(secret, request_body)hex digest — is still verified if present, so existing signed integrations keep working, but it is no longer required. Order lookups accept the order UUID as well as the short ID. Pre-cabinet plaintext keys (without a dot) are not accepted — create a key from the cabinet.

python
import requests

# Your full API key from the cabinet, shown once at creation: "key_id.secret"
API_KEY = "dk_live_xxxxxxxx.your_secret"
BASE_URL = "https://mistex.io/api/v1"

# Send the key as a standard Bearer token — no signing required.
response = requests.post(
    f"{BASE_URL}/partner/orders",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "coin_from": "BTC",
        "network_from": "BTC",
        "coin_to": "XMR",
        "network_to": "XMR",
        "amount_from": 0.05,
        "rate_type": "float",
        "recipient_address": "48vKMSe5p...",
    },
)

print(response.json())
GET/api/v1/currencies

List Currencies

Returns all active currencies and their networks. Use this to populate your UI with available coins, show min/max amounts, and determine which networks are supported.

No parameters required. No authentication needed.

Response Fields

NameTypeRequiredDescription
idUUIDYesInternal currency row id
coinstringYesTicker symbol (e.g. BTC, USDT)
networkstringYesNetwork identifier (e.g. BTC, TRC20, ERC20)
namestringYesHuman-readable coin name
is_activebooleanYesCurrency is enabled
is_deposit_enabledbooleanYesDeposits accepted
is_withdraw_enabledbooleanYesWithdrawals accepted
min_amountnumberYesMinimum amount per order in the coin's units
max_amountnumberYesMaximum amount per order in the coin's units
min_confirmationsintegerYesConfirmations required for the deposit to clear
decimalsintegerYesDecimal precision for display/rounding
is_memobooleanNoNetwork requires a memo / destination tag (XRP, XLM, etc.)
explorer_tx_urlstring?NoBlock-explorer template for tx hashes. May be null
explorer_address_urlstring?NoBlock-explorer template for addresses. May be null
icon_urlstring?NoRelative path to the coin icon served by the API

Example Response

json
[
  {
    "id": "a1b2c3d4-...",
    "coin": "BTC",
    "network": "BTC",
    "name": "Bitcoin",
    "is_active": true,
    "is_deposit_enabled": true,
    "is_withdraw_enabled": true,
    "min_amount": 0.0005,
    "max_amount": 100.0,
    "min_confirmations": 2,
    "decimals": 8,
    "is_memo": false,
    "explorer_tx_url": null,
    "explorer_address_url": null,
    "icon_url": "/api/v1/coin-icons/btc.svg?v=1777463560"
  },
  {
    "id": "e5f6g7h8-...",
    "coin": "USDT",
    "network": "TRC20",
    "name": "Tether",
    "is_active": true,
    "is_deposit_enabled": true,
    "is_withdraw_enabled": true,
    "min_amount": 10.0,
    "max_amount": 500000.0,
    "min_confirmations": 20,
    "decimals": 6,
    "is_memo": false,
    "explorer_tx_url": null,
    "explorer_address_url": null,
    "icon_url": "/api/v1/coin-icons/usdt.svg?v=1777463560"
  }
]

cURL

bash
curl -X GET "https://mistex.io/api/v1/currencies"
GET/api/v1/partner/rates

Get Exchange Rate

Fetch the current exchange rate for a trading pair. Supports both floating and fixed rate types. No authentication is required — though if you send your X-API-Key, the quote reflects your account’s pricing.

For coins that exist on multiple networks (USDT, USDC, etc.) passnetwork_from / network_to— otherwise the pair may be rejected as unavailable.

Query Parameters

NameTypeRequiredDescription
coin_fromstringYesSource coin ticker (e.g. BTC)
coin_tostringYesDestination coin ticker (e.g. USDT)
network_fromstringNoSource network (e.g. BTC, ERC20, TRC20)
network_tostringNoDestination network
amountnumberNoAmount to exchange (uses min_amount if omitted)
rate_typestringNo"float" (default) or "fixed"

Example Request

http
GET /api/v1/partner/rates?coin_from=BTC&coin_to=USDT&network_to=TRC20&amount=1

Response

json
{
  "coin_from": "BTC",
  "coin_to": "USDT",
  "rate_type": "float",
  "rate": 68518.82,
  "min_amount": 0.0013,
  "max_amount": 43.35,
  "expires_in": null
}

The min_amount and max_amountfields represent the exchange limits for this pair. There is no separate limits endpoint — use this response to validate user input before creating an order.

cURL

bash
curl -X GET "https://mistex.io/api/v1/partner/rates?coin_from=BTC&coin_to=USDT&network_to=TRC20&amount=1"
POST/api/v1/partner/ordersAuth required

Create Order

Create a new exchange order. Returns a deposit address where the user should send funds. The order expires if no deposit is received within 30 minutes.

Request Body

NameTypeRequiredDescription
coin_fromstringYesSource coin ticker
network_fromstringYesSource network
coin_tostringYesDestination coin ticker
network_tostringYesDestination network
amount_fromnumberYesAmount to send (must be > 0)
rate_typestringYes"float" or "fixed"
recipient_addressstringYesWallet address to receive funds
recipient_address_tagstringNoMemo/tag for coins that require it (XRP, XLM, etc.)
refund_addressstringNoRefund address if exchange fails

Example Request

json
{
  "coin_from": "BTC",
  "network_from": "BTC",
  "coin_to": "XMR",
  "network_to": "XMR",
  "amount_from": 0.05,
  "rate_type": "float",
  "recipient_address": "48vKMSe5p...your_xmr_address",
  "refund_address": "bc1q...your_btc_address"
}

Response (201 Created)

json
{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "short_id": "MX-8A3F2D",
  "status": "waiting_deposit",
  "created_at": "2026-04-07T12:34:56Z",
  "expires_at": "2026-04-07T13:04:56Z",
  "coin_from": "BTC",
  "network_from": "BTC",
  "coin_to": "XMR",
  "network_to": "XMR",
  "amount_from_expected": 0.05,
  "amount_to_expected": 5.431,
  "rate_type": "float",
  "rate_quoted": 108.62,
  "deposit_address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "deposit_address_tag": null,
  "recipient_address": "48vKMSe5p...your_xmr_address",
  "deposit_txid": null,
  "deposit_confirmations": null,
  "deposit_confirmations_required": 2,
  "payout_txid": null
}

cURL

bash
curl -X POST "https://mistex.io/api/v1/partner/orders" \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "coin_from": "BTC",
    "network_from": "BTC",
    "coin_to": "XMR",
    "network_to": "XMR",
    "amount_from": 0.05,
    "rate_type": "float",
    "recipient_address": "48vKMSe5p...your_xmr_address",
    "refund_address": "bc1q...your_btc_address"
  }'
GET/api/v1/partner/orders/{order_id}Auth required

Get Order Status

Fetch the current status and details of an existing order. You can only query orders created by your partner account.

Path Parameters

NameTypeRequiredDescription
order_idstringYesThe order UUID or its short ID (e.g. DX-AD3NA4). Short IDs are case-insensitive.

Response

json
{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "short_id": "MX-8A3F2D",
  "status": "exchanging",
  "created_at": "2026-04-07T12:34:56Z",
  "expires_at": "2026-04-07T13:04:56Z",
  "coin_from": "BTC",
  "network_from": "BTC",
  "coin_to": "XMR",
  "network_to": "XMR",
  "amount_from_expected": 0.05,
  "amount_to_expected": 5.431,
  "rate_type": "float",
  "rate_quoted": 108.62,
  "deposit_address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "deposit_address_tag": null,
  "recipient_address": "48vKMSe5p...your_xmr_address",
  "deposit_txid": "a1b2c3d4e5f6...",
  "deposit_confirmations": 2,
  "deposit_confirmations_required": 2,
  "payout_txid": null
}

cURL

bash
# By short ID, using the standard Authorization: Bearer header
curl -X GET "https://mistex.io/api/v1/partner/orders/DX-AD3NA4" \
  -H "Authorization: Bearer your_api_key"

# ...or by UUID with X-API-Key — both work
curl -X GET "https://mistex.io/api/v1/partner/orders/f47ac10b-58cc-4372-a567-0e02b2c3d479" \
  -H "X-API-Key: your_api_key"

You can pass either the UUID from the create response or the short ID (short_id, e.g. DX-AD3NA4) — both resolve to the same order.

Order Statuses

An order progresses through these statuses during its lifecycle:

StatusDescription
waiting_depositOrder created, waiting for user to send funds to the deposit address
confirmingDeposit transaction detected, waiting for blockchain confirmations
exchangingDeposit confirmed, exchange is in progress
sendingExchange complete, payout transaction is being sent
completedPayout sent successfully. The order is done
expiredNo deposit received within the time limit
refundingExchange failed, refund is being processed
refundedRefund sent to the refund address
failedOrder failed (contact support with order ID)
waiting_depositconfirmingexchangingsendingcompleted

Error Codes

All errors return a JSON body with a detail field describing the issue.

json
{
  "detail": "Invalid API key"
}
CodeMessageDescription
400Bad RequestMissing or invalid parameters. Check the response body for details
401UnauthorizedMissing or invalid API key (order endpoints)
403ForbiddenPartner account is not active, or action not permitted
404Not FoundOrder not found or does not belong to your partner account
422Unprocessable EntityValidation error (e.g. amount below minimum)
429Too Many RequestsRate limit exceeded. Slow down requests
500Internal Server ErrorUnexpected error. Retry or contact support

Ready to integrate?

Sign up as a partner to receive your API key and start building.

Become a partner →