My notifications
notifications.notification.list
GET/api/v1/households/{household_id}/queries/notifications.notification.list
- Query
- Rigel runs it
My notifications that are due, newest first, with how many of all of mine are unread. Scheduled ones appear when their time comes. Fails with no_person for someone who doesn't sign in.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
unread_onlyqueryboolean or stringoptional | Only unread notifications. Defaults to false. |
appqueryone of: meals, recipes, shopping, inventory, calendar, email, tasks, documents, chat, maintenanceoptional | Only notifications from this app. |
limitqueryintegeroptional | How many to return, 1–200. Defaults to 50. |
cursorquerystringoptional | The next_cursor of the previous page, with the same filters. |
Response#
200 The answer.
| Field | Description |
|---|---|
itemsarray of objectsrequired | |
items[].idstringrequired | A notification ID, such as ntf_01JC0000000000000000000000. |
items[].appone of: meals, recipes, shopping, inventory, calendar, email, tasks, documents, chat, maintenance, null or nullrequired | The app that sent it, or null for the household or Rigel in general. |
items[].kindstringrequired | What kind of notification it is, such as mention or reminder. |
items[].titlestringrequired | What it says. |
items[].bodystring or nullrequired | More detail, if any. |
items[].record_idstring or nullrequired | The record it is about. |
items[].topic_idstring or nullrequired | The larger thing it belongs to. |
items[].addressstring or nullrequired | The web route that opens the record, or null when there isn't one. |
items[].delivered_atstring (date-time)required | When it was delivered. |
items[].read_atstring (date-time) or nullrequired | When it was read, or null if it is unread. |
next_cursorstring or nullrequired | Send as cursor for the next page; null on the last page. |
unread_countintegerrequired | How many due notifications I haven't read, whatever the filters. |
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.
See your notifications
Newest first, with how many are unread.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSSS9W7GMYMJ5ND7Q9X0
{
"items": [
{
"id": "ntf_01M6V9CSSMTA415FM404N9HKYH",
"app": "meals",
"kind": "message",
"title": "Dinner is at 6:00 pm",
"body": null,
"record_id": null,
"topic_id": "mel_01M6V9CSFSFH4859KG4NM47HF2",
"address": null,
"delivered_at": "2026-11-07T15:17:52.566Z",
"read_at": null
},
{
"id": "ntf_01M6V9CSSJ74CDDFEP3N4T0X8P",
"app": "calendar",
"kind": "reminder",
"title": "Pick up Theo from soccer",
"body": "Tuesday at 5:00 pm, Riverside Park. Ben is going.",
"record_id": "evt_01M6V9CSHPG77MMGGKHAEJQ484",
"topic_id": null,
"address": "/calendar?event=evt_01M6V9CSHPG77MMGGKHAEJQ484",
"delivered_at": "2026-11-07T15:17:52.563Z",
"read_at": null
}
],
"next_cursor": null,
"unread_count": 2
}Only unread calendar notifications
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?unread_only=true&app=calendar' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?unread_only=true&app=calendar", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?unread_only=true&app=calendar HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSSWG1H9D0K65CS22QQT
{
"items": [
{
"id": "ntf_01M6V9CSSJ74CDDFEP3N4T0X8P",
"app": "calendar",
"kind": "reminder",
"title": "Pick up Theo from soccer",
"body": "Tuesday at 5:00 pm, Riverside Park. Ben is going.",
"record_id": "evt_01M6V9CSHPG77MMGGKHAEJQ484",
"topic_id": null,
"address": "/calendar?event=evt_01M6V9CSHPG77MMGGKHAEJQ484",
"delivered_at": "2026-11-07T15:17:52.563Z",
"read_at": null
}
],
"next_cursor": null,
"unread_count": 2
}See one notification at a time
limit and cursor page through them.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSSY23TK9DMZPZ5CH4BN
{
"items": [
{
"id": "ntf_01M6V9CSSMTA415FM404N9HKYH",
"app": "meals",
"kind": "message",
"title": "Dinner is at 6:00 pm",
"body": null,
"record_id": null,
"topic_id": "mel_01M6V9CSFSFH4859KG4NM47HF2",
"address": null,
"delivered_at": "2026-11-07T15:17:52.566Z",
"read_at": null
}
],
"next_cursor": "1794064672566.ntf_01M6V9CSSMTA415FM404N9HKYH",
"unread_count": 2
}See the next notification
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1&cursor=1794064672566.ntf_01M6V9CSSMTA415FM404N9HKYH' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1&cursor=1794064672566.ntf_01M6V9CSSMTA415FM404N9HKYH", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/notifications.notification.list?limit=1&cursor=1794064672566.ntf_01M6V9CSSMTA415FM404N9HKYH HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSSZ0TN6Y7A4TV6W6VT3
{
"items": [
{
"id": "ntf_01M6V9CSSJ74CDDFEP3N4T0X8P",
"app": "calendar",
"kind": "reminder",
"title": "Pick up Theo from soccer",
"body": "Tuesday at 5:00 pm, Riverside Park. Ben is going.",
"record_id": "evt_01M6V9CSHPG77MMGGKHAEJQ484",
"topic_id": null,
"address": "/calendar?event=evt_01M6V9CSHPG77MMGGKHAEJQ484",
"delivered_at": "2026-11-07T15:17:52.563Z",
"read_at": null
}
],
"next_cursor": null,
"unread_count": 2
}For Rigel#
Rigel's tool for this query is notifications_notification_list. Rigel runs this on its own, then says what it did. The agent guide has the rest.