VietBilling
VietBilling Docs

Checkout

Create and reconcile Checkouts for recurring Products on PayOS.

Create checkout on the server

A Checkout joins a Customer to the current live ProductPrice of a recurring Product. You may identify an existing Customer or let VietBilling resolve/create one from external_customer_id and email.

const result = await fetch(
  `${apiUrl}/public/v2/checkouts`,
  {
    method: "POST",
    headers: apiHeaders,
    body: JSON.stringify({
      external_customer_id: account.id,
      customer_email: account.ownerEmail,
      customer_name: account.name,
      product_id: productId,
      success_url: `${appUrl}/billing/success`,
      cancel_url: `${appUrl}/billing`,
    }),
  },
).then((res) => res.json())

redirect(result.data.checkout_url)

Check the return

A success page is not proof of payment. Your server should fetch GET /public/v2/checkouts/{checkoutId}; final access decisions still depend on a verified webhook.

Avoid stale sessions

Retry the same logical request with the same Idempotency-Key. Do not reuse a succeeded checkout_url; an open Checkout expires after 30 minutes.