Add a task
tasks.task.create
POST/api/v1/households/{household_id}/commands/tasks.task.create
- Command
- Rigel runs it
- Applies offline
Adds one task, optionally as a subtask, with any fields filled in. Fill in only what was said; leave the rest out. Tags are by name and created as needed. The assignee and the person asking watch it. Search first (tasks.task.search) so you don't add a duplicate of an open task. Fails with task_not_found (parent or dependency), person_not_found, or dependency_cycle.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
Idempotency-Keyheaderstringoptional | The command's ID. Reuse it when retrying the same command. |
Request body#
JSON, as application/json.
| Field | Description |
|---|---|
titlestringrequired | What needs doing, as written, 1–500 characters: "Call the pediatrician about Theo's rash". |
descriptionstringoptional | More about the task, in Markdown, as written. Up to 20,000 characters. |
priorityintegeroptional | 0 Urgent, 1 High, 2 Medium, 3 Low, 4 Someday. Leave out unless someone said how important it is. |
assignee_person_idstringoptional | Who's doing it: the person speaking unless someone else was named. Leave out when it's unclear. |
due_datestring (date)optional | When it's due, YYYY-MM-DD. Leave out when no date was given. |
scheduled_startstring (date-time)optional | When it's planned to be worked on. Give scheduled_end with it. |
scheduled_endstring (date-time)optional | When the planned time ends, after scheduled_start. |
tagsarray of stringsoptional | Tag names. Existing tags are matched ignoring case; others are created. Reuse existing tags. |
linksarray of stringsoptional | Records in other apps this task is about, such as a maintenance task or a document. |
parent_task_idstringoptional | The project or task this is a subtask of. |
depends_on_task_idsarray of stringsoptional | Tasks that must be done before this one can start. |
Response#
200 The command was applied.
| Field | Description |
|---|---|
resultobjectrequired | What the command returned, such as the IDs it created. |
result.task_idstringrequired | The new task. |
versionintegerrequired | The household version after the command. |
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 | task_not_found |
|
404 | person_not_found | A missing assignee. |
404 | not_found | The household doesn't exist, or you aren't a member of it. |
409 | idempotency_key_reused | The Idempotency-Key was already used for a different command. |
Examples#
These are real. Each scenario is one of the command's test cases, run on a household when this site was built, and the response is what the API returned.
Adds a top-level task with just a title; I watch it
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Call the pediatrician"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Call the pediatrician",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Call the pediatrician"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0ABPFD2ZNRVFMFF59
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}Fills in every field, deduplicating tags, links and dependencies
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Pick up the rental keys",
"description": "Bring ID.",
"priority": 1,
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-14",
"scheduled_start": "2025-11-10T14:00:00Z",
"scheduled_end": "2025-11-10T15:00:00Z",
"tags": [
"Errands",
"errands",
"Outside"
],
"links": [
"fil_01JC00000000000000000000R1",
"fil_01JC00000000000000000000R1",
"fnt_01JC00000000000000000000R2"
],
"depends_on_task_ids": [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000X"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Pick up the rental keys",
description: "Bring ID.",
priority: 1,
assignee_person_id: "per_01JC000000000000000000000B",
due_date: "2025-11-14",
scheduled_start: "2025-11-10T14:00:00Z",
scheduled_end: "2025-11-10T15:00:00Z",
tags: [
"Errands",
"errands",
"Outside",
],
links: [
"fil_01JC00000000000000000000R1",
"fil_01JC00000000000000000000R1",
"fnt_01JC00000000000000000000R2",
],
depends_on_task_ids: [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000X",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Pick up the rental keys",
"description": "Bring ID.",
"priority": 1,
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-14",
"scheduled_start": "2025-11-10T14:00:00Z",
"scheduled_end": "2025-11-10T15:00:00Z",
"tags": [
"Errands",
"errands",
"Outside"
],
"links": [
"fil_01JC00000000000000000000R1",
"fil_01JC00000000000000000000R1",
"fnt_01JC00000000000000000000R2"
],
"depends_on_task_ids": [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000X"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R04ZWMSQJMDB8T4TVT
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}An assigned task tells the assignee who gave it
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Take out the recycling",
"assignee_person_id": "per_01JC000000000000000000000B"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Take out the recycling",
assignee_person_id: "per_01JC000000000000000000000B",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Take out the recycling",
"assignee_person_id": "per_01JC000000000000000000000B"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0PVTNV687HZCHBMKM
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}Assigning it to myself watches it and notifies no one
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Renew passports",
"assignee_person_id": "per_01JC000000000000000000000A"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Renew passports",
assignee_person_id: "per_01JC000000000000000000000A",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Renew passports",
"assignee_person_id": "per_01JC000000000000000000000A"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0NM5E3YXYS13B4V31
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}An assignee without an account watches but is not notified
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Pick up toys",
"assignee_person_id": "per_01JC000000000000000000000C"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Pick up toys",
assignee_person_id: "per_01JC000000000000000000000C",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Pick up toys",
"assignee_person_id": "per_01JC000000000000000000000C"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0WJDERP4JK21YGFZ5
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}An actor with no person watches nothing
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Check the smoke detectors",
"assignee_person_id": "per_01JC000000000000000000000B"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Check the smoke detectors",
assignee_person_id: "per_01JC000000000000000000000B",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Check the smoke detectors",
"assignee_person_id": "per_01JC000000000000000000000B"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0CFPSGNR76G96J33M
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}The notification title is cut to 120 characters
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Plan the summer trip: book flights, find a rental near the lake, ask the grandparents which weeks work, and check passports check passports check passports check passports check passports ",
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-10"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Plan the summer trip: book flights, find a rental near the lake, ask the grandparents which weeks work, and check passports check passports check passports check passports check passports ",
assignee_person_id: "per_01JC000000000000000000000B",
due_date: "2025-11-10",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Plan the summer trip: book flights, find a rental near the lake, ask the grandparents which weeks work, and check passports check passports check passports check passports check passports ",
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-10"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0Y1WH1W86Y284K78H
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}A due date already past schedules no overdue reminder
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "File the form",
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-04"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "File the form",
assignee_person_id: "per_01JC000000000000000000000B",
due_date: "2025-11-04",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "File the form",
"assignee_person_id": "per_01JC000000000000000000000B",
"due_date": "2025-11-04"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0KT162SVZTH05ENGB
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}A due date with no assignee schedules no overdue reminder
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Pay the water bill",
"due_date": "2025-11-14"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Pay the water bill",
due_date: "2025-11-14",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Pay the water bill",
"due_date": "2025-11-14"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0P2BMTGN1MCHQHXJ7
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}A first subtask gets a sort key
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Buy paint",
"parent_task_id": "tsk_01JC000000000000000000000P"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Buy paint",
parent_task_id: "tsk_01JC000000000000000000000P",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Buy paint",
"parent_task_id": "tsk_01JC000000000000000000000P"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0QZGFFG7HRAQGH426
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}A subtask goes after the last sibling that has a key
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Hang curtains",
"parent_task_id": "tsk_01JC000000000000000000000P"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Hang curtains",
parent_task_id: "tsk_01JC000000000000000000000P",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Hang curtains",
"parent_task_id": "tsk_01JC000000000000000000000P"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R092BTWE714VJ95E85
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}Empty lists add nothing
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Water the plants",
"tags": [],
"links": [],
"depends_on_task_ids": []
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Water the plants",
tags: [],
links: [],
depends_on_task_ids: [],
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Water the plants",
"tags": [],
"links": [],
"depends_on_task_ids": []
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R087GR7SV03QN8GPVV
{
"result": {
"task_id": "tsk_01JC4N0000MBGE5RJ6Q7V6V6T8"
},
"version": 1
}A missing parent
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Orphan",
"parent_task_id": "tsk_01JC000000000000000000000Z"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Orphan",
parent_task_id: "tsk_01JC000000000000000000000Z",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Orphan",
"parent_task_id": "tsk_01JC000000000000000000000Z"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0GB3AG7QW9H723ZF0
{
"error": {
"code": "task_not_found",
"message": "That task isn't there any more. No changes were applied.",
"details": {
"task_id": "tsk_01JC000000000000000000000Z",
"field": "parent_task_id"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0GB3AG7QW9H723ZF0"
}
}A missing assignee
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Nobody'\''s",
"assignee_person_id": "per_01JC000000000000000000000Z"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Nobody's",
assignee_person_id: "per_01JC000000000000000000000Z",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Nobody's",
"assignee_person_id": "per_01JC000000000000000000000Z"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R02C3STD619H5V339Q
{
"error": {
"code": "person_not_found",
"message": "That person isn't in the household any more. No changes were applied.",
"details": {
"person_id": "per_01JC000000000000000000000Z"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R02C3STD619H5V339Q"
}
}A missing dependency
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA' \
-d '{
"title": "Waits",
"depends_on_task_ids": [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000Z"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAAAA",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Waits",
depends_on_task_ids: [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000Z",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAAAA
{
"title": "Waits",
"depends_on_task_ids": [
"tsk_01JC000000000000000000000X",
"tsk_01JC000000000000000000000Z"
]
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R07HB9Z694SZYKT38D
{
"error": {
"code": "task_not_found",
"message": "That task isn't there any more. No changes were applied.",
"details": {
"task_id": "tsk_01JC000000000000000000000Z",
"field": "depends_on_task_ids"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R07HB9Z694SZYKT38D"
}
}Add a task
Only a title is needed. Leave out anything nobody said.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2FF9CQMMST6C13HF64' \
-d '{
"title": "Book Theo'\''s flu shot"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2FF9CQMMST6C13HF64",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Book Theo's flu shot",
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2FF9CQMMST6C13HF64
{
"title": "Book Theo's flu shot"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2FY2T4KASJPSQEETH6
{
"result": {
"task_id": "tsk_01M6V9CT2FB0DD6W26P2MTCZPP"
},
"version": 229
}Add a task for someone with a date and a tag
Tags are given by name and made if they're new. The assignee is notified, and starts watching the task.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2HZE3WZGJ88FGK3FPH' \
-d '{
"title": "Renew the car registration",
"description": "The renewal notice is in the kitchen drawer.",
"priority": 1,
"assignee_person_id": "per_01M6V9CS744BQQH188FS6CXY9W",
"due_date": "2026-11-19",
"tags": [
"errands"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2HZE3WZGJ88FGK3FPH",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Renew the car registration",
description: "The renewal notice is in the kitchen drawer.",
priority: 1,
assignee_person_id: "per_01M6V9CS744BQQH188FS6CXY9W",
due_date: "2026-11-19",
tags: [
"errands",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2HZE3WZGJ88FGK3FPH
{
"title": "Renew the car registration",
"description": "The renewal notice is in the kitchen drawer.",
"priority": 1,
"assignee_person_id": "per_01M6V9CS744BQQH188FS6CXY9W",
"due_date": "2026-11-19",
"tags": [
"errands"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2HWC2F1FJ3395DC85M
{
"result": {
"task_id": "tsk_01M6V9CT2HD6NKJXPTTWJTBTYS"
},
"version": 230
}Add a task about a record in another app
links are IDs of records in other apps, here the dentist appointment on the calendar.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2M6YVST3ZTP95P9KDW' \
-d '{
"title": "Bring the insurance card to Nia'\''s dentist visit",
"assignee_person_id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"due_date": "2026-11-12",
"priority": 2,
"links": [
"evt_01M6V9CSHWH4PNSMGCX1WKFWDT"
],
"tags": [
"kids"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2M6YVST3ZTP95P9KDW",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Bring the insurance card to Nia's dentist visit",
assignee_person_id: "per_01M6V9CS6RX26JK5KVYGRN22D2",
due_date: "2026-11-12",
priority: 2,
links: [
"evt_01M6V9CSHWH4PNSMGCX1WKFWDT",
],
tags: [
"kids",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2M6YVST3ZTP95P9KDW
{
"title": "Bring the insurance card to Nia's dentist visit",
"assignee_person_id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"due_date": "2026-11-12",
"priority": 2,
"links": [
"evt_01M6V9CSHWH4PNSMGCX1WKFWDT"
],
"tags": [
"kids"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2M1Z7XZC827ZPHZ9MT
{
"result": {
"task_id": "tsk_01M6V9CT2MF45K5TH7J6PBE1SJ"
},
"version": 231
}Add a chore for a child
Assignees are people in the family, so a child who never signs in can have a task.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2QWTPQ9JYTHVJS0JWH' \
-d '{
"title": "Put toys away",
"description": "In the bins by the window, not the closet.",
"assignee_person_id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"due_date": "2026-11-08",
"tags": [
"chores",
"kids"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2QWTPQ9JYTHVJS0JWH",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Put toys away",
description: "In the bins by the window, not the closet.",
assignee_person_id: "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
due_date: "2026-11-08",
tags: [
"chores",
"kids",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2QWTPQ9JYTHVJS0JWH
{
"title": "Put toys away",
"description": "In the bins by the window, not the closet.",
"assignee_person_id": "per_01M6V9CS7CDAEP5VDA5T8R9TG6",
"due_date": "2026-11-08",
"tags": [
"chores",
"kids"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2QW38P3W810JA17RSQ
{
"result": {
"task_id": "tsk_01M6V9CT2QVG1D1T82PW3837ZG"
},
"version": 232
}Add another chore
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2TB7YXS1EF8ZRRA5HN' \
-d '{
"title": "Sweep the kitchen floor",
"assignee_person_id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"priority": 3,
"tags": [
"chores"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2TB7YXS1EF8ZRRA5HN",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Sweep the kitchen floor",
assignee_person_id: "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
priority: 3,
tags: [
"chores",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2TB7YXS1EF8ZRRA5HN
{
"title": "Sweep the kitchen floor",
"assignee_person_id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
"priority": 3,
"tags": [
"chores"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2T3D74QW6E1E2Z0V7F
{
"result": {
"task_id": "tsk_01M6V9CT2THMCHK2K7S32C9WNN"
},
"version": 233
}Add a task for someday
Priority 4 is Someday: it stays in the queue, after everything more important.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CT2WYTA7KHM0MGXEMJ8F' \
-d '{
"title": "Sort the garage shelves",
"priority": 4,
"tags": [
"house",
"outside"
]
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CT2WYTA7KHM0MGXEMJ8F",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
title: "Sort the garage shelves",
priority: 4,
tags: [
"house",
"outside",
],
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/tasks.task.create HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CT2WYTA7KHM0MGXEMJ8F
{
"title": "Sort the garage shelves",
"priority": 4,
"tags": [
"house",
"outside"
]
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT2WQ2BACQQQDRR54VHX
{
"result": {
"task_id": "tsk_01M6V9CT2WE5GCAQSQTW3MTXV7"
},
"version": 234
}For Rigel#
Rigel's tool for this command is tasks_task_create. Rigel runs this on its own, then says what it did. The agent guide has the rest.