Create Order
POST /api/v1/pay/create-order
Create a payment order — called after the user selects a chain and token. The backend automatically determines whether to use direct or cross-chain routing.
Request
{
"pay_blockchain": "base",
"pay_token": "USDC",
"settle_chain": "eip155:8453",
"settle_token": "USDC",
"merchant_address": "0xMerchant...",
"merchant_amount": "9500000",
"fee_receiver": "0xFeeReceiver...",
"fee_amount": "500000",
"merchant_id": "shop-001",
"payer_address": "0xPayer..."
}| Field | Type | Description |
|---|---|---|
pay_blockchain | string | Payment chain |
pay_token | string | Payment token |
settle_chain | string | Settlement chain (CAIP-2) |
settle_token | string | Settlement token |
merchant_address | string | Merchant receiving address |
merchant_amount | string | Amount received by merchant (smallest unit) |
fee_receiver | string | Fee receiver address |
fee_amount | string | Fee amount (smallest unit) |
merchant_id | string | Merchant identifier |
payer_address | string | Payer address |
Response — Direct (Same Chain)
The frontend receives contract parameters and calls the contract directly via the wallet.
{
"order_id": "550e8400-e29b-41d4-a716-446655440000",
"method": "Direct",
"direct": {
"contract_address": "0x688a356895101A6992248cA219C6a35f22BB4BAF",
"chain": "eip155:8453",
"payment_order": {
"order_id": "550e8400-e29b-41d4-a716-446655440000",
"token_in": "USDC",
"token_out": "USDC",
"amount_in": "10000000",
"token_in_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"merchant": "0xMerchant...",
"merchant_amount": "9500000",
"fee_receiver": "0xFeeReceiver...",
"fee_amount": "500000",
"deadline": 1711195800
}
},
"cross_chain": null,
"expires_at": "2026-03-23T12:30:00Z"
}Response — CrossChain
Cross-chain orders return a deposit address; the user simply transfers to that address.
{
"order_id": "550e8400-e29b-41d4-a716-446655440000",
"method": "CrossChain",
"direct": null,
"cross_chain": {
"deposit_address": "0xDepositAddr...",
"deposit_blockchain": "eth",
"deposit_token": "ETH",
"deposit_amount": "4200000000000000",
"deposit_amount_formatted": "0.0042",
"estimated_time": 120
},
"expires_at": "2026-03-23T12:30:00Z"
}Direct Contract Call
After receiving direct.payment_order, the frontend calls the CyberPay contract:
function pay(PaymentOrder calldata order) external;Contract addresses vary by chain:
| Chain | Contract Address |
|---|---|
Base Mainnet (eip155:8453) | 0x688a356895101A6992248cA219C6a35f22BB4BAF |
Base Sepolia (eip155:84532) | 0x4CdFbad716aF2b7df28985D8d1BacF00A047Fd5E |
| TON | EQBD2oIaYCelbhkIPRxdJQ7TQ74tZj4_3srK0ezTE6X_1JMV |
