POST/payment/create

Create a new crypto payment. Returns a unique deposit address where the customer sends funds. Each payment expires in 15 minutes.

data_objectRequest Body (JSON)

ParameterTypeDescription
networkstringBlockchain network: ethereum, polygon, bsc, arbitrum, tron, solana, bitcoin
coinstringCoin symbol: USDT, USDC, ETH, BTC, TRX, SOL, BNB, POL
amountnumberPayment amount (positive number). In the specified currency (default USD).
currencystringAmount denomination currency. Default: "USD"
customer_emailstringCustomer email for reference/notification
customer_walletstringCustomer wallet address (for reference)
metadataobjectCustom key-value metadata attached to the payment
Request example
cURL
curl -X POST https://api.paycrypt.io/payment/create \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -d '{
    "network": "ethereum",
    "coin": "USDT",
    "amount": 50,
    "currency": "USD",
    "customer_email": "customer@example.com",
    "metadata": { "plan": "pro", "user_id": "u-789" }
  }'
jsonResponse — 201 Created
{
  "payment_id": "9515b51e-0279-4294-805d-91f7762914c3",
  "order_id": "123",
  "deposit_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD68",
  "amount": 50,
  "coin": "USDT",
  "network": "ethereum",
  "currency": "USD",
  "expires_at": "2026-02-20T10:10:46.000Z",
  "status": "pending"
}
info
Order ID: order_id is generated by PayCrypt for each payment (sequential per environment). You can use it in your UI and when calling GET /payment/status, but it is not sent in the request body.
lightbulb
Merchant currencies: The network and coin must be enabled in your Dashboard → Currencies settings. Otherwise, the API returns 400.
info
Expiry: Payments expire after 15 minutes. If the customer does not send funds in time, the status changes to expired and a payment.expired webhook is sent.