Skip to content

Products

A product groups one or more plans together. The product is what you sell; the plan is how you price it.

Object

{
"id": "prod_…",
"object": "product",
"code": "pro",
"name": "Pro",
"description": "For growing teams.",
"tax_code": "txcd_10000000",
"metadata": { "category": "self-serve" },
"status": "active",
"created_at": "2026-05-06T12:34:56Z",
"updated_at": "2026-05-06T12:34:56Z"
}

Endpoints

MethodPathWhat
POST/v1/productsCreate.
GET/v1/products/{code-or-id}Retrieve by code or by ID.
PATCH/v1/products/{code-or-id}Update mutable fields.
DELETE/v1/products/{code-or-id}Delete (only if no plan references it).
GET/v1/productsList.
GET/v1/products/{code-or-id}/plansList plans for this product.

The code is your contract

code is what your application references in API calls — same code in sandbox and live. It’s the public name; pick a slug-style identifier and don’t change it. The system ID (prod_…) is also stable, but codes are easier to reason about.

Status

statusMeaning
active (default)Visible; new plans can reference it.
archivedHidden from default lists; existing references still work.
deletedSoft-deleted.

Archive instead of delete when sunsetting — historic invoices still reference the product.

Tax code

tax_code is passed to your tax engine to determine the appropriate tax rules. Defaults to your tenant’s default tax code. See Tax.

Webhook events

product.created, product.updated, product.archived, product.deleted.