💳 Native Checkout Integration
API Update Notice
There have been recent updates to the API endpoints and parameters. Please refer to the Change Record for details.
Native Checkout API: Users can scan the QR code or copy the address on the checkout page built on your sites/apps to make the payments.
Integrate with Native Checkout API to build the checkout page for your sites/apps. Users pay in your sites/apps. No need to lead them to external pages. Take complete control of your users' checkout experience.
📦 1. Create Order
- Interface Description: Submit payment orders through this interface and obtain receipt information.
- Interface Address:
POST /api/order/create
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| out_trade_no | string | Yes | Merchant Order ID |
| currency_id | int | Yes | Global unique currency ID |
fiat_name | string | No | Fiat name (USD / USDT / JPY / CHF / CAD / NOK / SEK / HKD / SGD / KRW / TWD / CNY / INR / BRL / MXN / ZAR / RUB / TRY / EUR / GBP / AUD / VND / THB) |
| fiat_amount | string | No | Fiat amount ("1.2") |
| token_amount | string | No | Token amount |
| callback_url | string | No | Callback url |
| time_out | int64 | No | 10-digit expiration timestamp, fill in 0, default is 30 minutes (1753513764) |
Response Field Description
| Field | Type | Description | Example |
|---|---|---|---|
| trade_no | string | Transaction ID | "20250629153045a7b3c9d2e5f8a1b4c6" |
| chain | string | Blockchain network | "Tron" |
| token | string | Cryptocurrency token | "TRX" |
| contract | string | Token contract address | "TRX" |
| amount | string | Transaction amount | "15.724197" |
| mode | string | Payment mode | "address" |
| pay_address | string | Recipient address | "TSg8kWPE2s7z5Lon6bSnZZrYnquGHx2..." |
| time_expire | integer | Expiration timestamp | 1753515371 |
| decimal | integer | Token decimals | 6 |
| chain_id | integer | Chain ID | 3448148188 |
| equity | integer | Equity value | 1 |
| create_time | integer | Creation timestamp | 1753513571 |
| amount_collected | string | Collected amount | "0" |
| need_confirms | integer | Required confirmations | 0 |
| already_confirms | integer | Current confirmations | 0 |
| entrust_url | string | Payment URL | "https://checkout.pay.halochat.io/20260....b876498e0771e1" |
| referer | string | Referrer information | "" |
| chain_info | object | Chain information | {"token": "TRX", "rpc": "...", ...} |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"trade_no": "20260317173635066d54f5b6c7269d41",
"chain": "Tron",
"token": "TRX",
"contract": "TRX",
"amount": "16.556743",
"mode": "address",
"pay_address": "THgSjcyhyxfzrjtS7VYw1vnHvb7QkMsY...",
"time_expire": 1773741995,
"decimal": 6,
"chain_id": 3448148188,
"equity": 1,
"create_time": 1773740196,
"amount_collected": "",
"need_confirms": 0,
"already_confirms": 0,
"entrust_url": "https://checkout.pay.halochat.io/20260317173635066d54f5b6c7269d41",
"referer": "",
"chain_info": {
"token": "TRX",
"abi": "",
"rpc": "https://nile.trongrid.io",
"browser_url": "https://nile.tronscan.org/#/transaction",
"decimal": 6,
"logo": "https://halo-n.oss-ap-southeast-1.aliyuncs.com/png/202505/45d1f4b5-b80f-4331-af78-ec557f97d832.png",
"series": "Tron",
"monitor_chain_id": 3448148188
}
}
}
🔍 2. Query Order
- Interface Description: Use this interface to query the order status.
- Interface Address:
POST /api/order/detail
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| trade_no | string | Yes | Transaction ID |
Response Field Description
| Field | Type | Description | Example |
|---|---|---|---|
| trade_no | string | Transaction ID (platform) | "20250629153045a7b3c9d2e5f8a1b4c6" |
| out_trade_no | string | Merchant's order ID | "202401011753513569" |
| chain | string | Blockchain network | "Tron" |
| token | string | Cryptocurrency token | "TRX" |
| contract | string | Token contract address | "TRX" |
| fiat_name | string | Fiat currency name | "USD" |
| fiat_amount | string | Fiat amount to pay | "5" |
| amount | string | Crypto amount to send | "15.724197" |
| mode | string | Payment mode | "address" |
| pay_address | string | Recipient crypto address | "TSg8kWPE2s7z5Lon6bSnZZrYnquGHx2..." |
| status | string | Transaction status | "TO-BE-PAID" |
| time_expire | integer | Expiration timestamp (Unix) | 1753515371 |
| decimal | integer | Token decimals | 6 |
| chain_id | integer | Chain ID | 3448148188 |
| equity | integer | Equity value | 1 |
| create_time | integer | Creation timestamp (Unix) | 1753513571 |
| amount_collected | string | Collected amount | "0" |
| need_confirms | integer | Required confirmations | 0 |
| already_confirms | integer | Current confirmations | 0 |
| entrust_url | string | Payment URL (if applicable) | "" |
| referer | string | Referrer information | "" |
| chain_info | object | Chain information | {"token": "TRX", "rpc": "...", ...} |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"trade_no": "20260317173635066d54f5b6c7269d41",
"out_trade_no": "ORDER_1773740195363",
"chain": "Tron",
"token": "TRX",
"contract": "TRX",
"fiat_name": "USD",
"fiat_amount": "5",
"amount": "16.556743",
"mode": "address",
"pay_address": "THgSjcyhyxfzrjtS7VYw1vnHvb7QkMsY...",
"status": "TO-BE-PAID",
"time_expire": 1773741995,
"decimal": 6,
"chain_id": 3448148188,
"equity": 1,
"create_time": 1773740196,
"amount_collected": "0",
"need_confirms": 0,
"already_confirms": 0,
"entrust_url": "",
"referer": "",
"chain_info": {
"token": "TRX",
"abi": "",
"rpc": "https://nile.trongrid.io",
"browser_url": "https://nile.tronscan.org/#/transaction",
"decimal": 6,
"logo": "",
"series": "",
"monitor_chain_id": 0
}
}
}
💱 3. Price Exchange
- Interface Description: Get the current exchange rate between TOKEN and legal currency.
- Interface Address:
POST /api/order/exchange-rates
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| currency_id | int | Yes | Global unique currency ID |
fiat_name | string | Yes | Fiat currency abbreviation (USD / USDT / JPY / CHF / CAD / NOK / SEK / HKD / SGD / KRW / TWD / CNY / INR / BRL / MXN / ZAR / RUB / TRY / EUR / GBP / AUD / VND / THB) |
| fiat_amount | string | Yes | Fiat currency amount |
Response Field Description
| Field | Type | Description |
|---|---|---|
| amount | string | Amount |
| exchange_rate | string | Exchange rate |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"amount": "0.00001971",
"exchange_rate": "100"
}
}
📋 4. App Token List (with balance)
- Interface Description: Returns cryptocurrencies enabled for receiving payments under the current app (
X-Appid), with aggregated balances (same basis asPOST /api/account/balance). This is not the full platform catalog; for all supported tokens use §5 Token List. - Interface Address:
POST /api/currency/app-token-list - Request Parameters: Request body is
{}(same auth headers as other APIs).
Response Field Description
Root object:
| Field | Type | Description |
|---|---|---|
| code | integer | Business code, 0 means success |
| msg | string | Message |
| data | array | Enabled tokens and balances for the current app |
data[] elements:
| Field | Type | Description |
|---|---|---|
| currency_id | integer | Global unique currency ID |
| chain | string | Chain name |
| network | string | Network name |
| token | string | Token symbol |
| contract | string | Contract address |
| chain_id | integer | Chain ID |
| logo | string | Token logo URL |
| decimal | integer | Token decimals |
| balance | string | Total balance (decimal string) |
| operable_balance | string | Operable balance |
| frozen_amount | string | Frozen amount |
| status | integer | Status: 1 — enabled, 2 — disabled |
| transaction_enabled | boolean | Receiving enabled (always true in this response) |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": [
{
"currency_id": 46,
"chain": "Tron",
"network": "Nile",
"token": "JST",
"contract": "TF17BgPaZYbxxxxhriubPDsA7ArKoLX3",
"chain_id": 3448148188,
"logo": "https://halo-n.oss-ap-southeast-1.aliyuncs.com/png/202505/xxx-c3f3-4d5d-a9b5-0143d78326f9.png",
"decimal": 18,
"balance": "0.785074013",
"operable_balance": "0.785074013",
"frozen_amount": "0",
"status": 1,
"transaction_enabled": true
}
]
}
📋 5. Token List
- Interface Description: Get the Token list supported by the system. For your app’s enabled receiving tokens and balances, use §4 App Token List.
- Interface Address:
POST /api/currency/token-list - Request Parameters: None
Response Field Description
| Field | Type | Description |
|---|---|---|
| currency_id | int | Global unique currency ID. |
| chain | string | Chain |
| network | string | Network |
| token | string | token |
| contract | string | Contract address. If the current main currency is the same as the currency name, the value will be consistent with the currency name. |
| chain_id | int | Chain ID. Only the Ethereum series has a value. |
| logo | string | Logo |
| decimal | int | Precision |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": [
{
"currency_id": 46,
"chain": "Tron",
"token": "JST",
"network": "Nile",
"contract": "TF17BgPaZYbxxxxhriubPDsA7ArKoLX3",
"chain_id": 3448148188,
"logo": "https://halo-n.oss-ap-southeast-1.aliyuncs.com/png/202505/xxx-c3f3-4d5d-a9b5-0143d78326f9.png",
"decimal": 18
}
]
}
💸 6. Payout
- Interface Description: Merchants can withdraw cash to a specified address through this interface.
- Interface Address:
POST /api/payout/create
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| currency_id | int | Yes | Global unique currency ID |
| amount | string | Yes | Currency base amount |
| to_address | string | Yes | Recipient address |
| callback_url | string | No | Callback address (default callback address set by merchant APPID) |
| google_code | string | No | Google verification code (required if verification is enabled for the current app) |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"cost": "0.801502",
"actual_receipt": "0.001",
"trade_no": "202603171746187e582d1b789b27ea55",
"estimated_transfer": "0"
}
}
📊 7. Query Transfer Status
- Interface Description: Query the order status of payout.
- Interface Address:
POST /api/payout/detail
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| trade_no | string | Yes | Transaction no |
Response Field Description
| Field | Type | Description |
|---|---|---|
| trade_no | string | Transaction ID |
| service_charge | string | Service Fee |
| gas | string | GAS Fee |
| token | string | Currency |
| amount | string | Amount |
| target_address | string | Recipient Address |
| start_time | int | Start Time |
| created_time | int | Creation Time |
| status | string | Transaction Status (CONFIRMING-PROGRESS: Confirming, PAID: Success, FAIL: fail, CANCEL: Canceled, PROGRESS: Pending) |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"service_charge": "0.000002",
"gas": "0.8015",
"amount": "0.001",
"status": "TRANSFER",
"target_address": "TDYiTL3pke3T9BsoTotbKb922WsXQCmS...",
"start_time": 1773740882,
"created_time": 1773740882,
"trade_no": "202603171748020a09cbb09b4846bc99",
"token": "DK7bKg181cC7pBgX3PxSIH2WdklZ5IPT"
}
}
💰 8. Check Balance
Retrieve single currency balance information for an application via this API.
- Interface Address:
POST /api/account/balance
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| currency_id | int | Yes | Global unique currency ID |
Response Field Description
| Field | Type | Description |
|---|---|---|
| currency_id | int | Global unique currency ID |
| balance | string | Remaining Quantity |
| balance_usdt | string | Value of Remaining Quantity Converted to USDT |
| operable_balance | string | The operable quantity (If the main currency amount in the wallet address is too low to collect, that wallet address cannot be used. Refer to personal center => network settings for the minimum operable threshold.) |
| operable_balance_usdt | string | Value of Operable Quantity |
| chain | string | Chain name |
| network | string | Network |
| token | string | Token |
| contract | string | Contract Address (main token as abbreviated token name) |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"currency_id": 46,
"balance": "0.785074013",
"operable_balance": "0.785074013",
"operable_balance_usdt": "0.043642",
"balance_usdt": "0.043642",
"chain": "Tron",
"network": "Nile",
"token": "JST",
"contract": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3"
}
}
🖼️ 9. Static Payment QR Code
- Interface Description: Apply for an independent static payment address via the API. It will callback the CallBack interface address of the corresponding APPID.
- Interface Address:
POST /api/payment-qr-code/create
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | QR code name |
| currency_id | int | Yes | Global unique currency ID |
| amount | string | No | Default payment amount (can be "0") |
Response Field Description
| Field | Type | Description | Example |
|---|---|---|---|
| id | int | Unique QR code ID | 115 |
| address | string | Static payment address | "TXd8UKLtLqk5V15v7e3W43ZdNw5berp6DP" |
Successful Response Example
{
"code": 0,
"msg": "success",
"data": {
"id": 115,
"address": "TXd8UKLtLqk5V15v7e3W43ZdNw5berp6DP"
}
}
💡
This requires the APPID of the QR code application to make a request to this API.