Skip to main content
POST
Change plan

Authorizations

Authorization
string
header
default:Bearer sandbox_any_token_works
required

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.

Headers

Idempotency-Key
string

Optional on this action. When sent, it works as on creating requests (24 hours, same body).

Required string length: 8 - 255

Path Parameters

enrollment_id
string<uuid>
required

Body

application/json
plan_code
enum<string>
required
  • 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"

reason
string

Kept on the enrollment history. Do not include health details.

Maximum string length: 500
Example:

"Patient upgraded at renewal"

Response

The enrollment on its new plan.

The brand server's view of an enrollment. Status and ids only, never clinical content.

id
string<uuid>
required
Example:

"0190f5c2-3a1b-7c4d-8e9f-a0b1c2d3e4f5"

external_patient_id
string
required

Your own identifier, printable ASCII without spaces.

Required string length: 1 - 128
Pattern: ^[\x21-\x7E]+$
Example:

"brand-pt-48213"

plan_code
enum<string>
required
  • 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"

status
enum<string>
required
Available options:
pending_screening,
ineligible,
active,
paused,
cancelled,
completed
Example:

"active"

stage
enum<string>
required
Available options:
created,
awaiting_assignment,
assigned,
onboarding_pending,
onboarding_completed,
protocols_active
Example:

"onboarding_pending"

risk_level
enum<string>
required

Raised by clinical flags. Only a prescriber's resolve lowers it.

Available options:
normal,
elevated,
high
Example:

"normal"

data_sharing
boolean
required
Example:

true

created_at
string<date-time>
required

ISO 8601 in UTC.

Example:

"2026-10-26T14:05:00Z"

care_team
object[]
required

Empty on ai_only.

forms
object[]
required
protocols
object[]
required

Active protocols.

external_order_id
string | null
Example:

"ord-2026-10-000123"

purchased_at
string<date-time> | null
Example:

"2026-10-21T14:58:00Z"

assigned_at
string<date-time> | null

When the last care role was filled.

Example:

"2026-10-21T15:12:00Z"

onboarding_completed_at
string<date-time> | null
Example:

null

first_protocol_published_at
string<date-time> | null
Example:

null

last_activity_at
string<date-time> | null

Last patient activity, updated about hourly.

Example:

"2026-10-26T13:40:00Z"

ended_at
string<date-time> | null
Example:

null