Everything the household knows about its people
family.knowledge.get
GET/api/v1/households/{household_id}/queries/family.knowledge.get
- Query
- Rigel runs it
Each person with their age and notes, newest first, plus the household's own notes under everyone. With app, notes for other apps are left out; notes for no app are always included.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
appqueryone of: meals, recipes, shopping, inventory, calendar, email, tasks, documents, chat, maintenanceoptional | Only include app-specific notes for this app. |
Response#
200 The answer.
| Field | Description |
|---|---|
everyonearray of objectsrequired | Notes about the whole household. |
everyone[].idstringrequired | A family note ID, such as fnt_01JC0000000000000000000000. |
everyone[].textstringrequired | The note, as written. |
everyone[].appone of: meals, recipes, shopping, inventory, calendar, email, tasks, documents, chat, maintenance, null or nullrequired | The app it only matters to, or null for everywhere. |
everyone[].noted_atstring (date-time)required | When this information was given. |
everyone[].noted_agostringrequired | How long ago, in words, such as "3 weeks ago". |
peoplearray of objectsrequired | |
people[].idstringrequired | A person ID, such as per_01JC0000000000000000000000. |
people[].namestringrequired | What the family calls them. |
people[].agestring or nullrequired | Their age in words, such as "3 years old", or null without a birth date. |
people[].signs_inbooleanrequired | Whether they have an account and sign in. |
people[].notesarray of objectsrequired | |
people[].notes[].idstringrequired | A family note ID, such as fnt_01JC0000000000000000000000. |
people[].notes[].textstringrequired | The note, as written. |
people[].notes[].appone of: meals, recipes, shopping, inventory, calendar, email, tasks, documents, chat, maintenance, null or nullrequired | The app it only matters to, or null for everywhere. |
people[].notes[].noted_atstring (date-time)required | When this information was given. |
people[].notes[].noted_agostringrequired | How long ago, in words, such as "3 weeks ago". |
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.
Everything Rigel knows about the family
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CS7SQ4S1P84SQZWMS553
{
"everyone": [
{
"id": "fnt_01M6V9CS7MX4PM9SC6Z6NVA2EA",
"text": "Saturday mornings are for pancakes.",
"app": null,
"noted_at": "2026-11-07T15:17:51.989Z",
"noted_ago": "just now"
},
{
"id": "fnt_01M6V9CS7KC15H3QT502N0J25K",
"text": "Dinner is at 6:00 pm on weeknights.",
"app": null,
"noted_at": "2026-11-07T15:17:51.988Z",
"noted_ago": "just now"
}
],
"people": [
{
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor",
"age": null,
"signs_in": true,
"notes": []
},
{
"id": "per_01M6V9CS744BQQH188FS6CXY9W",
"name": "Ben Okafor",
"age": null,
"signs_in": false,
"notes": [
{
"id": "fnt_01M6V9CS7HSE0X6FSYVAC690KF",
"text": "Ben doesn't eat shellfish.",
"app": "meals",
"noted_at": "2026-11-07T15:17:51.986Z",
"noted_ago": "just now"
}
]
},
{
"id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"name": "Nia",
"age": "8 years old",
"signs_in": false,
"notes": [
{
"id": "fnt_01M6V9CS7GXFHGYGZ4CFZG4J38",
"text": "Nia wants to learn to bake. She likes measuring the flour.",
"app": "recipes",
"noted_at": "2026-11-07T15:17:51.985Z",
"noted_ago": "just now"
}
]
},
{
"id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"name": "Theo",
"age": "5 years old",
"signs_in": false,
"notes": [
{
"id": "fnt_01M6V9CS7E9NAJKGNWG7KBC8P4",
"text": "Theo isn't into spicy food lately. Mild chili is fine.",
"app": "meals",
"noted_at": "2026-11-07T15:17:51.990Z",
"noted_ago": "just now"
}
]
}
]
}What Rigel knows about meals
The same answer, only the notes tied to one app, plus the ones for every app.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=meals' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=meals", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=meals HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CS7VKZ8NVGR4EEV9F4CR
{
"everyone": [
{
"id": "fnt_01M6V9CS7MX4PM9SC6Z6NVA2EA",
"text": "Saturday mornings are for pancakes.",
"app": null,
"noted_at": "2026-11-07T15:17:51.989Z",
"noted_ago": "just now"
},
{
"id": "fnt_01M6V9CS7KC15H3QT502N0J25K",
"text": "Dinner is at 6:00 pm on weeknights.",
"app": null,
"noted_at": "2026-11-07T15:17:51.988Z",
"noted_ago": "just now"
}
],
"people": [
{
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor",
"age": null,
"signs_in": true,
"notes": []
},
{
"id": "per_01M6V9CS744BQQH188FS6CXY9W",
"name": "Ben Okafor",
"age": null,
"signs_in": false,
"notes": [
{
"id": "fnt_01M6V9CS7HSE0X6FSYVAC690KF",
"text": "Ben doesn't eat shellfish.",
"app": "meals",
"noted_at": "2026-11-07T15:17:51.986Z",
"noted_ago": "just now"
}
]
},
{
"id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"name": "Nia",
"age": "8 years old",
"signs_in": false,
"notes": []
},
{
"id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"name": "Theo",
"age": "5 years old",
"signs_in": false,
"notes": [
{
"id": "fnt_01M6V9CS7E9NAJKGNWG7KBC8P4",
"text": "Theo isn't into spicy food lately. Mild chili is fine.",
"app": "meals",
"noted_at": "2026-11-07T15:17:51.990Z",
"noted_ago": "just now"
}
]
}
]
}A query with a bad parameter
Queries validate their parameters the same way, and name the allowed values.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=dancing' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=dancing", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/family.knowledge.get?app=dancing HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Request-Id: req_01M6V9CTCY7SVKT7GN6CV8G50C
{
"error": {
"code": "validation_failed",
"message": "The request has invalid fields. No changes were applied.",
"details": {
"fields": [
{
"field": "app",
"problem": "Invalid option: expected one of \"meals\"|\"recipes\"|\"shopping\"|\"inventory\"|\"calendar\"|\"email\"|\"tasks\"|\"documents\"|\"chat\"|\"maintenance\""
}
]
},
"recovery": "Correct each field listed in details.fields, then send the request again.",
"request_id": "req_01M6V9CTCY7SVKT7GN6CV8G50C"
}
}For Rigel#
Rigel's tool for this query is family_knowledge_get. Rigel runs this on its own, then says what it did. The agent guide has the rest.