Where an item's facts came from
maintenance.asset.facts
GET/api/v1/households/{household_id}/queries/maintenance.asset.facts
- Query
- Rigel runs it
Every fact row for one asset's chain (the asset, its group, its model, its group's model), current and replaced, newest first within each key, with the source it rests on and whether it is the one showing. For 'where did that number come from?'.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
asset_idquerystringrequired | A asset ID, such as ast_01JC0000000000000000000000. |
keyquerystringoptional | Only this fact key, such as filter_size. |
Response#
200 The answer.
| Field | Description |
|---|---|
factsarray of objectsrequired | |
facts[].attribute_idstringrequired | A asset fact ID, such as atr_01JC0000000000000000000000. |
facts[].keystringrequired | The fact key. |
facts[].labelstringrequired | Its label. |
facts[].in_wordsstringrequired | The value as a person reads it, such as "40 gal". |
facts[].valuestring or nullrequired | The text value. |
facts[].value_numnumber or nullrequired | The numeric value. |
facts[].unitstring or nullrequired | The unit, in snake_case. |
facts[].originone of: homeowner, label, research, generalrequired | How it was established. |
facts[].origin_in_wordsstringrequired | The origin as a person reads it, such as "From the label". |
facts[].sourceone of: asset, group, model, group_modelrequired | Whose fact it is: the asset, its group, its model or its group's model. |
facts[].owner_idstringrequired | The ID of the asset or model that owns the fact. |
facts[].currentbooleanrequired | False once a newer fact of the same origin replaced it. |
facts[].shownbooleanrequired | True for the fact that wins and is shown for its key. |
facts[].recorded_atstring (date-time)required | When it was recorded. |
facts[].evidenceobject or nullrequired | What it rests on. |
facts[].evidence.idstringrequired | A evidence ID, such as evi_01JC0000000000000000000000. |
facts[].evidence.file_idstring or nullrequired | The photo, manual or invoice it was read from. |
facts[].evidence.urlstring or nullrequired | The web page it was found on. |
facts[].evidence.said_by_person_idstring or nullrequired | Who said it. |
facts[].evidence.locatorstring or nullrequired | Where in the source, such as "p. 14". |
facts[].evidence.excerptstring or nullrequired | The exact text the value was read from. |
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.
Where an item's facts came from
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT0FMBP4FNQ4TPEJSP8T
{
"facts": [
{
"attribute_id": "atr_01M6V9CSW7YVWP9VJJ42SFK57E",
"key": "afue",
"label": "Efficiency (AFUE)",
"in_words": "96%",
"value": null,
"value_num": 96,
"unit": "percent",
"origin": "label",
"origin_in_words": "From the label",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": true,
"recorded_at": "2026-11-07T15:17:52.647Z",
"evidence": null
},
{
"attribute_id": "atr_01M6V9CSW8XX8EG50TW7K8DJT3",
"key": "filter_size",
"label": "Filter size",
"in_words": "16x25x1",
"value": "16x25x1",
"value_num": null,
"unit": null,
"origin": "homeowner",
"origin_in_words": "You told Rigel",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": true,
"recorded_at": "2026-11-07T15:17:52.649Z",
"evidence": null
},
{
"attribute_id": "atr_01M6V9CSW5DANGBHC842K65T0A",
"key": "fuel",
"label": "Fuel",
"in_words": "natural gas",
"value": "natural gas",
"value_num": null,
"unit": null,
"origin": "label",
"origin_in_words": "From the label",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": true,
"recorded_at": "2026-11-07T15:17:52.646Z",
"evidence": {
"id": "evi_01M6V9CSW5YT2FPEC8HZ9MMN6H",
"file_id": null,
"url": null,
"said_by_person_id": null,
"locator": "rating plate",
"excerpt": "NATURAL GAS"
}
},
{
"attribute_id": "atr_01M6V9CSW490A53PGQKYRG7RBM",
"key": "fuel",
"label": "Fuel",
"in_words": "natural gas",
"value": "natural gas",
"value_num": null,
"unit": null,
"origin": "research",
"origin_in_words": "From the manual or maker",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": false,
"recorded_at": "2026-11-07T15:17:52.644Z",
"evidence": null
}
]
}Where one fact came from
The label's reading is the one showing; the research result is kept below it.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8&key=fuel' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8&key=fuel", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/maintenance.asset.facts?asset_id=ast_01M6V9CSVCMZFAP6ZN5WANZ6M8&key=fuel HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT0KJWEFTEFKZ7EHAPFF
{
"facts": [
{
"attribute_id": "atr_01M6V9CSW5DANGBHC842K65T0A",
"key": "fuel",
"label": "Fuel",
"in_words": "natural gas",
"value": "natural gas",
"value_num": null,
"unit": null,
"origin": "label",
"origin_in_words": "From the label",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": true,
"recorded_at": "2026-11-07T15:17:52.646Z",
"evidence": {
"id": "evi_01M6V9CSW5YT2FPEC8HZ9MMN6H",
"file_id": null,
"url": null,
"said_by_person_id": null,
"locator": "rating plate",
"excerpt": "NATURAL GAS"
}
},
{
"attribute_id": "atr_01M6V9CSW490A53PGQKYRG7RBM",
"key": "fuel",
"label": "Fuel",
"in_words": "natural gas",
"value": "natural gas",
"value_num": null,
"unit": null,
"origin": "research",
"origin_in_words": "From the manual or maker",
"source": "asset",
"owner_id": "ast_01M6V9CSVCMZFAP6ZN5WANZ6M8",
"current": true,
"shown": false,
"recorded_at": "2026-11-07T15:17:52.644Z",
"evidence": null
}
]
}For Rigel#
Rigel's tool for this query is maintenance_asset_facts. Rigel runs this on its own, then says what it did. The agent guide has the rest.