Catalog API (products & protocols)
List and read your formulary — products (drug, strength, form) and protocols (reusable product bundles) you place orders against.
Your catalog is the formulary you order against — a set of products (a specific drug at a specific strength and form) and protocols (named bundles of products with default dosing). Order line items reference products by id, so you'll list the catalog to build order forms and resolve what a patient is being sent.
Products#
A product is one dispensable item: a drug at a specific strength and form, tied to a pharmacy connection. Every product carries the identifiers and clinical metadata you need to render it and place an order.
| Field | Type | What it is |
|---|---|---|
id |
string | Product id — what order line items reference. |
displayName |
string | Human-facing name for your storefront. |
drugName |
string | The drug. |
drugStrength |
string | Strength (e.g. 2.5mg). |
drugForm |
string | Dosage form (e.g. vial, capsule). |
route |
string? | Route of administration, when set. |
category |
string? | Your grouping (e.g. weight-management). |
defaultSig |
string? | Default directions ("sig") for this product. |
quantityUnits |
string | Unit quantity is counted in (defaults to each). |
pharmacyConnectionId |
string | Which pharmacy fills it. |
flags |
object | { refrigerated, controlled } handling flags. |
intakeQuestionnaireKey |
string? | Compliance intake form this product requires. |
followupQuestionnaireKey |
string? | Follow-up questionnaire, when applicable. |
List products#
Returns every product in your formulary, ordered by displayName.
curl https://api.neolife.health/v1/products \
-H "Authorization: Bearer $NEOLIFE_API_KEY"
[
{
"id": "prod_8fk2",
"displayName": "Semaglutide 2.5mg Vial",
"drugName": "Semaglutide",
"drugStrength": "2.5mg",
"drugForm": "vial",
"route": "subcutaneous",
"category": "weight-management",
"defaultSig": "Inject 0.25mg subcutaneously once weekly",
"quantityUnits": "each",
"pharmacyConnectionId": "phc_31aa",
"flags": { "refrigerated": true, "controlled": false },
"intakeQuestionnaireKey": "glp1-v1"
}
]
Protocols#
A protocol is a reusable, named bundle — a set of products with default dosing so a common regimen can be ordered in one shot instead of assembling line items by hand. Listing protocols hydrates the referenced products inline.
| Field | Type | What it is |
|---|---|---|
id |
string | Protocol id. |
name |
string | Protocol name. |
productRefs |
string[] | Product ids in the bundle. |
products |
Product[] | The referenced products, hydrated inline. |
defaultSig |
string | Default directions for the protocol. |
defaultQuantity |
number | Default quantity. |
defaultRefills |
number | Default number of refills. |
daysSupply |
number | Days-supply the protocol covers. |
List protocols#
Returns your protocols with each one's products resolved from productRefs.
curl https://api.neolife.health/v1/protocols \
-H "Authorization: Bearer $NEOLIFE_API_KEY"
[
{
"id": "prot_5m1q",
"name": "GLP-1 Starter (Month 1)",
"productRefs": ["prod_8fk2"],
"defaultSig": "Inject 0.25mg subcutaneously once weekly",
"defaultQuantity": 1,
"defaultRefills": 0,
"daysSupply": 30,
"products": [
{ "id": "prod_8fk2", "displayName": "Semaglutide 2.5mg Vial", "drugStrength": "2.5mg" }
]
}
]
Notes#
- The catalog is PHI-free — products and protocols describe your formulary, not patients — so these reads sit outside the PHI boundary.
- A product's
flags.controlledandintakeQuestionnaireKeydrive downstream behavior: controlled items and questionnaire-gated products still require a provider-approved intake before an order can be submitted. - See the API reference for the base URL, versioning, and error model shared by every resource.