What people ate (or are planned to eat) between two dates
meals.eaten.list
GET/api/v1/households/{household_id}/queries/meals.eaten.list
- Query
- Rigel runs it
Meals from from to to, oldest first, up to 84 days apart. With person_id, only meals that person is in (each meal still lists everyone in it). Use it to see what the family has eaten lately, for variety and for the usual week.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
fromquerystring (date)required | The first date, YYYY-MM-DD. |
toquerystring (date)required | The last date, YYYY-MM-DD, no more than 84 days after from. |
person_idquerystringoptional | Only meals this person is in. |
Response#
200 The answer.
| Field | Description |
|---|---|
mealsarray of objectsrequired | The meals in range. |
meals[].idstringrequired | A meal ID, such as mel_01JC0000000000000000000000. |
meals[].datestring (date)required | The day of the meal, YYYY-MM-DD. |
meals[].slotone of: breakfast, lunch, dinner, snackrequired | Which meal of the day: breakfast, lunch, dinner or snack. |
meals[].labelstringrequired | The meal in a few words, such as "Tue dinner". |
meals[].notestring or nullrequired | The kitchen note on the meal, or null. |
meals[].peoplearray of objectsrequired | Who the meal is for, in family order. |
meals[].people[].idstringrequired | A person ID, such as per_01JC0000000000000000000000. |
meals[].people[].namestringrequired | What the family calls them. |
meals[].dishesarray of objectsrequired | The dishes, in the meal's order. |
meals[].dishes[].idstringrequired | A dish ID, such as dsh_01JC0000000000000000000000. |
meals[].dishes[].namestringrequired | The dish's name. |
meals[].dishes[].is_awaybooleanrequired | Eaten away from home, so it needs no groceries. |
meals[].dishes[].icon_file_idstring or nullrequired | The dish's icon, or null until one is generated. |
meals[].dishes[].recipe_idstring or nullrequired | The recipe the dish is made from, or null. |
meals[].dishes[].recipe_titlestring or nullrequired | That recipe's title, or null. |
meals[].icon_file_idstring or nullrequired | The icon to show for the meal, or null for a neutral plate. |
meals[].is_awaybooleanrequired | Every dish is eaten away from home. |
Errors#
Every error has the same envelope: error.code, error.message, error.details, error.recovery and error.request_id.
| Status | Code | When |
|---|---|---|
400 | validation_failed | A field is missing, misspelled or out of range. details.fields lists each problem. |
401 | unauthenticated | The request has no valid session. |
404 | not_found | The household doesn't exist, or you aren't a member of it. |
Examples#
These are real. Each was recorded from a sample household, the Okafors, running through the whole API when this site was built.
What the family ate last week
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSH2VPFE963VDN8BZTQ6
{
"meals": [
{
"id": "mel_01M6V9CSFPK69RRZZ3DHRR53T4",
"date": "2026-11-06",
"slot": "dinner",
"label": "Fri dinner",
"note": "Breakfast for dinner.",
"people": [
{
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
{
"id": "per_01M6V9CS744BQQH188FS6CXY9W",
"name": "Ben Okafor"
},
{
"id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"name": "Nia"
},
{
"id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"name": "Theo"
}
],
"dishes": [
{
"id": "dsh_01M6V9CSFPC1X45XZ3A8P6N25F",
"name": "Saturday pancakes",
"is_away": false,
"icon_file_id": null,
"recipe_id": "rcp_01M6V9CSDDZVYFRVFNA4X5BSMZ",
"recipe_title": "Saturday pancakes"
}
],
"icon_file_id": null,
"is_away": false
}
]
}What Nia ate last week
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06&person_id=per_01M6V9CS79TMYHDAM7FTA9ZK3Z' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06&person_id=per_01M6V9CS79TMYHDAM7FTA9ZK3Z", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/meals.eaten.list?from=2026-10-31&to=2026-11-06&person_id=per_01M6V9CS79TMYHDAM7FTA9ZK3Z HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSH49KBM6XW8QJ8AS2PJ
{
"meals": [
{
"id": "mel_01M6V9CSFPK69RRZZ3DHRR53T4",
"date": "2026-11-06",
"slot": "dinner",
"label": "Fri dinner",
"note": "Breakfast for dinner.",
"people": [
{
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
{
"id": "per_01M6V9CS744BQQH188FS6CXY9W",
"name": "Ben Okafor"
},
{
"id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"name": "Nia"
},
{
"id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"name": "Theo"
}
],
"dishes": [
{
"id": "dsh_01M6V9CSFPC1X45XZ3A8P6N25F",
"name": "Saturday pancakes",
"is_away": false,
"icon_file_id": null,
"recipe_id": "rcp_01M6V9CSDDZVYFRVFNA4X5BSMZ",
"recipe_title": "Saturday pancakes"
}
],
"icon_file_id": null,
"is_away": false
}
]
}For Rigel#
Rigel's tool for this query is meals_eaten_list. Rigel runs this on its own, then says what it did. The agent guide has the rest.