GET /checkout/{public_token} and POST /checkout/{public_token}/resolve
Not part of your API integration surface — this is an HTML page PayGate hosts and redirects the end user to when checkout-sessions couldn’t determine payment_method up front.
Your code never calls these directly; just redirect the browser to the checkout_url you got back from POST /api/v1/checkout-sessions and let PayGate handle the rest — the end user picks Stripe or a test payment on this page, and is eventually redirected to your success_url/cancel_url.
Bank transfer pages
When the end user picks Chuyển khoản (bank transfer — only offered for VND transactions on apps with an active bank-transfer provider), PayGate redirects to GET /checkout/{public_token}/bank: a VietQR code plus bank, account number, account holder, amount and a unique transfer content PG-XXXXXXXXXX (all with copy buttons) and a countdown to the checkout’s expiry. The page polls GET /checkout/{public_token}/status (JSON { "status", "expired", "redirect_url" }) and redirects to your success_url as soon as the transaction is completed.
The QR page is no longer shown after the checkout link expires, but a transfer that still arrives for a pending transaction is accepted and completes it. A transfer for less than the amount keeps the transaction pending and flags it for manual handling in the portal’s Transactions list; a larger amount still completes it.