One project's whole workspace
maintenance.project.get
GET/api/v1/households/{household_id}/queries/maintenance.project.get
- Query
- Rigel runs it
One project with the items it concerns, its problems, the work log (newest first), visits, and quotes and invoices with totals by kind and currency. Totals are what the paper says; an invoice amount doesn't mean it was paid.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
project_idquerystringrequired | A maintenance project ID, such as mpj_01JC0000000000000000000000. |
Response#
200 The answer.
| Field | Description |
|---|---|
idstringrequired | A maintenance project ID, such as mpj_01JC0000000000000000000000. |
addressstring or nullrequired | The web route that opens it. |
property_idstringrequired | A property ID, such as prp_01JC0000000000000000000000. |
titlestringrequired | What the project is. |
goalstring or nullrequired | What done looks like. |
kindone of: repair, improvement, maintenance, otherrequired | repair, improvement, maintenance or other. |
statusone of: planning, active, on_hold, done, cancelledrequired | planning, active, on_hold, done or cancelled. |
started_onstring or nullrequired | When it started. |
finished_onstring or nullrequired | When it finished. |
budgetinteger or nullrequired | The budget in minor units of currency. |
currencystring or nullrequired | The budget's currency. |
notesstring or nullrequired | Notes, as written. |
assetsarray of objectsrequired | |
assets[].idstringrequired | A asset ID, such as ast_01JC0000000000000000000000. |
assets[].namestringrequired | The item's name. |
assets[].addressstring or nullrequired | No description. |
issuesarray of objectsrequired | |
issues[].idstringrequired | A issue ID, such as iss_01JC0000000000000000000000. |
issues[].addressstring or nullrequired | The web route that opens it. |
issues[].titlestringrequired | What the problem is. |
issues[].severityone of: low, medium, high, urgentrequired | How bad it is: low (cosmetic or minor), medium (needs fixing), high (getting worse or costly), urgent (safety, water or no heat). |
issues[].statusone of: open, monitoring, resolvedrequired | open (needs work), monitoring (watching a symptom), resolved (fixed or no longer a problem). |
logarray of objectsrequired | The work log, newest first. |
log[].idstringrequired | A maintenance project update ID, such as mpu_01JC0000000000000000000000. |
log[].textstringrequired | The entry, as written. |
log[].file_idstring or nullrequired | A photo or file with it. |
log[].noted_atstring (date-time)required | When it happened or was said. |
log[].noted_agostringrequired | How long ago, such as "3 weeks ago". |
visitsarray of objectsrequired | Visits for it, newest first. |
visits[].idstringrequired | A visit ID, such as vst_01JC0000000000000000000000. |
visits[].addressstring or nullrequired | The web route that opens it. |
visits[].titlestringrequired | What it is for. |
visits[].statusone of: scheduled, done, cancelledrequired | Where the visit stands. |
visits[].contractor_namestring or nullrequired | Who is coming or came. |
visits[].starts_atstring (date-time) or nullrequired | When they are due. |
visits[].visited_onstring or nullrequired | When the work happened. |
paperworkarray of objectsrequired | Quotes and invoices for it, newest first. |
paperwork[].idstringrequired | A invoice ID, such as ivc_01JC0000000000000000000000. |
paperwork[].addressstring or nullrequired | The web route that opens it. |
paperwork[].kindone of: quote, invoicerequired | A quote or an invoice. |
paperwork[].numberstring or nullrequired | The number on the paper. |
paperwork[].contractor_namestring or nullrequired | Who it is from. |
paperwork[].issued_onstring or nullrequired | The date on it. |
paperwork[].currencystringrequired | An ISO 4217 currency code, such as USD. |
paperwork[].totalinteger or nullrequired | Its total in minor units; null when the paper doesn't say. |
paperwork[].file_idstring or nullrequired | The original paper. |
totalsarray of objectsrequired | Quote and invoice totals by kind and currency. |
totals[].kindone of: quote, invoicerequired | Quotes or invoices. |
totals[].currencystringrequired | An ISO 4217 currency code, such as USD. |
totals[].totalintegerrequired | The sum of their totals, in minor units. |
totals[].countintegerrequired | How many papers are summed. |
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.
Open a project
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.project.get?project_id=mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.project.get?project_id=mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.project.get?project_id=mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT1BPP8WH4WWF6BVZTQ1
{
"id": "mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ",
"address": "/maintenance/projects/mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ",
"property_id": "prp_01M6V9CSTXS6P4CG6RNTNT60FA",
"title": "Stop the basement window leak",
"goal": "Dry basement walls before the spring rains.",
"kind": "repair",
"status": "active",
"started_on": "2026-10-19",
"finished_on": null,
"budget": 150000,
"currency": "USD",
"notes": "Decide by Friday. Quote is good for 30 days.",
"assets": [],
"issues": [
{
"id": "iss_01M6V9CSYFR1X4V2X9M3HXT85F",
"address": "/maintenance/issues/iss_01M6V9CSYFR1X4V2X9M3HXT85F",
"title": "Basement window leaks in heavy rain",
"severity": "high",
"status": "open"
}
],
"log": [
{
"id": "mpu_01M6V9CSZEMR6CZJCWH0ZCQP04",
"text": "Riverbend says the window well needs a drain, not just caulk. Asked for a quote for both.",
"file_id": null,
"noted_at": "2026-11-01T15:17:52.750Z",
"noted_ago": "6 days ago"
}
],
"visits": [],
"paperwork": [
{
"id": "ivc_01M6V9CSZG00MBBMM5BA15SCMT",
"address": "/maintenance/people",
"kind": "quote",
"number": "Q-2290",
"contractor_name": "Riverbend Plumbing & Drain",
"issued_on": "2026-11-04",
"currency": "USD",
"total": 125000,
"file_id": null
}
],
"totals": [
{
"kind": "quote",
"currency": "USD",
"total": 125000,
"count": 1
}
]
}For Rigel#
Rigel's tool for this query is maintenance_project_get. Rigel runs this on its own, then says what it did. The agent guide has the rest.