Read the prescribable catalog, track orders, and run pharmacy fulfillment (receive routed orders and post carrier + tracking) over a simple REST API. E-prescription intake and signed webhooks are on the near-term roadmap.
The PEPTPlus API connects three audiences: providers/EHRs who read the catalog and track orders, pharmacies who fulfill routed orders and report shipping, and labs who manage their API listings and see licensees.
| Environment | Base URL | Status |
|---|---|---|
| Live (current) | https://dev.pept.plus/api/v1 | Live |
| Live (dedicated host) | https://api.pept.plus/v1 | Planned |
| Sandbox | https://sandbox.api.pept.plus/v1 | Planned |
HTTPS only (TLS 1.2+), JSON in and out. Versioned by URI (/v1); additive changes stay backward-compatible. List responses are wrapped as { "object":"list", "data":[…] }.
pt_… token rather than demographics.Authenticate every request with your secret API key as a bearer token. Mint, label, and revoke keys from your portal account page (Lab, Pharmacy, or Provider → API keys). Keys are environment- (live/test) and scope-specific, and the full secret is shown only once at creation.
catalog:read (reads the prescribable catalog) Liveorders:read (reads order & shipment status) Livepharmacy:fulfill (accepts orders, posts status & shipping) Livelistings:read (reads your lab listings) Livelicensees:read (reads your listings' licensees) Liveprescribe:write (submits / cancels prescriptions) PlannedA request whose key lacks the endpoint's scope returns 403 insufficient_scope. Keys are tenant-scoped; you only ever see your own org's data.
ord_…, cmp_…, lst_…, lic_…, pt_… (and rx_…, shp_… when prescriptions ship).{"patient_paid_cents":14900,"currency":"usd"}).{"value":"5","unit":"mg"}, where unit ∈ mg mcg g IU mL mg/mL mcg/mL IU/mL mEq %.{ "object":"list", "data":[…] }. Cursor pagination (?limit=&starting_after=) is planned; limit is honored today./v1/catalogPrescribable compounds/v1/catalog/{compound_id}Strengths, routes, eligibilityOnly PRESCRIBABLE substances are returned (RLS-enforced); items under FDA PCAC review are omitted until formally listed. Requires catalog:read.
/v1/orders?status=&limit=List your orders/v1/orders/{id}Order + latest shipmentOrders are scoped to your org: provider keys see orders for their prescriptions, pharmacy keys see their fulfillment queue. Requires orders:read.
Submit e-prescriptions on behalf of a licensed prescriber. Planned: deferred until the EHR / e-prescribing middleware integration lands. Documented here so integrators can plan; the endpoints below are not yet served.
/v1/prescriptionsSubmit an e-prescription/v1/prescriptions/{id}Retrieve + status/v1/prescriptions/{id}/cancelCancel before fulfillmentPRESCRIBABLE in the eligibility register, the prescriber must hold an active license in the patient's state, and the delivery method must be allowed for the substance. Transmission to pharmacies via NCPDP SCRIPT / a certified e-prescribing network is a separate, later integration.Pull orders routed to your pharmacy, acknowledge them, and report status & shipping back. Requires pharmacy:fulfill.
/v1/pharmacy/orders?status=Your fulfillment queue/v1/pharmacy/orders/{id}/acceptAcknowledge (→ in_fulfillment)/v1/pharmacy/orders/{id}/statusin_fulfillment / shipped / delivered / action_needed/v1/pharmacy/orders/{id}/shipmentPost carrier + trackingProgrammatic listing/lot/COA management (/v1/pharmacy/products, /v1/pharmacy/batches, /v1/pharmacy/coa) is planned.
Read your lab's API listings and the pharmacies licensing them. Requires listings:read / licensees:read.
/v1/listingsYour listings (with licensee counts)/v1/listings/{id}/licenseesPharmacies licensing a listingPlanned. Register endpoints and subscribe to events in the dashboard; each delivery a signed POST with PEPTPlus-Signature (HMAC-SHA256), retried with exponential backoff. Not yet implemented; poll the orders endpoints for status in the meantime.
order.created · order.matched · order.shipped · order.delivered · order.action_neededprescription.signed · payment.completed · coa.required · license.expiringErrors return a machine error code + human message: { "error":"insufficient_scope", "message":"…", "required":"orders:read" }. Rate limiting returns 429 (enforcement is planned).
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing / invalid / revoked key |
| 403 | insufficient_scope | Key lacks the required scope |
| 404 | not_found | No such resource for your org |
| 422 | validation_error | Invalid body or parameters |
| 429 | rate_limited | Slow down (planned) |
peptplus.openapi.yaml (OpenAPI 3.1) and docs/PEPTPlus-API-spec.md.