Skip to main content
POST
Create a one-time payment

Authorizations

X-Suby-Api-Key
string
header
required

API key authentication

Body

application/json
productId
string
required

ID of a one-time product

Example:

"pro_abc123"

customerId
string

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.

Maximum string length: 255
Example:

"usr_abc123"

customerEmail
string<email>

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.

Example:

"customer@example.com"

customerFirstName
string

Optional. Customer first name. Backfills the display name when the customer has none. Ignored when neither customerId nor customerEmail is provided.

Maximum string length: 100
Example:

"John"

customerLastName
string

Optional. Customer last name. Backfills the display name when the customer has none. Ignored when neither customerId nor customerEmail is provided.

Maximum string length: 100
Example:

"Doe"

priceCents
string

Price in cents as a string. Required when the product has isCustomPrice: true. Must NOT be provided for fixed-price products.

Example:

"2500"

currency
enum<string>

Currency for the price. Required when priceCents is provided, ignored otherwise.

Available options:
USD,
EUR
Example:

"USD"

discountCode
string

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.

Maximum string length: 50
Example:

"WELCOME10"

externalRef
string

Your internal reference (order ID, invoice number, etc.)

Maximum string length: 255
Example:

"order_789"

metadata
object

Custom key-value pairs. Returned in webhooks.

customFields
object[]

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.

Maximum array length: 10
successUrl
string<uri>

Redirect URL after successful payment

Example:

"https://your-app.com/success"

cancelUrl
string<uri>

Redirect URL if customer cancels

Example:

"https://your-app.com/cancel"

Response

Payment created

success
boolean
Example:

true

data
object