The product lifecycle
A product moves through three states via itsstatus field:
Step 1 — Create the draft product
"status": "draft" and an id like prod_abc123. Other fields you can set at creation: body_html, button_cta, available_from / available_until (date-times for scheduled availability), tax_code, and images (covered below).
Step 2 — Attach a price variant
Every price variant must reference its product:Step 3 — Publish
The price variant model
A single product can carry several price variants (a “monthly” and an “annual”, say), and each is defined by two key enums plus a handful of modifiers.amount_type — what the buyer pays
billing_type — how often they pay
Modifier fields
The response also returns
discounted_from_amount (for showing a strike-through “was” price), benefits, purchase_url, and position (ordering among a product’s variants).Worked examples
Each example below assumes you’ve already created a draft productprod_abc123 and shows just the price variant. Remember to PATCH the product to active once at least one variant exists.
- One-time
- Monthly subscription
- Payment plan
- Pay-what-you-want
- Free lead magnet
A single $49 charge — the simplest sellable thing.
Adding images
A product’s gallery is set by passing an array of MediaLibrary file ids inimages. The first id is the cover.
file_... ids by uploading via POST /files, or by generating artwork with POST /images/generate (generated images land in your MediaLibrary automatically). Passing an empty array ("images": []) clears the gallery.
Next steps
Checkouts
Turn published price variants into payments with checkouts and checkout links.
Subscriptions & billing
Manage the subscriptions, invoices, and refunds your price variants generate.
Discounts
Add promo codes scoped to specific price variants.
Commerce overview
Step back to the full mental model of how the primitives connect.

