Skip to main content
POST

Authorizations

x-api-key
string
header
required

API key for authentication. Get yours from Settings → Integrations. A key created by a team member acts as that member and follows their current team permissions; a request outside those permissions returns 403 { "error": "insufficient_scope", "scope": "<required>" }.

Body

application/json
lineItems
object[]
required
Minimum array length: 1
dueDate
string
required

ISO 8601 date (YYYY-MM-DD) or date-time string.

invoiceType
enum<string>
default:email_invoice

email_invoice (default) creates a recipient-bound invoice. payment_link creates a shareable checkout link with no recipient — omit customer fields; the payer supplies them at checkout.

Available options:
email_invoice,
payment_link
customerId
string | null

Optional existing customer ID. A new customer record is created if omitted. Rejected when invoiceType is payment_link.

customerName
string
customerEmail
string<email>
additionalEmails
string<email>[]

Extra recipients copied on the invoice email.

customerAddress
object
paymentType
enum<string>
default:one_time
Available options:
one_time,
renewal
currency
string
default:usd

3-letter ISO 4217 currency code (lowercase).

taxCents
integer
default:0
Required range: x >= 0
discountCents
integer
default:0
Required range: x >= 0
collectCustomerFee
boolean
default:true

Whether processing fees are added on top of the customer's total.

allowedPaymentTypes
enum<string>[]

Payment rails the invoice should accept. Order is non-significant.

Pay-now values (card / wallet / Plaid ACH / crypto) are processed by Whop's hosted checkout. The BNPL rails (klarna, affirm, afterpay_clearpay, scalapay, sunbit, zip, sezzle, splitit, claritypay, tamara, sequra, kueski, addi, oney_3x, oney_4x, and the card_installments_* values) are also processed by Whop: the payer still pays totalCents, but SideShift deducts a 16% merchant fee from the amount credited to the merchant when the payer chooses to pay over time. A BNPL option only appears to the payer when the provider is enabled for the account, supports the invoice currency, and the invoice total falls within the provider's supported amount range; ineligible BNPL methods are filtered out without affecting the other payment methods. BNPL applies to one-time invoices only; renewal invoices exclude BNPL rails.

bank_transfer is special: it provisions a Stripe Customer Balance virtual receiving account dedicated to wire transfers (USD, EUR, GBP, JPY, MXN). Customers wire totalCents plus a 1% platform fee; the merchant is credited only totalCents. ACH pulls remain on the us_bank_account rail. We never link out to a Stripe-hosted page.

Available options:
card,
apple_pay,
google_pay,
link,
us_bank_account,
sepa_debit,
bacs_debit,
acss_debit,
au_becs_debit,
cashapp,
paypal,
venmo,
klarna,
affirm,
afterpay_clearpay,
scalapay,
sunbit,
zip,
sezzle,
splitit,
claritypay,
tamara,
sequra,
kueski,
addi,
oney_3x,
oney_4x,
card_installments_three,
card_installments_six,
card_installments_twelve,
crypto,
bank_transfer
description
string | null
notes
string | null
terms
string | null
sendReminders
boolean
default:true

Whether to send automatic past-due reminders.

sendEmail
boolean
default:true

Send the hosted payment link by email immediately on create.

Response

Invoice created

invoice
object
url
string

Hosted payment URL for the customer