List enrollments
curl --request GET \
--url https://sandbox.rx.tera.health/v1/enrollments \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.rx.tera.health/v1/enrollments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox.rx.tera.health/v1/enrollments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "0190f5c2-3a1b-7c4d-8e9f-a0b1c2d3e4f5",
"external_patient_id": "brand-pt-48213",
"external_order_id": "ord-2026-10-000123",
"plan_code": "ai_health_fitness",
"status": "active",
"stage": "protocols_active",
"risk_level": "normal",
"data_sharing": true,
"purchased_at": "2026-10-21T14:58:00Z",
"created_at": "2026-10-21T14:58:02Z",
"assigned_at": "2026-10-21T15:12:00Z",
"onboarding_completed_at": "2026-10-22T09:30:00Z",
"first_protocol_published_at": "2026-10-23T16:45:00Z",
"last_activity_at": "2026-10-26T13:40:00Z",
"ended_at": null,
"care_team": [
{
"care_role": "health_coach",
"assigned": true,
"assigned_at": "2026-10-21T15:10:00Z"
},
{
"care_role": "fitness_coach",
"assigned": true,
"assigned_at": "2026-10-21T15:12:00Z"
}
],
"forms": [
{
"form_assignment_id": "0190f5c3-7e21-7a40-9b11-5d6e7f8091a2",
"form_code": "glp1_onboarding",
"purpose": "onboarding",
"status": "completed",
"blocks_onboarding": true,
"due_at": "2026-10-24T15:00:00Z",
"completed_at": "2026-10-22T09:30:00Z"
}
],
"protocols": [
{
"protocol_id": "0190f5c6-8b9c-7d01-8e23-4f5a6b7c8d90",
"type": "nutrition",
"version": 1,
"published_at": "2026-10-23T16:45:00Z"
}
]
}
],
"next_cursor": null
}
Enrollments
List enrollments
Your brand’s enrollments, newest first. Filter by external_patient_id to find one patient’s enrollments.
Scope: enrollments:read.
GET
/
v1
/
enrollments
List enrollments
curl --request GET \
--url https://sandbox.rx.tera.health/v1/enrollments \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.rx.tera.health/v1/enrollments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox.rx.tera.health/v1/enrollments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "0190f5c2-3a1b-7c4d-8e9f-a0b1c2d3e4f5",
"external_patient_id": "brand-pt-48213",
"external_order_id": "ord-2026-10-000123",
"plan_code": "ai_health_fitness",
"status": "active",
"stage": "protocols_active",
"risk_level": "normal",
"data_sharing": true,
"purchased_at": "2026-10-21T14:58:00Z",
"created_at": "2026-10-21T14:58:02Z",
"assigned_at": "2026-10-21T15:12:00Z",
"onboarding_completed_at": "2026-10-22T09:30:00Z",
"first_protocol_published_at": "2026-10-23T16:45:00Z",
"last_activity_at": "2026-10-26T13:40:00Z",
"ended_at": null,
"care_team": [
{
"care_role": "health_coach",
"assigned": true,
"assigned_at": "2026-10-21T15:10:00Z"
},
{
"care_role": "fitness_coach",
"assigned": true,
"assigned_at": "2026-10-21T15:12:00Z"
}
],
"forms": [
{
"form_assignment_id": "0190f5c3-7e21-7a40-9b11-5d6e7f8091a2",
"form_code": "glp1_onboarding",
"purpose": "onboarding",
"status": "completed",
"blocks_onboarding": true,
"due_at": "2026-10-24T15:00:00Z",
"completed_at": "2026-10-22T09:30:00Z"
}
],
"protocols": [
{
"protocol_id": "0190f5c6-8b9c-7d01-8e23-4f5a6b7c8d90",
"type": "nutrition",
"version": 1,
"published_at": "2026-10-23T16:45:00Z"
}
]
}
],
"next_cursor": null
}
Authorizations
A brand's server, one OAuth client per brand and environment. Get a token with the
client_credentials grant and send it as Authorization: Bearer <token>. Tokens last 1 hour.
A brand server reads status and ids only; it never reads clinical content. A platform partner holds one
client for all its brands and gets one token per brand, naming it with tenant_id.
Query Parameters
Your own identifier, printable ASCII without spaces.
Required string length:
1 - 128Pattern:
^[\x21-\x7E]+$Example:
"brand-pt-48213"
Available options:
pending_screening, ineligible, active, paused, cancelled, completed Example:
"active"
Raised by clinical flags. Only a prescriber's resolve lowers it.
Available options:
normal, elevated, high Example:
"normal"
ai_only: the AI Coach only. Escalations go to the brand's prescriber as clinical flags.ai_health_fitness: the AI Coach plus a health coach (nutrition) and a fitness coach.
Available options:
ai_only, ai_health_fitness Example:
"ai_health_fitness"
Page size.
Required range:
1 <= x <= 100The next_cursor from the previous page. Omit it for the first page.
Maximum string length:
512
