List my recent foods
curl --request GET \
--url https://sandbox.rx.tera.health/v1/patient/recent-foods \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.rx.tera.health/v1/patient/recent-foods', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox.rx.tera.health/v1/patient/recent-foods"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "0190f5e2-3b4c-7d5e-8f60-7a8b9c0d1e2f",
"name": "Greek yogurt, plain, nonfat",
"quantity": 170,
"unit": "g",
"protein_g": 17,
"calories_kcal": 100,
"carbs_g": 6,
"fat_g": 0.7,
"fiber_g": 0,
"times_logged": 9,
"last_logged_at": "2026-10-27T07:45:00Z"
},
{
"id": "0190f5e2-1a2b-7c3d-9e4f-5a6b7c8d9e0f",
"name": "Chicken and quinoa bowl",
"quantity": null,
"unit": null,
"protein_g": 38,
"calories_kcal": 450,
"carbs_g": null,
"fat_g": null,
"fiber_g": null,
"times_logged": 3,
"last_logged_at": "2026-10-26T12:30:00Z"
}
],
"next_cursor": "eyJpZCI6IjAxOTBmNWUyIn0"
}Logging
List my recent foods
Foods the patient logged before, most recently logged first, 10 at a time; follow next_cursor for the next 10.
Picking one pre-fills a meal ingredient with the amount and macros from the last time. Correcting or deleting a
meal updates the list.
Plans: AI + health and fitness coaches (ai_health_fitness), AI only (ai_only).
GET
/
v1
/
patient
/
recent-foods
List my recent foods
curl --request GET \
--url https://sandbox.rx.tera.health/v1/patient/recent-foods \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.rx.tera.health/v1/patient/recent-foods', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox.rx.tera.health/v1/patient/recent-foods"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "0190f5e2-3b4c-7d5e-8f60-7a8b9c0d1e2f",
"name": "Greek yogurt, plain, nonfat",
"quantity": 170,
"unit": "g",
"protein_g": 17,
"calories_kcal": 100,
"carbs_g": 6,
"fat_g": 0.7,
"fiber_g": 0,
"times_logged": 9,
"last_logged_at": "2026-10-27T07:45:00Z"
},
{
"id": "0190f5e2-1a2b-7c3d-9e4f-5a6b7c8d9e0f",
"name": "Chicken and quinoa bowl",
"quantity": null,
"unit": null,
"protein_g": 38,
"calories_kcal": 450,
"carbs_g": null,
"fat_g": null,
"fiber_g": null,
"times_logged": 3,
"last_logged_at": "2026-10-26T12:30:00Z"
}
],
"next_cursor": "eyJpZCI6IjAxOTBmNWUyIn0"
}Authorizations
A 15-minute token bound to one patient and one enrollment, issued by POST /v1/oauth/token with the
token-exchange grant. Treat it as opaque. When it expires, exchange a fresh assertion; there is no refresh token.
Query Parameters
Page size.
Required range:
1 <= x <= 50The next_cursor from the previous page. Omit it for the first page.
Maximum string length:
512
