Check off a maintenance task
maintenance.task.complete
POST/api/v1/households/{household_id}/commands/maintenance.task.complete
- Command
- Rigel runs it
- Applies offline
Records that the task was done (on done_on, today if left out) and moves its next due date by its rule: counted from the day it was done for tasks that repeat from completion, the next anchor date for anchored ones, the next window for seasonal ones. Give next_due_on to choose the next date yourself, or null for none. A cost needs its currency. Closes the open Tasks-app task. Fails with task_off for a task that's turned off.
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 |
|---|---|
task_idstringrequired | The task that was done. |
done_onstring (date)optional | The day it was done. Defaults to today. |
notestringoptional | What was done or noticed. |
costintegeroptional | What it cost, in minor units. Needs currency. |
currencystringoptional | An ISO 4217 currency code, such as USD. |
done_by_person_idstringoptional | Who in the household did it. |
done_by_contractor_idstringoptional | The contractor who did it. |
photo_file_idstringoptional | A photo of the finished job, already uploaded. |
visit_idstringoptional | The visit it was done during. |
next_due_onstring (date) or nulloptional | Override the next due date; null means none. |
Response#
200 The command was applied.
| Field | Description |
|---|---|
resultobjectrequired | What the command returned, such as the IDs it created. |
result.completion_idstringrequired | The completion recorded. |
result.next_due_onstring or nullrequired | When it's next due, or null when there isn't a next time. |
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 | Rejects an unknown task. |
404 | person_not_found | Rejects an unknown person. |
404 | contractor_not_found | Rejects an unknown contractor. |
404 | visit_not_found | Rejects an unknown visit. |
404 | file_not_found | Rejects an unknown photo. |
404 | not_found | The household doesn't exist, or you aren't a member of it. |
409 | currency_required | Rejects a cost without its currency. |
409 | task_off | Rejects a task that is turned off. |
409 | different_property | Rejects a visit at another property. |
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.
An interval task counts from the day it was done
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA19' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-11-05",
"note": "New MERV 11",
"cost": 2499,
"currency": "USD"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA19",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-11-05",
note: "New MERV 11",
cost: 2499,
currency: "USD",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA19
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-11-05",
"note": "New MERV 11",
"cost": 2499,
"currency": "USD"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0S0M7RF2629GPB5NG
{
"result": {
"completion_id": "mtc_01JC4N0000WMPCGNX7J9BDPTYB",
"next_due_on": "2026-02-05"
},
"version": 1
}Done_on defaults to the household's today
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1A' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1A",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1A
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0WGQJ666S8XAMWX6N
{
"result": {
"completion_id": "mtc_01JC4N00004PHVD2DA8E89REFS",
"next_due_on": "2026-02-06"
},
"version": 1
}Month arithmetic clamps to the last day
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1B' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-01-31"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1B",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-01-31",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1B
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-01-31"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0V2XEQSK02D5NMKV7
{
"result": {
"completion_id": "mtc_01JC4N0000X6H43FJM8Q95A2Z7",
"next_due_on": "2025-02-28"
},
"version": 1
}An anchored task done late keeps its anchor
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1C' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-03"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1C",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-10-03",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1C
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-03"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R05MXC705ZGSHNKXM2
{
"result": {
"completion_id": "mtc_01JC4N0000AWJNM6FQ0PC6HB7S",
"next_due_on": "2026-09-15"
},
"version": 1
}An anchored task done a little early counts for the coming anchor
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1D' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-09-01"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1D",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-09-01",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1D
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-09-01"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R06WTB9B8R5J6EBDG1
{
"result": {
"completion_id": "mtc_01JC4N0000BA82Q4TGR1SE0ZB4",
"next_due_on": "2026-09-15"
},
"version": 1
}An anchored task every 6 months steps by six months
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1E' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-20"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1E",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-10-20",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1E
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-20"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0CN3JN5BPH5BPEAY9
{
"result": {
"completion_id": "mtc_01JC4N0000R23QFSJPWMZBPR5J",
"next_due_on": "2026-03-15"
},
"version": 1
}A seasonal task done in its window is next due when the next window opens
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1F' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-20"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1F",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-10-20",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1F
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-10-20"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0HEYXTJHYRWF8Y014
{
"result": {
"completion_id": "mtc_01JC4N0000HXV3JQXFW0CM5CAX",
"next_due_on": "2026-10-01"
},
"version": 1
}A seasonal task done 30 days before the window counts for it
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1G' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-09-01"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1G",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-09-01",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1G
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-09-01"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0CVAXW9SG2N9F0TNJ
{
"result": {
"completion_id": "mtc_01JC4N0000YEBRN1EDGFSTWNG5",
"next_due_on": "2026-10-01"
},
"version": 1
}A seasonal task done 31 days before the window is still due this window
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1H' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-08-31"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1H",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-08-31",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1H
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-08-31"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0X3AS9K76TMZ2KJHX
{
"result": {
"completion_id": "mtc_01JC4N0000ZPSXRVZWC8GHE92X",
"next_due_on": "2025-10-01"
},
"version": 1
}A seasonal task done after its window waits for next year's
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1J' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-11-20"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1J",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-11-20",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1J
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-11-20"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R004VM2QGMF62M4F96
{
"result": {
"completion_id": "mtc_01JC4N00005ADZKE3WG73Q3P0P",
"next_due_on": "2026-10-01"
},
"version": 1
}A seasonal window that wraps the new year
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1K' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2026-01-20"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1K",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2026-01-20",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1K
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2026-01-20"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0VWGCJJ7E3CA1WWV6
{
"result": {
"completion_id": "mtc_01JC4N0000JWY4KAHS45VMSF7F",
"next_due_on": "2026-11-15"
},
"version": 1
}A one-time task is done for good
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1M' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1M",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1M
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0FYM8ZW652H1QMDNX
{
"result": {
"completion_id": "mtc_01JC4N00000713WA1Y4M3NYW7H",
"next_due_on": null
},
"version": 1
}A usage task has no next date unless one is given
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1N' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1N",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1N
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R02MEZNGMES3KXMQCJ
{
"result": {
"completion_id": "mtc_01JC4N0000S0RY2QEQ4H56F0CB",
"next_due_on": null
},
"version": 1
}A next_due_on on the completion overrides the rule
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1P' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"next_due_on": "2025-12-24"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1P",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
next_due_on: "2025-12-24",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1P
{
"task_id": "mtk_01JC0000000000000000000001",
"next_due_on": "2025-12-24"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R05MQW9C9G0QJ4GBG7
{
"result": {
"completion_id": "mtc_01JC4N000070VP1YHBRMJJDXPD",
"next_due_on": "2025-12-24"
},
"version": 1
}A null next_due_on means no next date
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Q' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"next_due_on": null
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1Q",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
next_due_on: null,
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Q
{
"task_id": "mtk_01JC0000000000000000000001",
"next_due_on": null
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0X9PZBJR7FMR14PSC
{
"result": {
"completion_id": "mtc_01JC4N0000ME4E7YS0WPK5PPV2",
"next_due_on": null
},
"version": 1
}A check-off from before the latest one doesn't pull the due date back
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1R' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-06-01"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1R",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_on: "2025-06-01",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1R
{
"task_id": "mtk_01JC0000000000000000000001",
"done_on": "2025-06-01"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0NWP8MYDXVCYZ7B2V
{
"result": {
"completion_id": "mtc_01JC4N0000DZ3QWAZAWZM18ABH",
"next_due_on": "2026-01-01"
},
"version": 1
}Checking off clears the day it was planned for
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1S' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1S",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1S
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0SY8GPBYATXKAQNF4
{
"result": {
"completion_id": "mtc_01JC4N0000TMREQNF8G6FBZK3C",
"next_due_on": "2026-02-06"
},
"version": 1
}Who did it, and a visit at the same property
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1T' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_person_id": "per_01JC0000000000000000000001",
"done_by_contractor_id": "ctr_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1T",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_by_person_id: "per_01JC0000000000000000000001",
done_by_contractor_id: "ctr_01JC0000000000000000000001",
visit_id: "vst_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1T
{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_person_id": "per_01JC0000000000000000000001",
"done_by_contractor_id": "ctr_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01K9D9S2R008ASB2NTC8YV4KZY
{
"result": {
"completion_id": "mtc_01JC4N0000V60R7177C2HEE7A0",
"next_due_on": "2026-02-06"
},
"version": 1
}Rejects a cost without its currency
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1V' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"cost": 1500
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1V",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
cost: 1500,
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1V
{
"task_id": "mtk_01JC0000000000000000000001",
"cost": 1500
}HTTP/1.1 409 Conflict
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0GNKDR5ATD6Q8GSFV
{
"error": {
"code": "currency_required",
"message": "Say which currency the cost is in. No changes were applied.",
"details": {},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0GNKDR5ATD6Q8GSFV"
}
}Rejects a task that is turned off
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1W' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1W",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1W
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 409 Conflict
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0SE7YS9J9MYDRH3F6
{
"error": {
"code": "task_off",
"message": "That task is turned off. Turn it back on to check it off. No changes were applied.",
"details": {
"task_id": "mtk_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0SE7YS9J9MYDRH3F6"
}
}Rejects an unknown task
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1X' \
-d '{
"task_id": "mtk_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1X",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1X
{
"task_id": "mtk_01JC0000000000000000000001"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0GSRED0EP613TNR68
{
"error": {
"code": "task_not_found",
"message": "That maintenance task isn't there any more. No changes were applied.",
"details": {
"task_id": "mtk_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0GSRED0EP613TNR68"
}
}Rejects an unknown person
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Y' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_person_id": "per_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1Y",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_by_person_id: "per_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Y
{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_person_id": "per_01JC0000000000000000000001"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R077A1MD3VMJC4CSM1
{
"error": {
"code": "person_not_found",
"message": "That person isn't in the household any more. No changes were applied.",
"details": {
"person_id": "per_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R077A1MD3VMJC4CSM1"
}
}Rejects an unknown contractor
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Z' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_contractor_id": "ctr_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA1Z",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
done_by_contractor_id: "ctr_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA1Z
{
"task_id": "mtk_01JC0000000000000000000001",
"done_by_contractor_id": "ctr_01JC0000000000000000000001"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R07RSA9PDM2YPR6176
{
"error": {
"code": "contractor_not_found",
"message": "That contractor isn't there any more. No changes were applied.",
"details": {
"contractor_id": "ctr_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R07RSA9PDM2YPR6176"
}
}Rejects an unknown visit
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA20' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA20",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
visit_id: "vst_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA20
{
"task_id": "mtk_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0VY6CQ9KKPECD0YGV
{
"error": {
"code": "visit_not_found",
"message": "That visit isn't there any more. No changes were applied.",
"details": {
"visit_id": "vst_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0VY6CQ9KKPECD0YGV"
}
}Rejects a visit at another property
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA21' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA21",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
visit_id: "vst_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA21
{
"task_id": "mtk_01JC0000000000000000000001",
"visit_id": "vst_01JC0000000000000000000001"
}HTTP/1.1 409 Conflict
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0M2NQFFP7PZ6PQH22
{
"error": {
"code": "different_property",
"message": "That visit is at a different property. No changes were applied.",
"details": {
"property_id": "prp_01JC0000000000000000000002"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0M2NQFFP7PZ6PQH22"
}
}Rejects an unknown photo
curl -X POST 'https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA22' \
-d '{
"task_id": "mtk_01JC0000000000000000000001",
"photo_file_id": "fil_01JC0000000000000000000001"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01JC4N0000AAAAAAAAAAAAAA22",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01JC0000000000000000000001",
photo_file_id: "fil_01JC0000000000000000000001",
}),
});
const data = await response.json();POST /api/v1/households/hh_01K9BKKP003AHRZ6DMV29GQY5C/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01JC4N0000AAAAAAAAAAAAAA22
{
"task_id": "mtk_01JC0000000000000000000001",
"photo_file_id": "fil_01JC0000000000000000000001"
}HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01K9D9S2R0TH72JZV21QHB36RC
{
"error": {
"code": "file_not_found",
"message": "That file isn't there any more. No changes were applied.",
"details": {
"file_id": "fil_01JC0000000000000000000001"
},
"recovery": "Read the current state, then send a command that fits it.",
"request_id": "req_01K9D9S2R0TH72JZV21QHB36RC"
}
}Check off a task
Records the completion and works out the next due date. The task in Tasks for this occurrence is closed.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CSXS0Y19YE8AZEZRZ6R7' \
-d '{
"task_id": "mtk_01M6V9CSX1RN5MWBHS4SJAK8F3",
"note": "All five beeped. Replaced the battery in the hall alarm.",
"done_by_person_id": "per_01M6V9CS6RX26JK5KVYGRN22D2"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CSXS0Y19YE8AZEZRZ6R7",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01M6V9CSX1RN5MWBHS4SJAK8F3",
note: "All five beeped. Replaced the battery in the hall alarm.",
done_by_person_id: "per_01M6V9CS6RX26JK5KVYGRN22D2",
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CSXS0Y19YE8AZEZRZ6R7
{
"task_id": "mtk_01M6V9CSX1RN5MWBHS4SJAK8F3",
"note": "All five beeped. Replaced the battery in the hall alarm.",
"done_by_person_id": "per_01M6V9CS6RX26JK5KVYGRN22D2"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSXSN3X82QR71CVZ37EQ
{
"result": {
"completion_id": "mtc_01M6V9CSXS20TVS8VN8C6MS7SW",
"next_due_on": "2026-12-07"
},
"version": 205
}Check off a task with its cost and date
done_on is when it was done, if not today. A cost needs its currency.
curl -X POST 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete' \
-H "Cookie: rigel_session=$RIGEL_SESSION" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: cmd_01M6V9CSXXEDXF846BBHYH3KBF' \
-d '{
"task_id": "mtk_01M6V9CSWM1GKX8MAYQFYBAM3S",
"done_on": "2026-11-06",
"note": "Bought a 4-pack. The old filter was grey.",
"cost": 2499,
"currency": "USD",
"done_by_person_id": "per_01M6V9CS744BQQH188FS6CXY9W"
}'const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "cmd_01M6V9CSXXEDXF846BBHYH3KBF",
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
body: JSON.stringify({
task_id: "mtk_01M6V9CSWM1GKX8MAYQFYBAM3S",
done_on: "2026-11-06",
note: "Bought a 4-pack. The old filter was grey.",
cost: 2499,
currency: "USD",
done_by_person_id: "per_01M6V9CS744BQQH188FS6CXY9W",
}),
});
const data = await response.json();POST /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/commands/maintenance.task.complete HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Content-Type: application/json
Idempotency-Key: cmd_01M6V9CSXXEDXF846BBHYH3KBF
{
"task_id": "mtk_01M6V9CSWM1GKX8MAYQFYBAM3S",
"done_on": "2026-11-06",
"note": "Bought a 4-pack. The old filter was grey.",
"cost": 2499,
"currency": "USD",
"done_by_person_id": "per_01M6V9CS744BQQH188FS6CXY9W"
}HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSXX0JG38A87RJD1P30K
{
"result": {
"completion_id": "mtc_01M6V9CSXX7N0X2QKSSW370DHG",
"next_due_on": "2027-02-06"
},
"version": 206
}For Rigel#
Rigel's tool for this command is maintenance_task_complete. Rigel runs this on its own, then says what it did. The agent guide has the rest.