Support & changelog
How to reach support, and the revision history of this documentation set.
Generated from public-api.mdVersion 1.2.0Last updated 2026-09-20
#Support
For technical support, contact your account manager or the support channel issued with your credentials. For the current production brand:
- Telegram:
@paymenow_support_bot - Help centre:
https://help.paymenow.asia
Quote the trace_id from the error details (or the X-Request-ID response
header) when reporting a failed request.
There is no public status page today; GET /health reports API gateway
liveness only.
#Changelog
#v1.2.0 (2026-09-20)
Full audit of this document against the shipped code. Corrections:
- Brand/hosts: replaced
gateway.i-pay.one/pay.i-pay.one/docs.i-pay.one/[email protected]with<domain>placeholders plus the current production values (api.paymenow.asia,sandbox-api.paymenow.asia). - Sandbox is selected by host, not by merchant type alone — production and sandbox are different base URLs, and the previous claim that they share one URL was wrong.
- Authentication: documented that
PATHexcludes the query string, that the trailing|is omitted for empty bodies, the real key formats (pk_prod_/pk_demo_40 chars,sk_prod_/sk_demo_72 chars — not "64 characters"), the 5-minute credential cache, and the403 IP_NOT_WHITELISTEDbehaviour. - New endpoints documented:
GET /v1/payments/get-balance,POST /v1/payments/{id}/upload-slip(with its file-hash signature variant),/v1/merchant-reports/*,/health, and the/sandbox/*helpers. - Deposit: added
paid_amount(the unique-satang amount the customer must actually transfer); default expiry corrected from 15 to 10 minutes; documented the 50 THB floor and merchant min/max; notedreference_idis not an idempotency key. payment_url: this entry used to say the field was never populated and that no hosted checkout page existed. Both stopped being true in September 2026 — the page ships, the field carries its link, and the field table and example above show it.- Withdraw: documented the 100 THB floor, the 5-minute duplicate-payout
hold, that the creation status is
pending/processing, and thatbank_code: "PROMPTPAY"is rejected by validation (the PromptPay proxy is not reachable through this API). - Get Payment: corrected — it never returns
qr_code,qr_code_imageorpaid_amount. - Cancel: corrected — a cancelled payment reports
status: "failed", notcancelled. - Statuses: full list (
pending,processing,pending_approval,completed,failed,expired,refunded,cancelled) with the real transition rules. Expiry producesexpired, notfailed— reversing the incorrect v1.1.0 claim. - Webhooks: added
paidAmountandfailureReason;refunded/transaction.refundeddocumented;expiredis current, not legacy; exact signature formula (timestamp + "|" + raw_body, signed with the API secret key, not the webhook-configsecret); theX-Webhook-EventandX-Transaction-IDheaders; the 10-second delivery timeout; the flat 1-minute retry interval; the report-event envelope; and the at-least-once duplicate caveat for transaction webhooks. - Errors: replaced the invented code list with the codes actually emitted,
each with its HTTP status; noted that
PAYMENT_NOT_FOUND,PAYMENT_ERROR,DUPLICATE_REFERENCEandINVALID_BANK_CODEare not emitted; documenteddetails.reason/details.trace_idandX-Request-ID. - Rate limits: corrected from the fictional 100/30/20 per-endpoint table to
the real single 60/min per-merchant bucket for
/v1/payments/*, a separate 60/min bucket for/v1/merchant-reports/*, and the 300/min per-IP sandbox helper limit. - Sandbox: corrected the test-amount table (
888.88is not a timeout trigger), separated deposit and withdraw outcomes, and documented thetimeout/invalid_accountscenarios accurately. - Bank codes: added
032,039,045,052; clarified that codes are length-validated only and that the table is the set resolved to a bank name. - Support: replaced the non-existent email/docs/status URLs with the real Telegram and help-centre channels.
#v1.1.0 (2025-12-24)
- Updated webhook payload format to flat structure
- Added
qr_code_imagefield in deposit response (Base64 PNG) - Added deposit fields:
bank_code,bank_account_no,bank_account_name - Added more bank codes
- Added rate limit documentation
- Added transaction expiry documentation
- (This release also claimed expiry sets status to
failed; that was incorrect and is corrected in v1.2.0.)
#v1.0.0 (2024-12-12)
- Initial release
- Deposit payments with PromptPay QR
- Withdrawal/payout to bank accounts
- HMAC-SHA256 authentication
- Webhook notifications
- Sandbox/Production merchant type routing

