Get a conversation with Rigel
agent.conversation_get
GET/api/v1/households/{household_id}/agent/conversations/{conversation_id}
- Route
One of your conversations with Rigel, with every message in it, oldest first.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
conversation_idpathstringrequired | The conversation's ID. |
Response#
200 The conversation.
| Field | Description |
|---|---|
idstringrequired | The conversation's ID. |
titlestring or nullrequired | A short name taken from the first message. |
created_atintegerrequired | When it started, UTC milliseconds. |
updated_atintegerrequired | When the last message was saved, UTC milliseconds. |
messagesarray of objectsrequired | Its messages, oldest first. |
messages[].idstringrequired | The message's ID. |
messages[].roleone of: person, rigelrequired | Who said it. |
messages[].textstringrequired | What was said. |
messages[].file_idsarray of stringsrequired | Photos and files sent with a person's message. |
messages[].actionsarray of objectsrequired | What Rigel did during the turn, in order. Empty for a person's message. |
messages[].actions[].toolstringrequired | The tool, such as meals.plan.add_entry. |
messages[].actions[].summarystringoptional | The command or query's summary, in plain words, such as "Put a card on the dashboard". |
messages[].actions[].kindone of: command, query, ui_action, agent_toolrequired | No description. |
messages[].actions[].inputanyoptional | No description. |
messages[].actions[].outcomeone of: applied, rejected, answered, awaiting_confirmation, refused, failedrequired | No description. |
messages[].actions[].command_idstringoptional | No description. |
messages[].actions[].resultanyoptional | No description. |
messages[].actions[].errorobjectoptional | |
messages[].actions[].error.codestringrequired | No description. |
messages[].actions[].error.messagestringrequired | No description. |
messages[].pendingarray of objectsrequired | Confirmations still waiting for your answer. Empty once answered or cancelled. |
messages[].pending[].idstringrequired | Pass back to confirm or cancel it. |
messages[].pending[].commandstringrequired | No description. |
messages[].pending[].inputanyoptional | No description. |
messages[].pending[].descriptionstringrequired | What it will do, in plain words. |
messages[].stoppedone of: done, call_limit, over_budget, unavailable, cancelled, null or nullrequired | Why Rigel's turn ended early, or null if it finished. |
messages[].created_atintegerrequired | When it was said, UTC milliseconds. |
Errors#
Every error has the same envelope: error.code, error.message, error.details, error.recovery and error.request_id.
| Status | Code | When |
|---|---|---|
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.
Read a conversation with Rigel
Every message, oldest first, with what Rigel did while answering.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01M6V9CTBYGRF0AY79C9HQH1M1' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01M6V9CTBYGRF0AY79C9HQH1M1", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01M6V9CTBYGRF0AY79C9HQH1M1 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CTC3MJ8W8MGHH52KM4PQ
{
"id": "agc_01M6V9CTBYGRF0AY79C9HQH1M1",
"title": "What's for dinner on Monday?",
"created_at": 1794064679148,
"updated_at": 1794064685148,
"messages": [
{
"id": "agm_01M6V9CTBYQGF608JKX7YMDGCG",
"role": "person",
"text": "What's for dinner on Monday?",
"file_ids": [],
"actions": [],
"pending": [],
"stopped": null,
"created_at": 1794064679148
},
{
"id": "agm_01M6V9CTC1V2FCFGQY1F672B2X",
"role": "rigel",
"text": "Monday is tomato and white bean orzo, about 30 minutes. It's planned for all four of you, with a note to make extra for lunches.",
"file_ids": [],
"actions": [
{
"tool": "meals.week.get",
"summary": "The meal plan for a week",
"kind": "query",
"input": {
"week_start": "2026-11-09"
},
"outcome": "answered"
}
],
"pending": [],
"stopped": null,
"created_at": 1794064679148
},
{
"id": "agm_01M6V9CTC2FW7XF10F7Q4NM48Y",
"role": "person",
"text": "What do I need to buy for it?",
"file_ids": [],
"actions": [],
"pending": [],
"stopped": null,
"created_at": 1794064685148
},
{
"id": "agm_01M6V9CTC2FZARPK28NVW1SRBV",
"role": "rigel",
"text": "For the orzo you need crushed tomatoes and baby spinach. You already have olive oil and orzo, and the spinach is optional.",
"file_ids": [],
"actions": [
{
"tool": "recipes.recipe.shopping_preview",
"summary": "What to buy to cook a recipe",
"kind": "query",
"input": {
"recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
"servings": 4
},
"outcome": "answered"
}
],
"pending": [],
"stopped": null,
"created_at": 1794064685148
}
]
}A conversation that doesn't exist
Another member's conversation looks the same, so one person can't tell whether the other has any.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01JC0000000000000000000000' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01JC0000000000000000000000", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/agent/conversations/agc_01JC0000000000000000000000 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01M6V9CTC4PBQWRFXET8DAEFVT
{
"error": {
"code": "not_found",
"message": "That conversation wasn't found.",
"details": {},
"recovery": "Check the ID. You can only reach households you're a member of.",
"request_id": "req_01M6V9CTC4PBQWRFXET8DAEFVT"
}
}