POST /api/client/orders/review-plan
A professional's review of a plan the client's agent wrote, before the client follows it: a verdict (approve, approve with changes, redo), the findings one by one with where, what is wrong and what to do instead, and what the plan must watch out for for this client.
Surface: client. Who may call: client. Key: client.orders.place.review-plan.
Example request
curl -X POST https://caremcp.com/api/client/orders/review-plan \
-H "Authorization: Bearer <session or access token>" \
-H "Content-Type: application/json" \
-d '{"professions":["personal-trainer"],"brief":{"period":{"from":"2026-10-01","to":"2026-10-07"},"health":{"parq":{"heartOrBloodPressure":false,"chestPain":false,"dizzinessOrFainting":false,"otherChronicCondition":false,"prescribedMedication":false,"boneJointSoftTissue":false,"supervisedOnly":false,"pregnant":false,"eatingDisorder":false,"declaredOn":"2026-09-20"},"diagnoses":[],"medications":[],"conditions":[]},"body":{"sex":"female","heightCm":168,"weightKg":64},"fitness":{"experience":"intermediate","activity":{"daysPerWeek":3,"minutesPerSession":45},"equipment":["dumbbells to 20 kg"],"daysAvailable":3,"minutesAvailable":60},"diet":{"pattern":"omnivore","allergies":[],"intolerances":["stone fruit"],"dislikes":[],"mealsPerDay":3,"cookingMinutes":30,"cookingSkill":"basic","caffeine":2,"alcohol":1},"goals":[{"text":"Run 10 km","measure":"distance in one run","target":"10 km","by":"2026-12-31","kind":"performance"}],"notes":"Three days a week, dumbbells at home.","plan":"# Plan\nThree runs and one dumbbell session a week, the long run up by a kilometre each week. \n\n## Week 1\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 5 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 2\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 6 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 3\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 7 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 4\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 8 km\n- Every day: oats at breakfast, protein at every meal","question":"Is week one too much for the wrist?"}}'
Example input
{
"professions": [
"personal-trainer"
],
"brief": {
"period": {
"from": "2026-10-01",
"to": "2026-10-07"
},
"health": {
"parq": {
"heartOrBloodPressure": false,
"chestPain": false,
"dizzinessOrFainting": false,
"otherChronicCondition": false,
"prescribedMedication": false,
"boneJointSoftTissue": false,
"supervisedOnly": false,
"pregnant": false,
"eatingDisorder": false,
"declaredOn": "2026-09-20"
},
"diagnoses": [],
"medications": [],
"conditions": []
},
"body": {
"sex": "female",
"heightCm": 168,
"weightKg": 64
},
"fitness": {
"experience": "intermediate",
"activity": {
"daysPerWeek": 3,
"minutesPerSession": 45
},
"equipment": [
"dumbbells to 20 kg"
],
"daysAvailable": 3,
"minutesAvailable": 60
},
"diet": {
"pattern": "omnivore",
"allergies": [],
"intolerances": [
"stone fruit"
],
"dislikes": [],
"mealsPerDay": 3,
"cookingMinutes": 30,
"cookingSkill": "basic",
"caffeine": 2,
"alcohol": 1
},
"goals": [
{
"text": "Run 10 km",
"measure": "distance in one run",
"target": "10 km",
"by": "2026-12-31",
"kind": "performance"
}
],
"notes": "Three days a week, dumbbells at home.",
"plan": "# Plan\nThree runs and one dumbbell session a week, the long run up by a kilometre each week. \n\n## Week 1\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 5 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 2\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 6 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 3\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 7 km\n- Every day: oats at breakfast, protein at every meal\n\n## Week 4\n- Tuesday: easy run 30 min\n- Thursday: dumbbells at home 40 min: goblet squat 3 x 10, row 3 x 10, push-ups 3 x 8\n- Saturday: long run 8 km\n- Every day: oats at breakfast, protein at every meal",
"question": "Is week one too much for the wrist?"
}
}
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"professions": {
"minItems": 1,
"maxItems": 5,
"type": "array",
"items": {
"$ref": "#/$defs/__schema0"
},
"description": "Keys into the professions, one or more; one professional who holds them all answers."
},
"requestedProfessionalId": {
"description": "A professional the client wants again; the order is theirs alone for a day.",
"$ref": "#/$defs/__schema1"
},
"brief": {
"type": "object",
"properties": {
"period": {
"$ref": "#/$defs/period"
},
"health": {
"$ref": "#/$defs/health-context"
},
"body": {
"$ref": "#/$defs/anthropometrics"
},
"fitness": {
"$ref": "#/$defs/fitness-status"
},
"diet": {
"$ref": "#/$defs/diet-history"
},
"labs": {
"$ref": "#/$defs/labs"
},
"goals": {
"$ref": "#/$defs/smart-goals"
},
"sessions": {
"$ref": "#/$defs/session-rpe-log"
},
"wellbeing": {
"$ref": "#/$defs/hooper-index"
},
"food": {
"$ref": "#/$defs/food-record"
},
"notes": {
"type": "string",
"maxLength": 2000
},
"plan": {
"type": "string",
"minLength": 80,
"maxLength": 30000,
"description": "The plan as it was written, in markdown, whole: its weeks or days, each session or meal as the client will follow it. Any shape; the professional reads it as it is."
},
"question": {
"description": "What the client most wants looked at, in their words.",
"$ref": "#/$defs/__schema54"
}
},
"required": [
"period",
"health",
"body",
"goals",
"plan"
]
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "Your own key for this order, such as a UUID: sending the same key again answers the first order instead of placing another."
}
},
"required": [
"professions",
"brief"
],
"$defs": {
"__schema0": {
"type": "string",
"minLength": 1
},
"__schema1": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"period": {
"type": "object",
"properties": {
"from": {
"$ref": "#/$defs/__schema2"
},
"to": {
"$ref": "#/$defs/__schema3"
}
},
"required": [
"from",
"to"
]
},
"__schema2": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"__schema3": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"health-context": {
"type": "object",
"properties": {
"parq": {
"description": "The health declaration: nine questions, the clearance, and the date the client answered.",
"$ref": "#/$defs/parq-plus"
},
"diagnoses": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema16"
},
"description": "The chronic conditions a clinician has diagnosed, named, behind a yes on question 4."
},
"medications": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema17"
},
"description": "Prescribed medications by name, behind a yes on question 5."
},
"conditions": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema18"
},
"description": "Injuries, aches and problems with bones, joints or muscles the professional plans around, one entry each, behind a yes on question 6 or on their own."
}
},
"required": [
"parq",
"diagnoses",
"medications",
"conditions"
]
},
"__schema4": {
"type": "boolean",
"description": "1. Has your doctor ever said that you have a heart condition OR high blood pressure?"
},
"__schema5": {
"type": "boolean",
"description": "2. Do you feel pain in your chest at rest, during your daily activities of living, OR when you do physical activity?"
},
"__schema6": {
"type": "boolean",
"description": "3. Do you lose balance because of dizziness OR have you lost consciousness in the last 12 months?"
},
"__schema7": {
"type": "boolean",
"description": "4. Have you ever been diagnosed with another chronic medical condition (other than heart disease or high blood pressure)?"
},
"__schema8": {
"type": "boolean",
"description": "5. Are you currently taking prescribed medications for a chronic medical condition?"
},
"__schema9": {
"type": "boolean",
"description": "6. Do you currently have (or have had within the past 12 months) a bone, joint, or soft tissue (muscle, ligament, or tendon) problem that could be made worse by becoming more physically active?"
},
"__schema10": {
"type": "boolean",
"description": "7. Has your doctor ever said that you should only do medically supervised physical activity?"
},
"__schema11": {
"type": "boolean",
"description": "8. Are you pregnant?"
},
"__schema12": {
"type": "boolean",
"description": "9. Do you have an eating disorder now, or are you being treated for one? A yes puts the service outside what we offer, cleared or not."
},
"__schema13": {
"description": "Only when any answer above is YES: has a doctor or another clinician said that you may be physically active? Leave out when every answer is no.",
"$ref": "#/$defs/__schema14"
},
"__schema14": {
"type": "boolean"
},
"__schema15": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "The date the client answered these questions themselves. The declaration is the client's own, never inferred."
},
"parq-plus": {
"type": "object",
"properties": {
"heartOrBloodPressure": {
"$ref": "#/$defs/__schema4"
},
"chestPain": {
"$ref": "#/$defs/__schema5"
},
"dizzinessOrFainting": {
"$ref": "#/$defs/__schema6"
},
"otherChronicCondition": {
"$ref": "#/$defs/__schema7"
},
"prescribedMedication": {
"$ref": "#/$defs/__schema8"
},
"boneJointSoftTissue": {
"$ref": "#/$defs/__schema9"
},
"supervisedOnly": {
"$ref": "#/$defs/__schema10"
},
"pregnant": {
"$ref": "#/$defs/__schema11"
},
"eatingDisorder": {
"$ref": "#/$defs/__schema12"
},
"clinicianCleared": {
"$ref": "#/$defs/__schema13"
},
"declaredOn": {
"$ref": "#/$defs/__schema15"
}
},
"required": [
"heartOrBloodPressure",
"chestPain",
"dizzinessOrFainting",
"otherChronicCondition",
"prescribedMedication",
"boneJointSoftTissue",
"supervisedOnly",
"pregnant",
"eatingDisorder",
"declaredOn"
]
},
"__schema16": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "As the clinician named it, in the client's words: type 2 diabetes, asthma, high blood pressure."
},
"since": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"underCare": {
"type": "boolean",
"description": "Under a clinician's care now."
}
},
"required": [
"name",
"underCare"
]
},
"__schema17": {
"type": "string",
"minLength": 2,
"maxLength": 80
},
"__schema18": {
"type": "object",
"properties": {
"area": {
"type": "string",
"minLength": 2,
"maxLength": 40,
"description": "Where: wrist, lower back, knee, or general."
},
"description": {
"type": "string",
"minLength": 3,
"maxLength": 300,
"description": "What it is like, in the client's words."
},
"since": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"severity": {
"type": "integer",
"minimum": 1,
"maximum": 5,
"description": "1 (notices it) to 5 (stops the activity)."
},
"clinicianCleared": {
"type": "boolean",
"description": "A clinician has seen it and said training around it is fine."
}
},
"required": [
"area",
"description",
"severity",
"clinicianCleared"
]
},
"anthropometrics": {
"type": "object",
"properties": {
"sex": {
"description": "For the norm tables: female, male, or other when neither table fits. Ask; leave it out when the client would rather not say, never guess it.",
"$ref": "#/$defs/__schema19"
},
"heightCm": {
"type": "number",
"minimum": 100,
"maximum": 250,
"description": "Centimetres."
},
"weightKg": {
"type": "number",
"minimum": 30,
"maximum": 300,
"description": "Kilograms."
},
"waistCm": {
"description": "Centimetres, at the navel.",
"$ref": "#/$defs/__schema20"
},
"date": {
"description": "When the weight and waist were taken.",
"$ref": "#/$defs/__schema21"
}
},
"required": [
"heightCm",
"weightKg"
]
},
"__schema19": {
"type": "string",
"enum": [
"female",
"male",
"other"
]
},
"__schema20": {
"type": "number",
"minimum": 40,
"maximum": 200
},
"__schema21": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"fitness-status": {
"type": "object",
"properties": {
"experience": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced",
"elite"
],
"description": "NSCA training status: beginner (under two months), intermediate, advanced (a year or more), elite (competing)."
},
"activity": {
"type": "object",
"properties": {
"daysPerWeek": {
"$ref": "#/$defs/__schema22"
},
"minutesPerSession": {
"$ref": "#/$defs/__schema23"
},
"since": {
"$ref": "#/$defs/__schema24"
}
},
"required": [
"daysPerWeek",
"minutesPerSession"
],
"description": "What the client does now, against ACSM's regular exerciser: 30 minutes or more of moderate activity, three or more days a week, for three months or more."
},
"strength": {
"description": "What the client knows about their strength. Only what they know; nothing is tested for this.",
"$ref": "#/$defs/__schema26"
},
"endurance": {
"type": "object",
"properties": {
"fiveKmMinutes": {
"description": "Recent 5 km time in minutes, decimals allowed: 22.5 is 22:30.",
"$ref": "#/$defs/__schema32"
},
"restingHeartRate": {
"description": "Beats per minute, at rest in the morning.",
"$ref": "#/$defs/__schema33"
},
"notes": {
"description": "In the client's words: walks 5 km without stopping, cycles to work.",
"$ref": "#/$defs/__schema34"
}
}
},
"mobility": {
"description": "In the client's words: cannot squat below parallel, tight hips.",
"$ref": "#/$defs/__schema35"
},
"equipment": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema36"
},
"description": "dumbbells to 20 kg, gym, none, bike."
},
"daysAvailable": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Days a week the plan may use."
},
"minutesAvailable": {
"type": "integer",
"minimum": 10,
"maximum": 300,
"description": "Minutes per session the plan may use."
}
},
"required": [
"experience",
"activity",
"equipment",
"daysAvailable",
"minutesAvailable"
]
},
"__schema22": {
"type": "integer",
"minimum": 0,
"maximum": 7
},
"__schema23": {
"type": "integer",
"minimum": 0,
"maximum": 600
},
"__schema24": {
"description": "ISO date this pattern has held since; omitted when it is new.",
"$ref": "#/$defs/__schema25"
},
"__schema25": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"__schema26": {
"type": "object",
"properties": {
"squatKg": {
"description": "Best single repetition, kilograms.",
"$ref": "#/$defs/__schema27"
},
"benchKg": {
"description": "Best single repetition, kilograms.",
"$ref": "#/$defs/__schema28"
},
"deadliftKg": {
"description": "Best single repetition, kilograms.",
"$ref": "#/$defs/__schema29"
},
"pushUps": {
"description": "Most in one set.",
"$ref": "#/$defs/__schema30"
},
"pullUps": {
"description": "Most in one set.",
"$ref": "#/$defs/__schema31"
}
}
},
"__schema27": {
"type": "number",
"minimum": 0,
"maximum": 500
},
"__schema28": {
"type": "number",
"minimum": 0,
"maximum": 400
},
"__schema29": {
"type": "number",
"minimum": 0,
"maximum": 500
},
"__schema30": {
"type": "integer",
"minimum": 0,
"maximum": 200
},
"__schema31": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"__schema32": {
"type": "number",
"minimum": 10,
"maximum": 120
},
"__schema33": {
"type": "integer",
"minimum": 30,
"maximum": 120
},
"__schema34": {
"type": "string",
"maxLength": 300
},
"__schema35": {
"type": "string",
"maxLength": 300
},
"__schema36": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"diet-history": {
"type": "object",
"properties": {
"pattern": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "omnivore, pescatarian, vegetarian, vegan, or the client's own word: halal, kosher, low FODMAP by choice."
},
"allergies": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema37"
},
"description": "Foods that cause a reaction. Avoided in every plan."
},
"intolerances": {
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema38"
},
"description": "Foods the client does not tolerate, in their own experience: stone fruit, lactose."
},
"dislikes": {
"description": "Foods the client does not like. An empty list when they said there are none; left out when it was not asked.",
"$ref": "#/$defs/__schema39"
},
"mealsPerDay": {
"type": "integer",
"minimum": 1,
"maximum": 8,
"description": "Meals on an ordinary day, snacks not counted."
},
"cookingMinutes": {
"type": "integer",
"minimum": 0,
"maximum": 240,
"description": "Minutes the client will cook on an ordinary day."
},
"cookingSkill": {
"type": "string",
"enum": [
"none",
"basic",
"confident"
]
},
"caffeine": {
"type": "integer",
"minimum": 0,
"maximum": 20,
"description": "Cups of coffee, or the equivalent in tea or energy drinks, per day."
},
"alcohol": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Standard drinks per week: one glass of wine, one bottle of beer, one shot each count as one."
},
"notes": {
"description": "Budget, family meals, shift work, in the client's words.",
"$ref": "#/$defs/__schema41"
}
},
"required": [
"pattern",
"allergies",
"intolerances",
"mealsPerDay",
"cookingMinutes",
"cookingSkill",
"caffeine",
"alcohol"
]
},
"__schema37": {
"type": "object",
"properties": {
"food": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"clinicianDiagnosed": {
"type": "boolean",
"description": "A clinician has diagnosed it, as against the client's own observation."
}
},
"required": [
"food",
"clinicianDiagnosed"
]
},
"__schema38": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"__schema39": {
"maxItems": 30,
"type": "array",
"items": {
"$ref": "#/$defs/__schema40"
}
},
"__schema40": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"__schema41": {
"type": "string",
"maxLength": 500
},
"labs": {
"maxItems": 40,
"type": "array",
"items": {
"$ref": "#/$defs/__schema42"
}
},
"__schema42": {
"type": "object",
"properties": {
"marker": {
"type": "string",
"enum": [
"total-cholesterol",
"ldl",
"hdl",
"triglycerides",
"hba1c",
"fasting-glucose",
"ferritin",
"vitamin-d",
"blood-pressure",
"resting-heart-rate",
"other"
]
},
"name": {
"description": "Named when the marker is other.",
"$ref": "#/$defs/__schema43"
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "As on the lab report: 4.8, or 130/85 for blood pressure."
},
"unit": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "As on the lab report: mmol/L, mg/dL, mmHg, bpm. Ask when the client gives a number without one; a value without its unit means nothing."
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"clinicianReviewed": {
"type": "boolean",
"description": "A clinician took it or has seen it."
}
},
"required": [
"marker",
"value",
"unit",
"date",
"clinicianReviewed"
]
},
"__schema43": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"smart-goals": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"$ref": "#/$defs/__schema44"
}
},
"__schema44": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 3,
"maxLength": 300,
"description": "Specific: what, in the client's words."
},
"measure": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Measurable: what is measured. 5 km time, deadlift 1RM, waist, energy on a 1 to 5 scale."
},
"target": {
"description": "The target value with its unit: under 30 min, 100 kg, 4 or better most days. Help the client name one; leave it out rather than invent it.",
"$ref": "#/$defs/__schema45"
},
"by": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Time bound: the date."
},
"kind": {
"type": "string",
"enum": [
"performance",
"wellbeing",
"condition"
],
"description": "performance (stronger, faster, further), wellbeing (energy, sleep, weight for its own sake), condition (aimed at treating a disease, such as lowering blood sugar or blood pressure; a licensed clinician's by law, refused here). A goal around an old injury or a condition, such as a stronger knee or losing weight, is performance or wellbeing."
}
},
"required": [
"text",
"measure",
"by",
"kind"
]
},
"__schema45": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"session-rpe-log": {
"maxItems": 400,
"type": "array",
"items": {
"$ref": "#/$defs/__schema46"
}
},
"__schema46": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"type": {
"type": "string",
"minLength": 2,
"maxLength": 40,
"description": "strength, run, walk, cycle, swim, mobility, or the client's own word."
},
"minutes": {
"type": "integer",
"minimum": 1,
"maximum": 600
},
"rpe": {
"type": "integer",
"minimum": 0,
"maximum": 10,
"description": "Borg CR10, 0 (rest) to 10 (maximal), for the whole session, asked about 30 minutes after it."
},
"exercises": {
"maxItems": 30,
"type": "array",
"items": {
"$ref": "#/$defs/__schema47"
}
},
"notes": {
"type": "string",
"maxLength": 500
}
},
"required": [
"date",
"type",
"minutes",
"rpe"
]
},
"__schema47": {
"type": "object",
"properties": {
"exercise": {
"type": "string",
"minLength": 2,
"maxLength": 80
},
"sets": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"reps": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"load": {
"description": "In kg, or as the client wrote it: bodyweight, 70%, RPE 8.",
"$ref": "#/$defs/__schema48"
}
},
"required": [
"exercise",
"sets",
"reps"
]
},
"__schema48": {
"type": "string",
"minLength": 1,
"maxLength": 30
},
"hooper-index": {
"maxItems": 400,
"type": "array",
"items": {
"$ref": "#/$defs/__schema49"
}
},
"__schema49": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"sleep": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Sleep quality last night, 1 (very, very good) to 7 (very, very bad)."
},
"fatigue": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "1 (very, very low) to 7 (very, very high)."
},
"stress": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "1 (very, very low) to 7 (very, very high)."
},
"soreness": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Muscle soreness, 1 (very, very low) to 7 (very, very high)."
}
},
"required": [
"date",
"sleep",
"fatigue",
"stress",
"soreness"
]
},
"food-record": {
"maxItems": 400,
"type": "array",
"items": {
"$ref": "#/$defs/__schema50"
}
},
"__schema50": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"meals": {
"maxItems": 12,
"type": "array",
"items": {
"$ref": "#/$defs/__schema51"
}
},
"notes": {
"type": "string",
"maxLength": 500
}
},
"required": [
"date",
"meals"
]
},
"__schema51": {
"type": "object",
"properties": {
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "24 hour clock: 07:30."
},
"items": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"$ref": "#/$defs/__schema52"
},
"description": "In household measures: 2 eggs, 2 slices rye bread, butter, coffee with milk."
},
"context": {
"description": "Before or after training, at a restaurant, in the client's words.",
"$ref": "#/$defs/__schema53"
}
},
"required": [
"time",
"items"
]
},
"__schema52": {
"type": "string",
"minLength": 2,
"maxLength": 200
},
"__schema53": {
"type": "string",
"maxLength": 200
},
"__schema54": {
"type": "string",
"maxLength": 1000
}
}
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"protocol": {
"type": "string"
},
"professions": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"enum": [
"queued",
"assigned",
"reviewed",
"refused",
"withdrawn"
]
},
"screening": {
"type": "object",
"properties": {
"tier": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
]
},
"flags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"tier",
"flags"
],
"additionalProperties": false
},
"verdict": {
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"kind": {
"type": "string",
"enum": [
"refused",
"clearance"
]
},
"reason": {
"type": "string"
}
},
"required": [
"ok"
],
"additionalProperties": false
},
"professionalId": {
"type": [
"string",
"null"
]
},
"review": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"markdown": {
"type": "string",
"description": "The document rendered as markdown, in English, to read to the client."
},
"document": {
"description": "The document as data: a plan, an evaluation or a plan review under its standard's schema, for a page or an app to draw.",
"$ref": "#/$defs/__schema0"
}
},
"required": [
"markdown"
],
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"priceCents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"currency": {
"type": "string",
"enum": [
"USD",
"EUR"
]
},
"createdAt": {
"type": "string"
},
"claimedAt": {
"type": [
"string",
"null"
]
},
"reviewedAt": {
"type": [
"string",
"null"
]
},
"charged": {
"type": "boolean"
}
},
"required": [
"id",
"protocol",
"professions",
"status",
"screening",
"verdict",
"professionalId",
"review",
"priceCents",
"currency",
"createdAt",
"claimedAt",
"reviewedAt",
"charged"
],
"additionalProperties": false,
"$defs": {
"__schema0": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}