What paygate is, and the four things that will bite you if you skip them.
paygate takes USDT payments over an HTTP API and webhooks. Your customer pays from a hosted page; you write no web3 code, hold no keys, and never see a wallet library.
Everything below is the same for every integration, whatever you are billing for.
checkout_url — or draw the checkout in your own app, from a live stream of the same data. See In-app checkout.detected → confirming → paid.paid is not finalA chain reorganisation deeper than the confirmation window moves a paid payment to reversed and emits payment.reversed. If you ship goods on payment.paid, you are accepting that risk knowingly — and you can rehearse it:
curl -X POST https://api.paygatehq.com/v1/test/payments/{id}/reorg \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: $(uuidgen)" -d '{}'
Wait for settled instead if you cannot absorb a reversal.
Every event carries a stable id. Deduplicate on it. A handler that is not idempotent will double-credit an account the first time a delivery is retried after your 200 was lost on the way back.
amount is micro-units (6 decimal places). amount_decimal is the same value as fixed-point text.
Use the string in any language whose JSON parser produces floats — which is JavaScript, and the reason 25000000 / 1e6 is not reliably 25. See Amounts.
Six on Tron, eighteen on BSC. The API always speaks micro-units so you never have to care; the raw on-chain amount is published per route for the wallets that do.