Create a one-time payment
Creates a payment for a one-time product (frequencyInDays is null).
Returns a checkout URL to redirect your customer to.
For custom price products (isCustomPrice: true), provide priceCents and currency.
Subscription products? Use
POST /api/subscription/createinstead.
Authorizations
API key authentication
Body
ID of a one-time product
"pro_abc123"
Optional. Links the payment to an existing customer by their stable id (as returned by
GET /api/customer and on payment responses/webhooks). Keeps the same customer linked even if
their email has changed. Takes precedence over customerEmail. Returns 404 if unknown.
255"usr_abc123"
Optional. If provided (and no customerId is given), a user account is created (or reused by
email) immediately and linked to the payment. If both are omitted, the payment is created without
a customer and the email is collected on the hosted checkout page.
"customer@example.com"
Optional. Customer first name. Backfills the display name when the customer has none. Ignored when neither customerId nor customerEmail is provided.
100"John"
Optional. Customer last name. Backfills the display name when the customer has none. Ignored when neither customerId nor customerEmail is provided.
100"Doe"
Price in cents as a string.
Required when the product has isCustomPrice: true. Must NOT be provided for fixed-price products.
"2500"
Currency for the price. Required when priceCents is provided, ignored otherwise.
USD, EUR "USD"
Optional. A discount code (created via POST /api/discount/create) to pre-apply to this checkout.
The discount is applied to the amount the customer pays. Ignored if the code is invalid,
expired, exhausted, or not attached to this product.
50"WELCOME10"
Your internal reference (order ID, invoice number, etc.). One-time payments are always
independent — each POST /api/payment/create yields its own paymentId and never creates or
extends a subscription, regardless of externalRef.
255"order_789"
Custom key-value pairs. Returned in webhooks.
Extra fields shown on the checkout page to collect information from the customer
(e.g. Discord username, referral source, terms acceptance).
Customer responses are returned in the context.customFieldsResponse object of
every payment webhook.
Maximum 10 fields per payment. For subscriptions, fields are collected on the
initial checkout only — renewals do not re-prompt the customer, and their webhooks
will have customFields and customFieldsResponse set to null.
10Redirect URL after successful payment
"https://your-app.com/success"
Redirect URL if customer cancels
"https://your-app.com/cancel"

