Welcome to Quantiex - the next-gen compliant DeFi payment and trading platform.
Quantiex is a compliant stablecoin settlement and payment solution built on the Web3 ecosystem. It simplifies your crypto-finance operations by combining full regulatory compliance with the speed, low costs, and global reach of decentralized infrastructure — enabling businesses and developers to accept, send, settle, and trade stablecoins seamlessly without the traditional headaches of legacy systems or unregulated crypto rails.
Our composable APIs and tools let you integrate compliant DeFi features quickly, whether you're building merchant acquiring, cross-border remittances, social invoicing, or advanced trading experiences — all while staying on the right side of regulations.
Empower your business with fast, low-cost acquiring and crypto payments. Accept stablecoin payments or seamless fiat conversions — online, in-app, at point-of-sale, or anywhere globally — backed by built-in compliance for secure, hassle-free operations.
Cross-border transfers arrive instantly, costing just a few cents. Utilize Web3 rails to move stablecoins (or fiat equivalents) worldwide with minimal fees, no intermediaries, and settlement in seconds instead of days.
Create and share invoices instantly through your favorite social platforms. Generate professional, trackable invoices in moments, distribute them via Telegram, Discord, WhatsApp, X, email, or other channels, and enable recipients to pay directly with stablecoins or fiat — all automated and effortless.
Seamlessly manage and disburse payroll to your international team across multiple countries. Automate compliant payouts in stablecoins or local fiat equivalents, handle multi-currency conversions, ensure regulatory adherence (tax, reporting, and KYC where required), and reduce costs and delays for distributed workforces.
The following diagram illustrates the simplified payment flow:
┌──────────────┐
│ Create │
│ Order │
└──────┬───────┘
│
▼
┌──────────────┐
│ Create │
│ Payment │
│ Info │
└──────┬───────┘
│
▼
┌──────────────┐
│ Customer │
│ Pays │
└──────┬───────┘
│
▼
┌──────────────┐
│ Payment │
│ Confirmed │
└──────┬───────┘
│
▼
┌──────────────┐
│ Settlement │
│ Completed │
└──────┬───────┘
│
▼
┌──────────────┐
│ Withdraw │
│ Funds │
└──────────────┘
To get started, you need to authenticate and obtain a JWT token. If you don't have an account yet, you'll need to register first (contact support or use the registration endpoint). Once you have credentials, use the login endpoint to authenticate.
What this does:
Important: Save the returned JWT token securely. You'll need it for all subsequent API requests.
curl -X POST https://api.quantiex.com/api/v1/login \
-H "Content-Type: application/json" \
-d '{
"email": "merchant@example.com",
"password": "SecurePassword123!"
}'
Know Your Business (KYB) verification is required before you can create orders and accept payments. This step submits your company's basic information for verification.
What this does:
Important:
curl -X POST https://api.quantiex.com/api/v1/kyb/basic \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"company_name": "Example Corp",
"region_id": 1,
"registration_number": "12345678",
"entity_type_id": 1,
"entity_type_other": ""
}'
Note: Get region_id from GET /api/v1/dict/regions and entity_type_id from GET /api/v1/dict/entity-types.
Once your KYB is approved, you can start creating orders. A transaction order represents a payment request from your customer. This is the first step in the payment flow.
What this does:
Use cases:
Create a transaction order:
curl -X POST https://api.quantiex.com/api/v1/transaction/setup \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"order_amount": 100.50,
"currency": "USD",
"transaction_id": "",
"memo": "Payment for order #001"
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
order_amount |
float64 | Yes | Order amount |
currency |
string | No | Currency (default: USD) |
transaction_id |
string | No | External order ID; if empty, auto-generated (format: YYYYMMDDHHmmss + 3 random digits) |
memo |
string | No | Memo/notes |
Response:
{
"code": 0,
"msg": "Success",
"data": {
"id": 1,
"created_at": "2025-01-22T10:00:00+08:00",
"updated_at": "2025-01-22T10:00:00+08:00",
"merchant_id": "MBJ000001",
"merchant_order_id": "MBJ0000012025012200001",
"order_amount": "100.50",
"currency": "USD",
"transaction_id": "20250122100000001",
"amount_random_suffix": "1234",
"state": "Created",
"payment_id": 0,
"settlement_id": 0,
"memo": "Payment for order #001"
}
}
Alternatively, you can create an invoice order for more detailed billing scenarios. Invoice orders support itemized billing with tax calculations and multiple line items.
What this does:
Use cases:
Alternatively, create an invoice order:
curl -X POST https://api.quantiex.com/api/v1/invoice/setup \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"invoice_date": "2025-01-22",
"due_date": "2025-02-22",
"from_email": "payer@example.com",
"from_name": "Payer Company",
"from_address": "Payer Address",
"to_email": "receiver@example.com",
"to_name": "Receiver Company",
"to_address": "Receiver Address",
"currency": "USD",
"tax_rate": 0.1,
"discount_amount": 0,
"memo": "Invoice for services",
"items": [
{
"item_name": "Consulting Service",
"unit_price": 50.00,
"quantity": 2,
"sort_order": 1
}
]
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice_date |
string | Yes | Invoice date (format: YYYY-MM-DD) |
due_date |
string | Yes | Due date (format: YYYY-MM-DD) |
from_email |
string | Yes | Payer email |
from_name |
string | Yes | Payer name |
from_address |
string | No | Payer address |
to_email |
string | Yes | Receiver email |
to_name |
string | Yes | Receiver name |
to_address |
string | No | Receiver address |
currency |
string | Yes | Currency |
items |
array | Yes | Invoice items (at least one) |
Invoice Item Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
item_name |
string | Yes | Item name |
unit_price |
float64 | Yes | Unit price (must be > 0) |
currency |
string | No | Currency (defaults to invoice currency) |
unit |
string | No | Unit |
quantity |
uint | Yes | Quantity |
Response: Returns full invoice detail (same structure as invoice/detail). For new invoices, payment fields (paid_date, paid_amount, transaction_hash, etc.) are empty.
{
"code": 0,
"msg": "Success",
"data": {
"ID": 1,
"invoice_number": "INV-MERCHANT-20240115-123456",
"merchant_order_id": "MBJ0000012024011400001",
"total_amount": 110.00,
"amount_random_suffix": "1234",
"state": "Created",
"items": [...],
"paid_date": "",
"paid_amount": "",
"transaction_hash": ""
}
}
Note: The system auto-generates invoice number and merchant order ID. The response includes the full invoice detail; use data.ID or data.invoice_number to create payment information.
After creating an order, you need to set up payment information to specify how customers should pay. This step configures the blockchain network, token, and calculates the exact payment amount.
What this does:
Important:
token_amount to the Payment contract addressAfter creating an order, create payment information to receive payments:
curl -X POST https://api.quantiex.com/api/v1/order-payment/setup \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"order_type": "transaction",
"order_id": 1,
"network": "ethereum",
"chain_id": "1",
"token_symbol": "USDT",
"token_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"token_decimal": 6
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
order_type |
string | Yes | Order type: transaction or invoice |
order_id |
uint | Yes | Order ID |
network |
string | Yes | Blockchain network |
chain_id |
string | Yes | Chain ID |
token_symbol |
string | Yes | Token symbol (e.g., USDT, USDC) |
token_address |
string | Yes | Token contract address |
token_decimal |
int | Yes | Token decimal places (1-18) |
Response:
{
"code": 0,
"msg": "Success",
"data": {
"payment": {
"ID": 1,
"merchant_id": "MBJ000001",
"merchant_order_id": "MBJ0000012025012200001",
"order_type": "transaction",
"order_id": 1,
"order_amount": "100.50",
"currency": "USD",
"payment_status": "Pending",
"network": "ethereum",
"chain_id": "1",
"token_symbol": "USDT",
"token_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"token_decimal": 6,
"token_amount": "100.501234",
"CreatedAt": "2025-01-22T10:00:00Z"
}
}
}
Key Information:
token_amount: The exact amount customers must send (includes unique suffix for matching)Important: Customers must send the exact token_amount to the Payment contract address configured for the chain. You can call GET /api/v1/blockchain/config (no auth) to get chain list, supported tokens, Payment contract address, and block_explorer_url for each chain (e.g. {block_explorer_url}/tx/{hash} for transaction links).
To show customers multiple chains/tokens and generate scan-to-pay QR codes, call the payment-options API with the merchant order ID (returned when creating the transaction or invoice). This is a public endpoint; no JWT required.
curl -X POST https://api.quantiex.com/api/v1/order-payment/payment-options \
-H "Content-Type: application/json" \
-d '{
"order_type": "transaction",
"merchant_order_id": "MBJ0000012025012200001"
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
order_type |
string | Yes | Order type: transaction or invoice |
merchant_order_id |
string | Yes | Merchant order ID (from transaction or invoice) |
Response: Returns order_type, order_id, merchant_order_id, total_amount_usd, amount_random_suffix, and a payments array. Each item includes chain_id, network, token_symbol, token_address, token_decimal, token_amount, order_amount, display_amount, payment_uri (EIP-681 URI for wallet scan-to-pay; scheme is ethereum, chain specified by @chain_id), and rate info: rate, rate_updated_at, rate_source. Use payment_uri to generate QR codes. No user/merchant check; any caller can query by order_type and merchant_order_id.
Monitor your payment orders to track their status and see when payments are confirmed.
Option A: Query by order (public, no auth) — Use POST /api/v1/order-payment/payment-status to poll payment status by merchant_order_id and order_type. No JWT required; returns empty payment_status if not found. Suitable for payment pages or external systems polling for confirmation.
curl -X POST https://api.quantiex.com/api/v1/order-payment/payment-status \
-H "Content-Type: application/json" \
-d '{
"merchant_order_id": "MBJ0000012024011400001",
"order_type": "transaction"
}'
Option B: List with filters (requires JWT) — Query payment information with various filters.
What this does:
Payment statuses:
Pending: Payment information created, waiting for customer paymentPaid: Payment confirmed and matched successfullyCheck the payment status:
curl -X POST https://api.quantiex.com/api/v1/order-payment/list \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"page": 1,
"pageSize": 10
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
page |
int | No | Page number (default: 1) |
pageSize |
int | No | Page size (default: 10) |
merchant_order_id |
string | No | Filter by merchant order ID |
order_type |
string | No | Filter by order type |
payment_status |
string | No | Filter by payment status |
network |
string | No | Filter by network |
token_symbol |
string | No | Filter by token symbol |
Response:
{
"code": 0,
"msg": "Success",
"data": {
"list": [
{
"ID": 1,
"merchant_order_id": "MBJ0000012025012200001",
"order_type": "transaction",
"order_amount": "100.50",
"currency": "USD",
"payment_status": "Pending",
"token_amount": "100.501234"
}
],
"total": 1
}
}
Once you have available balance from settled payments, you can withdraw funds to your blockchain wallet address. This step creates a withdrawal request that will be processed after review.
What this does:
Important:
Create a withdrawal request:
curl -X POST https://api.quantiex.com/api/v1/withdraw/setup \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"withdraw_amount": "100.00",
"currency": "USD",
"withdraw_type": "blockchain",
"network": "ethereum",
"chain_id": "1",
"token_symbol": "USDT",
"token_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"to_address": "0x9876543210987654321098765432109876543210"
}'
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
withdraw_amount |
string | Yes | Withdrawal amount |
currency |
string | Yes | Currency |
withdraw_type |
string | Yes | Withdrawal type: blockchain |
network |
string | Yes | Blockchain network |
chain_id |
string | Yes | Chain ID |
token_symbol |
string | Yes | Token symbol |
token_address |
string | Yes | Token contract address |
to_address |
string | Yes | Recipient wallet address |
Response:
{
"code": 0,
"msg": "Success",
"data": {
"withdraw": {
"ID": 1,
"withdraw_no": "WD-20250122-00001",
"withdraw_amount": "100.00",
"withdraw_status": "Pending",
"review_status": "Pending"
}
}
}
Note: The withdrawal request will be reviewed and processed. Check the withdrawal status using the withdrawal list endpoint.
| Endpoint | Method | Description |
|---|---|---|
/api/v1/send-code |
POST | Request email verification code |
/api/v1/register |
POST | Register a new user account |
/api/v1/login |
POST | Login and get JWT token |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/dict/regions |
GET | Get region dictionary |
/api/v1/dict/entity-types |
GET | Get entity type dictionary |
/api/v1/dict/banks |
GET | Get bank list (for bank card withdrawal; optional query: country) |
/api/v1/blockchain/config |
GET | Get blockchain config (chains, tokens, block_explorer_url per chain; no sensitive fields) |
/api/v1/blockchain/estimate-fee |
GET | 取现交易手续费评估(query: chain_id;与取现时 Gas 计算一致) |
/api/v1/token-rate/rate |
GET | Get single token rate (query: token_symbol) |
/api/v1/token-rate/rates |
GET | Get all token rates |
/api/v1/token-rate/convert |
POST | Convert token amount to USD (body: token_symbol, token_amount) |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/transaction/setup |
POST | Create a transaction order |
/api/v1/transaction/list |
POST | Get transaction list |
/api/v1/transaction/detail |
POST | Get transaction detail |
/api/v1/invoice/setup |
POST | Create an invoice |
/api/v1/invoice/list |
POST | Get invoice list |
/api/v1/invoice/detail |
POST | Get invoice detail (public; body: id or invoice_number, either one) |
/api/v1/invoice/delete |
POST | Delete an invoice |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/order-payment/setup |
POST | Create payment information |
/api/v1/order-payment/list |
POST | Get payment order list (Admin: all merchants; others: own only) |
/api/v1/order-payment/detail |
POST | Get payment detail (Admin: any; others: own only) |
/api/v1/order-payment/payment-options |
POST | Get payment options by merchant_order_id (public; token amounts + EIP-681 QR URI) |
/api/v1/order-payment/payment-status |
POST | Query payment status by merchant_order_id and order_type (public; no auth; returns empty if not found) |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/balance/available-funds |
GET | Get merchant available funds (total_usd, assets, rates) |
/api/v1/balance/total |
GET | Get total balance info (network must match config enabled chains; no record = 0) |
/api/v1/balance/assets |
GET | Get asset list by token_symbol only (no token_address); config enabled chains only; default 0 when no record |
/api/v1/balance/history |
GET | Get balance change history (network/chain_id must match config enabled chains) |
/api/v1/balance/erc20 |
GET | Query ERC20 token balance (config enabled chains only) |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/withdraw/setup |
POST | Create withdrawal request |
/api/v1/withdraw/list |
POST | Get withdrawal list (Admin: all; others: own only) |
/api/v1/withdraw/detail |
POST | Get withdrawal detail (Admin: any; others: own only) |
/api/v1/withdraw/review |
POST | Review withdrawal (approve/reject; requires withdraw_review permission) |
/api/v1/withdraw/bank-info |
GET | Get merchant's latest bank card withdrawal info (for pre-fill form) |
All API requests (except public endpoints) require JWT authentication.
Authorization: Bearer {your_jwt_token}
new-token and new-expires-at in response headers; use the new token to refresh without re-loginhttps://api.quantiex.com/api/v1
code field before processing data