Skip to content
Rigel docs
Open Rigel

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#

One project's whole workspace: parameters
FieldDescription
household_idpathstringrequired

The household's ID.

project_idquerystringrequired

A maintenance project ID, such as mpj_01JC0000000000000000000000.

Response#

200 The answer.

One project's whole workspace: response fields
FieldDescription
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.

pattern ^[A-Z]{3}$
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 nullrequiredNo 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.

pattern ^[A-Z]{3}$
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.

pattern ^[A-Z]{3}$
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.

One project's whole workspace: errors
StatusCodeWhen
400validation_failedA field is missing, misspelled or out of range. details.fields lists each problem.
401unauthenticatedThe request has no valid session.
404not_foundThe 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

Request, curl
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.project.get?project_id=mpj_01M6V9CSZC4PE99PPRAQ7ASEZQ' \
  -H "Cookie: rigel_session=$RIGEL_SESSION"
Request, TypeScript
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();
Request, HTTP
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>
Response, 200
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.

Rigel is in early access, and sign-up is by invitation. Open Rigel