Products
The clinic's storefront catalogue, its prices and purchase options, and the four products test mode sells.
A product is one thing a clinic's storefront sells: a medication prescribed through a case, or a product that ships without one. The catalogue is read-only here; the clinic's products manager owns every row.
Both operations need products:read.
curl "https://api.cuvo.co/v1/products?status=active&type=medication" \
-H "Authorization: Bearer cuvo_sk_live_…"
{
"data": [
{
"id": "prod_2a7f",
"name": "Tadalafil",
"type": "medication",
"rx": true,
"status": "active",
"category": "sexual_health",
"price_cents": 2900,
"price_unit": "/mo",
"price_qualifier": null,
"purchase_options": [
{ "kind": "monthly", "price_cents": 2900, "recurring_price_cents": 3900 },
{ "kind": "one_time", "price_cents": 4900, "recurring_price_cents": null }
],
"variations": [],
"medication": "med_tadalafil",
"is_membership": false,
"follow_up_months": 12,
"blocked_states": [],
"orderable": true,
"created_at": "2026-10-01T12:00:00Z",
"updated_at": "2026-11-01T08:30:00Z"
}
],
"has_more": false
}
status,typeandupdated_afterfilter the list;limitandstarting_afterpage it, newest first.GET /v1/products/{id}reads one.
What a product says
price_cents with price_unit and price_qualifier is the headline price as the storefront
prints it. What a customer is actually charged is a purchase option: kind is one_time,
monthly, quarterly, yearly or a custom cadence written every_<n>_<unit>, price_cents is
the first charge, and recurring_price_cents is what each later charge costs when the option is an
introductory offer. A product with variations (doses, strengths) prices each variation with its
own options.
medication is the catalog id GET /v1/medications publishes, for a product that
dispenses one. is_membership marks a plan whose purchase starts a recurring membership.
blocked_states are the states the storefront will not sell into, and orderable is true when a
patient can buy the product right now: active, priced and complete enough to check out.
A product never carries what it costs the clinic, its checkout configuration, the questionnaire behind it, or its storefront image and copy.
A purchase names its product as product.id, with the variation_id and
purchase_option that were bought.
In test mode
Every sandbox sells the same four products, so you can pin their ids in your tests:
| id | What it is |
|---|---|
prod_test_semaglutide | A medication with two dose variations, starter and maintenance |
prod_test_tadalafil | A medication with an introductory monthly price |
prod_test_sharps_kit | A product that ships without a prescription |
prod_test_membership | A membership plan, monthly or yearly |
Buy them with POST /v1/test/purchases. See Purchases and customers. The sandbox
does not model memberships yet, so buying the plan records a treatment purchase and opens no
membership.