Your first payment.
Go from an API key to a hosted payment page in four steps.
1. Get your API key
Request beta access with your project name, website or short description, payment use case, estimated payments per day, and integration contact. Copy the request template. After approval, store the API key in your backend environment as DEDYX_API_KEY. Keep it out of browser bundles, URLs and source control.
2. Configure your webhook
Rate limit: 10 requests / 60 seconds (shared webhook settings · per merchant). Shared counters and additional IP limits.
curl -X PUT https://api.dedyx.com/api/v1/merchant/webhook \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url":"https://your-company.example/webhooks/dedyx"}'A webhook is required before creating payments. Use a public HTTPS endpoint on port 443. The first response includes your own signing_key: save it securely now, because it is shown once. Configure the receiver to verify signatures before processing events.
3. Create a payment page
Rate limit: 30 requests / 60 seconds (creation · per merchant). Shared counters and additional IP limits.
curl -X POST https://api.dedyx.com/api/v1/payments \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Idempotency-Key: order-1024' \
-H 'Content-Type: application/json' \
-d '{
"amount": "49.00",
"merchant_wallet": "TRzsBvFUhcvsy45ebmaKZ9EXw7zUorVkUm",
"description": "Order #1024"
}'Use a TRON address you control, an exact decimal amount and a new Idempotency-Key for each order. For a retry, reuse the same key and request body.
{
"payment_id": "pay_0123456789abcdef0123456789abcdef",
"expected_amount": "49.00",
"status": "PENDING",
"payment_url": "https://pay.dedyx.com/checkout/pay_0123456789abcdef0123456789abcdef"
}Redirect your customer to the returned payment_url. The default payment window is 30 minutes. The page handles the QR code and status updates.
4. Fulfil after a verified event
Receive the PAID webhook on your backend. Verify its HMAC signature, match the payment ID and amount to your order, and atomically record the event ID with your fulfilment action. Return 2xx for an already processed event.
Never fulfil an order based only on a browser redirect or a screenshot. Your backend can reconcile status using the authenticated payment details endpoint.