Reference
Catalogue
The products the key's clinics can order, one page at a time. Names, forms and safety flags. Never a price.
GET
/v1/productsScope: catalog:readParameters#
| Parameter | Rules |
|---|---|
limit | Optional. 1 to 100, digits only, no leading zero. Defaults to 25. Anything else is a 400, never a silent default. |
cursor | Optional. A value from a previous next_cursor. Omit the parameter entirely when you have none; an empty value is a 400. See pagination. |
There is no clinic parameter. The clinics searched are the ones the credential holds, taken from the key and from nothing else.
The response#
{
"ok": true,
"request_id": "9f1c2a7e-4d0b-4f6a-9c1e-2b8f7a6d5c3e",
"products": [
{
"productId": "0f2e6a1c-8b4d-4a7e-9c3f-5d6b7a8c9e01",
"name": "BPC-157 / TB-500 3mg per mL, 3mL vial",
"displayName": null,
"category": "Peptide",
"unit": "mg",
"route": "subcutaneous",
"purchaseGate": "request",
"notFdaApproved": true,
"isControlledSubstance": false,
"nameAliases": [],
"priced": true,
"orderableInClinicIds": ["5d93011a-82a4-4c8b-abd5-f1001d41f15f"]
}
],
"truncated": true,
"next_cursor": "c1.WyJCUEMtMTU3IC8gVEItNTAwIDNtZyBwZXIgbUwsIDNtTHZpYWwiLCIwZjJlNmExYy04YjRk..."
}Fields#
| Field | Type | Meaning |
|---|---|---|
productId | uuid | Stable identifier. Reconcile on this, not on the name. |
name | string | The full name. Strength and pack size live inside it; there is no separate strength column. |
displayName | string or null | An override for display, when the clinic has one. |
category | string or null | Grouping such as Peptide or NAD+. |
unit | string or null | Unit of the strength in the name. |
route | string or null | The form: subcutaneous, nasal, oral, and so on. |
purchaseGate | string or null | request means a clinician reviews a request rather than a self-serve purchase. |
notFdaApproved | boolean | Carries a "not FDA approved, compounded" disclosure. |
isControlledSubstance | boolean | Whether the product is a controlled substance. |
nameAliases | string[] | Other names the product is known by, useful for matching free text. |
priced | boolean | Whether an agreed price is configured. Never the amount. |
orderableInClinicIds | string[] | The subset of your clinics where this product is active. |
What is deliberately absent#
- Prices, agreed or otherwise.
pricedis a boolean; the amount belongs to a quote. - Supplier cost, pharmacy, margin: never exposed, to anyone.
- Clinic names. Clinics appear as ids, so the payload says which clinic, not what it is called.
Cache it
The catalogue changes rarely. Cache a full walk for minutes rather than polling it, and you will stay far below the rate limits. A full catalogue is around two pages atlimit=100.The machine-readable version of this page is openapi.yaml.