Skip to main content
XPayLabs exposes a RESTful API over HTTP. Every request uses a standard signed envelope format (ReqPayload), and every response follows a consistent structure (R<T>). This page covers the foundational concepts that apply across all endpoints.

Base URL

All API requests target your self-hosted gateway via the nginx gateway. The default external port is 180:
If you are running behind a reverse proxy (Nginx, Caddy), use your configured HTTPS domain.

Request Format

Every POST request must use the standard ReqPayload<T> envelope:
FieldTypeDescription
signstringHMAC-SHA256 signature of the stringified data object
timestampintegerUnix timestamp (seconds)
noncestringUnique request identifier
dataobjectThe actual request parameters
See the Authentication page for details on computing the sign value.

Response Format

All responses use the standard R<T> envelope:
FieldTypeDescription
codeintegerHTTP status code (200 on success)
msgstringStatus message ("success" or error description)
dataobjectThe response payload (varies by endpoint)

Error Response

Authentication

All requests must be signed with your merchant token using HMAC-SHA256. There are no Bearer tokens or cookies involved. The merchant token is configured in your gateway and never transmitted over the network. See the Authentication page for the full signing reference.

HTTP Methods

MethodUse
POSTCreate a resource (collection, payout)
GETRetrieve a resource or list

Rate Limits

Rate limits are configurable per merchant in the gateway configuration. Defaults:
EndpointLimit
POST /v1/order/createCollection100 requests per 10 seconds
POST /v1/order/createPayout100 requests per 10 seconds
GET /v1/order/status/{orderId}1000 requests per 10 seconds
GET /v1/order/pay2 requests per second per orderId
GET /v1/order/getOrderStatus2 requests per second per orderId
GET /v1/symbol/supportSymbols50 requests per 10 seconds
Exceeding the limit returns a 429 Too Many Requests response.

Amounts

All monetary amounts are expressed as string-formatted decimals (e.g., "100.00" for 100 USDT). The number of decimal places depends on the token’s configured decimals — USDT uses 2 decimal places on most chains (shown as "100.00"), while the internal representation uses the token’s native decimals.
Last modified on June 26, 2026