Create a product, price it, publish it, and generate a shareable checkout link — the full sequence, in the order that works.
Selling a paid course is four chained calls, and the order matters. You create the product as a draft, attach at least one price variant, flip it to active, then mint a checkout link. Skip a step or reorder it and you’ll hit a 422.
You cannot create a product with status: "active" in one shot — publishing requires at least one price variant first. Always: create draft → add price variant → PATCH to active.
Course content (lessons, modules, drip) lives under Experiences, managed in-app. The Experiences API is read-only (GET /experiences). A product bundles experiences through its price variants. This recipe covers the sellable side — product, price, and checkout.
Because the checkout link was created with allow_discount_codes: true, buyers can enter LAUNCH20 at checkout.
Programmatic checkout instead of a shareable link? Call POST /checkouts with line_items: [{ price_variant: "price_xyz789", quantity: 1 }] and optionally a discount_code.