Skip to main content
After a successful checkout, Nova.Pay can offer the customer an additional product — an upsell — charged to the same saved payment method with a single click. The customer does not need to re-enter their card details or go through a new checkout flow, making this a frictionless way to increase revenue per transaction.

How It Works

1

Customer Completes Checkout

The customer submits a payment via POST /payments as described in the Create a Payment guide. Nova.Pay processes the charge and returns a PaymentResult object.
2

Check for an Upsell Offer

If the checkout page has an upsell product configured and the payment was successful, the PaymentResult response will include an offer field. This value is a signed GlobalID (SGID) — a time-limited, single-use token that authorises the upsell charge.
If offer is absent from the response, either the checkout page has no upsell configured or the payment did not succeed.
3

Present the Upsell in Your UI

Display the upsell offer to the customer immediately after payment confirmation — for example, in a modal or a dedicated confirmation page section. Show the product name, price, and a clear call-to-action button.
The offer SGID is single-use and time-limited. Do not cache it or delay presenting it to the customer. Once expired or used, the token cannot be reused and a new checkout must be initiated.
4

Submit the Upsell if the Customer Accepts

If the customer clicks the upsell call-to-action, POST the offer SGID to the /upsell endpoint. Nova.Pay charges the original payment method on file — no additional card data is required.Endpoint: POST /upsell
The POST /upsell endpoint is not host-restricted. You can call it from your server or directly from the customer’s browser.
The meta object is optional and can carry any key-value pairs you want to associate with this upsell event (e.g. UI placement, A/B test variant).

Upsell Response Fields

A successful POST /upsell call returns an UpsellResult object.
order_status
string
required
Status of the upsell order (e.g. "paid", "pending", "refused"). Handle "refused" gracefully — the customer’s card may have been declined for the additional charge.
payments
array
Array of gateway-level payment IDs created for the upsell order.
bank_slip_url
string
URL to the generated boleto PDF for the upsell order. Present only if the original order was paid via boleto.
pix_qr_code
string
Base64-encoded Pix QR code image for the upsell order. Present only if the original order was paid via Pix.
pix_qr_code_url
string
Hosted URL for the Pix QR code image of the upsell order. Present only if the original order was paid via Pix.
pix_expires_at
string
ISO 8601 timestamp indicating when the upsell Pix QR code expires. Present only if the original order was paid via Pix.