Skip to content

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..."
}
FieldTypeDescription
pay_blockchainstringPayment chain
pay_tokenstringPayment token
settle_chainstringSettlement chain (CAIP-2)
settle_tokenstringSettlement token
merchant_addressstringMerchant receiving address
merchant_amountstringAmount received by merchant (smallest unit)
fee_receiverstringFee receiver address
fee_amountstringFee amount (smallest unit)
merchant_idstringMerchant identifier
payer_addressstringPayer 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:

ChainContract Address
Base Mainnet (eip155:8453)0x688a356895101A6992248cA219C6a35f22BB4BAF
Base Sepolia (eip155:84532)0x4CdFbad716aF2b7df28985D8d1BacF00A047Fd5E
TONEQBD2oIaYCelbhkIPRxdJQ7TQ74tZj4_3srK0ezTE6X_1JMV