https://api.crevio.co/v1. Read this page before writing more than a quickstart call — most 400/404/422 errors come from breaking one of the rules below.
Parameters are unwrapped (top-level)
Send request fields at the top level of the JSON body. There is no resource wrapper key. A nested wrapper like{"product": {...}} is silently dropped, leaving the real fields missing — you’ll get a parameter_missing error.
Associations are a bare name + a prefixed id
To link a resource, use the bare resource name as the key and pass the prefixed id string as the value. Do not append_id.
Creation order matters
Some resources have prerequisites. The big one: a product can’t be published without at least one price variant. Creating a product withstatus: "active" in a single call fails with 422.
Money is in cents; currency is lowercase
All monetary amounts are integers in the smallest currency unit (cents for USD). Currency codes are lowercase ISO 4217.List responses vs single objects
List endpoints return a consistent envelope. The items are indata.
Pagination
Cursor-based. Passlimit (1–100, default 20) and starting_after (the id of the last item you received). When has_more is false, you’re on the last page.
Slug lookup
Products, blog posts, experiences, and legal pages accept either an id or a slug in the{id_or_slug} path position.
Expanding related resources
By default, related resources appear as bare id strings. Passexpand to inline them. Multiple fields are comma-separated.
Delete responses
Delete endpoints return a confirmation object, not an empty body:The object discriminator
Every resource carries anobject field identifying its type. Use it to branch on heterogeneous responses.
ID prefixes
Every id is a prefixed string encoding its type. Use these — never raw database ids.| Resource | Prefix | object value |
|---|---|---|
| Account | acct_ | account |
| Product | prod_ | product |
| Price variant | price_ | price_variant |
| Experience | exp_ | experience |
| Order | ord_ | order |
| Order item | ordi_ | order_item |
| Charge | ch_ | charge |
| Customer | cus_ | customer |
| Checkout | co_ | checkout |
| Checkout link | cl_ | checkout_link |
| Invoice | inv_ | invoice |
| Subscription | sub_ | subscription |
| Discount | disc_ | discount |
| Blog post | post_ | blog_post |
| Review | rev_ | review |
| File | file_ | file |
| Form | form_ | form |
| Tag | tag_ | tag |
| Task | task_ | task |
| Task run | trun_ | task_run |
| Site | site_ | site |
| Webhook endpoint | wh_ | webhook_endpoint |
| Webhook event | whev_ | webhook_event |
Courses and other content live under
/experiences, not /products. A product bundles experiences through its price variants. The Experiences API is read-only (list + retrieve).Next steps
Errors
Every status code, what it means, and how to debug it.
Quickstart
Apply these rules in a real product creation.
API reference
Per-endpoint parameters and schemas.
TypeScript SDK
The SDK enforces most of these conventions for you.

