# 1、Create Payment Request
API Description
Merchants can use this API to create a new cryptocurrency payment order. The system will return a cashier link and order details, and the user can complete the payment through the cashier page.
Request Method
- POST
 
Request URL
/api/v3/wallet/pay
Request Header
Content-Type: application/json;charset=utf-8
| Parameter Name | Description | Example Value | 
|---|---|---|
| access_key | Merchant's access key | pFqV75X3 | 
| timestamp | Unix timestamp in milliseconds | 1679724896223 | 
| nonce | UUID V4 | 794c26b0-d33c-4394-b2bb-c485eca16d9e | 
| sign | Calculated signature | kAXyh+eerqrefyaF8dyFB0M4FVo= | 
Request Parameters (JSON)
{
  "externalOrderId": "402297358314559082",
  "cashierChainType": "ETH",
  "cashierTokenType": "USDT",
  "cashierCryptoAmount": "1",
  "cashierCurrencyType": "USD",
  "hiddenMerchantLogo": 0,
  "hiddenMerchantName": 0,
  "notifyUrl": "http://192.168.1.135:30002/url",
  "remark": "123"
}
Parameter Description
| Parameter Name | Type | Description | Required | 
|---|---|---|---|
| externalOrderId | String(64) | Merchant's order ID | Yes | 
| cashierChainType | String | Blockchain type:TRON BSC ETH | No | 
| cashierTokenType | String | Cryptocurrency type, enum values:  USDT USDC PEPE DOGE PUSD  |  No | 
| cashierCryptoAmount | String | Cryptocurrency amount, with precision according to token (either this or cashierCurrencyAmount) | No | 
| cashierCurrencyAmount | String | Fiat currency amount, with precision ≤2 digits (if provided, it will be automatically converted to the corresponding cryptocurrency amount based on the platform's exchange rate) | No | 
| cashierCurrencyType | String | Fiat currency type, possible values: USD, BRL, CNY (required if providing fiat currency amount) | No | 
| hiddenMerchantLogo | int64 | Whether to hide the merchant logo, possible values: 0, 1. 0 - Do not hide logo, 1 - Hide logo (default is 0 if not provided) | No | 
| hiddenMerchantName | int64 | Whether to hide the merchant name, possible values: 0, 1. 0 - Do not hide name, 1 - Hide name (default is 0 if not provided) | No | 
| notifyUrl | String | Callback URL (if provided, the system will callback this URL; otherwise, it will callback the URL configured in the merchant backend) | No | 
| remark | String(1024) | Order remark | No | 
| successRedirectUrl | String | Redirect URL after successful payment | No | 
Response Type
Content-Type: application/json;charset=utf-8
Response Example 1 (Order based on cryptocurrency type)
{
  "code": "200",
  "success": true,
  "msg": "成功",
  "msgEn": "SUCCESS",
  "data": {
    "cashierId": "OCRYPPAID202307310902391690794159250DOCKER020000000200001107",
    "cashierUrl": "http://192.168.1.74:89/OCRYPPAID202307310902391690794159250DOCKER020000000200001107",
    "cashierExpireTime": 1690794759313,
    "cashierCryptoAmount": "1",
    "cashierCurrencyAmount": "0.98",
    "cashierRate": 0.983,
    "cashierCurrencyType": "USD",
    "cashierTokenType": "USDT",
    "cashierChainType": "ETH",
    "isHiddenMerchantName": false,
    "isHiddenMerchantLogo": false,
    "externalOrderId": "402297358314559082",
    "remark": "123",
    "cryptoOrder": {
      "addressTo": "0xe072c63c1e04f8c6f36133f6629f66778147d5d8",
      "orderId": "OCRYPPAID202307310902391690794159441DOCKER020000000400001108",
      "externalOrderId": "402297358314559082",
      "exchangeRate": 0.983,
      "currencyAmount": "0.98",
      "cryptoAmount": "1",
      "currencyType": "USD",
      "tokenType": "USDT",
      "chainType": "ETH",
      "orderStatus": "Wait pay",
      "orderStatusCode": 1,
      "orderExpireTime": 1690801360527
    }
  }
}
Response Example 2 (Order based on fiat currency type)
{
  "code":"200",
  "success":true,
  "msg":"成功",
  "msgEn":"SUCCESS",
  "data":{
    "cashierId":"OCRYPPAID20250417031656174485981616300000201297223",
    "cashierUrl":"http://192.168.1.74:89/OCRYPPAID2025041703165617448598161630000201297223",
    "cashierExpireTime":1744860416178,
    "cashierCurrencyAmount":10,
    "cashierRate":0,
    "cashierCurrencyType":"BRL",
    "cashierTokenType":"",
    "cashierChainType":"",
    "isHiddenMerchantName":true,
    "isHiddenMerchantLogo":true,
    "externalOrderId":"00637444",
    "remark":"test order",
    "cryptoOrder":{
    }
  }
}
Response Parameter Description
| Parameter Name | Type | Description | 
|---|---|---|
| cashierId | String | Cashier ID | 
| cashierUrl | String | Cashier URL | 
| cashierExpireTime | int64 | Cashier expiration timestamp | 
| cashierCryptoAmount | string | Cryptocurrency amount at the cashier | 
| cashierCurrencyAmount | string | Fiat currency amount at the cashier | 
| cashierRate | float64 | Exchange rate at the cashier | 
| cashierCurrencyType | String | Fiat currency type at the cashier | 
| cashierTokenType | String | Cryptocurrency type at the cashier | 
| cashierChainType | String | Cryptocurrency main chain type at the cashier | 
| isHiddenMerchantName | Boolean | Whether the merchant name is hidden | 
| isHiddenMerchantLogo | Boolean | Whether the merchant logo is hidden | 
| externalOrderId | String | Merchant's order ID | 
| remark | String | Remark | 
| addressTo | String | Blockchain payment address | 
| orderId | String | Order ID | 
| exchangeRate | float64 | Exchange rate at the time of order creation | 
| currencyAmount | String | Fiat currency amount in the order | 
| cryptoAmount | String | Cryptocurrency amount in the order | 
| currencyType | String | Fiat currency type in the order | 
| tokenType | String | Cryptocurrency type in the order | 
| chainType | String | Main chain type of the cryptocurrency in the order | 
| orderExpireTime | int64 | Order expiration timestamp | 
| orderStatus | String | Order status description | 
| orderStatusCode | int64 | Status code, values: 1, 2, 4, 8, 16. A normal created payment order response is 1; later status updates can be checked via queries or callbacks. Detailed status codes can be found below. | 
Order Status Code Description
| Status Code | Status Description | Final Status | Explanation | 
|---|---|---|---|
| 1 | Awaiting Payment | No | The order has been created but the user has not made the payment yet; no action needed. | 
| 2 | Confirming on Blockchain | No | The user has clicked "Completed Payment" on the cashier page, and the system is checking if the payment is confirmed on the blockchain; no action needed. | 
| 4 | Completed | Yes | Payment successful, the system will trigger a callback; the merchant should process according to business logic such as adding balance or fulfilling orders. | 
| 8 | Payment Amount Mismatch | Yes | User paid an amount ≠ expected amount, the system will trigger a callback; it is recommended to credit the actual amount paid. | 
| 16 | Payment Timeout | Yes | The user did not pay in time, and the system will not trigger a callback; if the merchant confirms receipt, manual handling is needed. | 
| 32 | Not Paid (Address Released) | Yes | The user did not pay for a long time, the address is released; if payment is made later, a new order will be generated. |