Create products, attach price variants, and publish — covering the draft → active lifecycle and every billing type from one-time to pay-what-you-want.
A product is the listing; a price variant is how it’s priced and billed — and a product needs at least one price variant before it can go live. Get the creation order right and the rest is a small, predictable set of fields.You can hand all of this to the agent — “create a 49course,monthlyoptionat19, and a 3-payment plan” — and Crevio builds the product and its price variants for you. The model below is what those tools operate on, and what your own integrations will use directly.
A product moves through three states via its status field:
Status
Meaning
draft
Created but not visible or purchasable. The starting state.
active
Published and available for purchase. Requires at least one price variant.
archived
Retired — no longer listed or purchasable, but kept for history.
You cannot publish in one call. Creating a product with status: "active" and no price variants returns 422 validation_failed. The required sequence is:
POST /products → creates a draft.
POST /price_variants (one or more) → attach pricing via product: "prod_...".
PATCH /products/{id} with status: "active" → publish.
curl -X POST https://api.crevio.co/v1/products \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "The Complete Guitar Course", "description": "Go from zero to playing real songs.", "slug": "complete-guitar-course" }'
The response is a product with "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).
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.
Caps how many can be sold — e.g. seats in a cohort or limited spots.
waitlist
bool
all
Collect interest when sold out.
hidden
bool
all
Hide this variant from the website (still purchasable by link).
archived
bool
all
Retire this variant.
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).
Each example below assumes you’ve already created a draft product prod_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.
Get those 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.
You can ask Crevio to do this end-to-end: “generate cover art for the guitar course and set it as the product image.” The agent generates the image, persists it to the MediaLibrary, and patches the product’s images for you.