Documentation
Checkout

Migrate Dynamic Payments

Replace temporary Paylinks with independent API Checkout Sessions.

Migrate Dynamic Payments

No migration is needed for fixed-price Paylinks. Continue using them as reusable product pages.

For dynamic carts, replace the temporary-Paylink pattern with this server flow:

  1. Recalculate and lock the final order total on your backend.
  2. Create one Checkout Session with amount, currency, and an order-scoped Idempotency-Key.
  3. Save the returned checkoutSessionId against your order.
  4. Redirect the buyer to the returned hosted url.
  5. Fulfill only when a verified payment.confirmed webhook matches the order.

Before and after

Temporary Paylink patternAPI Checkout
Create a reusable product object per cart totalCreate a short-lived payment attempt
Clean up unused linksSession expires automatically
Price modeled as catalog configurationPrice stored as an immutable order snapshot
Webhook always has paylinkIdStandalone webhook uses checkoutSessionId and merchantOrderId

If existing code expects paylinkId on every invoice event, make that field optional for invoice and payment events. It remains present for Paylink and subscription flows.

On this page