Getting Started
The Mistex API allows partners to programmatically create exchanges, fetch real-time rates, and monitor order statuses. All endpoints return JSON.
https://mistex.io/api/v1HTTPS onlyJSON (Content-Type: application/json)60 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.
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.
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())/api/v1/currenciesList 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
| Name | Type | Required | Description |
|---|---|---|---|
id | UUID | Yes | Internal currency row id |
coin | string | Yes | Ticker symbol (e.g. BTC, USDT) |
network | string | Yes | Network identifier (e.g. BTC, TRC20, ERC20) |
name | string | Yes | Human-readable coin name |
is_active | boolean | Yes | Currency is enabled |
is_deposit_enabled | boolean | Yes | Deposits accepted |
is_withdraw_enabled | boolean | Yes | Withdrawals accepted |
min_amount | number | Yes | Minimum amount per order in the coin's units |
max_amount | number | Yes | Maximum amount per order in the coin's units |
min_confirmations | integer | Yes | Confirmations required for the deposit to clear |
decimals | integer | Yes | Decimal precision for display/rounding |
is_memo | boolean | No | Network requires a memo / destination tag (XRP, XLM, etc.) |
explorer_tx_url | string? | No | Block-explorer template for tx hashes. May be null |
explorer_address_url | string? | No | Block-explorer template for addresses. May be null |
icon_url | string? | No | Relative path to the coin icon served by the API |
Example Response
[
{
"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
curl -X GET "https://mistex.io/api/v1/currencies"/api/v1/partner/ratesGet 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
| Name | Type | Required | Description |
|---|---|---|---|
coin_from | string | Yes | Source coin ticker (e.g. BTC) |
coin_to | string | Yes | Destination coin ticker (e.g. USDT) |
network_from | string | No | Source network (e.g. BTC, ERC20, TRC20) |
network_to | string | No | Destination network |
amount | number | No | Amount to exchange (uses min_amount if omitted) |
rate_type | string | No | "float" (default) or "fixed" |
Example Request
GET /api/v1/partner/rates?coin_from=BTC&coin_to=USDT&network_to=TRC20&amount=1Response
{
"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
curl -X GET "https://mistex.io/api/v1/partner/rates?coin_from=BTC&coin_to=USDT&network_to=TRC20&amount=1"/api/v1/partner/ordersAuth requiredCreate 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
| Name | Type | Required | Description |
|---|---|---|---|
coin_from | string | Yes | Source coin ticker |
network_from | string | Yes | Source network |
coin_to | string | Yes | Destination coin ticker |
network_to | string | Yes | Destination network |
amount_from | number | Yes | Amount to send (must be > 0) |
rate_type | string | Yes | "float" or "fixed" |
recipient_address | string | Yes | Wallet address to receive funds |
recipient_address_tag | string | No | Memo/tag for coins that require it (XRP, XLM, etc.) |
refund_address | string | No | Refund address if exchange fails |
Example Request
{
"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)
{
"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
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"
}'/api/v1/partner/orders/{order_id}Auth requiredGet Order Status
Fetch the current status and details of an existing order. You can only query orders created by your partner account.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
order_id | string | Yes | The order UUID or its short ID (e.g. DX-AD3NA4). Short IDs are case-insensitive. |
Response
{
"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
# 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:
| Status | Description |
|---|---|
waiting_deposit | Order created, waiting for user to send funds to the deposit address |
confirming | Deposit transaction detected, waiting for blockchain confirmations |
exchanging | Deposit confirmed, exchange is in progress |
sending | Exchange complete, payout transaction is being sent |
completed | Payout sent successfully. The order is done |
expired | No deposit received within the time limit |
refunding | Exchange failed, refund is being processed |
refunded | Refund sent to the refund address |
failed | Order failed (contact support with order ID) |
Error Codes
All errors return a JSON body with a detail field describing the issue.
{
"detail": "Invalid API key"
}| Code | Message | Description |
|---|---|---|
400 | Bad Request | Missing or invalid parameters. Check the response body for details |
401 | Unauthorized | Missing or invalid API key (order endpoints) |
403 | Forbidden | Partner account is not active, or action not permitted |
404 | Not Found | Order not found or does not belong to your partner account |
422 | Unprocessable Entity | Validation error (e.g. amount below minimum) |
429 | Too Many Requests | Rate limit exceeded. Slow down requests |
500 | Internal Server Error | Unexpected error. Retry or contact support |
Ready to integrate?
Sign up as a partner to receive your API key and start building.
Become a partner →