Past shopping trips
shopping.trip.list
GET/api/v1/households/{household_id}/queries/shopping.trip.list
- Query
- Rigel runs it
Past trips and orders, newest first by date: store, date, who shopped, how many things, the total if known, and how long the shopping took.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
store_idquerystringoptional | Only trips to this store. |
limitqueryintegeroptional | How many to return, 1–200. Defaults to 20. |
cursorquerystringoptional | The next_cursor of the previous page, with the same filters. |
Response#
200 The answer.
| Field | Description |
|---|---|
itemsarray of objectsrequired | |
items[].idstringrequired | A shopping trip ID, such as trp_01JC0000000000000000000000. |
items[].storeobject or nullrequired | Where it was, or null when unknown or the store was removed. |
items[].store.idstringrequired | A store ID, such as sto_01JC0000000000000000000000. |
items[].store.namestringrequired | The store's name. |
items[].shopped_onstringrequired | The date, YYYY-MM-DD. |
items[].shopperobject or nullrequired | Who did the shopping, if known. |
items[].shopper.idstringrequired | A person ID, such as per_01JC0000000000000000000000. |
items[].shopper.namestringrequired | What the family calls them. |
items[].item_countintegerrequired | How many things it bought. |
items[].total_minorinteger or nullrequired | The receipt's total in minor units of the currency, if known. |
items[].currencystring or nullrequired | ISO currency code of the total and prices. |
items[].minutesinteger or nullrequired | Minutes from the first item checked off to the last; null when unknown. |
items[].finished_atstring (date-time) or nullrequired | When the trip was finished; null for one recorded from a receipt. |
items[].has_receiptbooleanrequired | Whether a receipt photo is attached. |
items[].order_numberstring or nullrequired | The store's order number, for an order; null for a trip shopped in person. |
items[].arrived_onstring or nullrequired | The day an order arrived, YYYY-MM-DD; null while it's on its way, and for a trip shopped in person. |
next_cursorstring or nullrequired | Send as cursor for the next page; null on the last page. |
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.
List the shopping trips
Newest first.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT91XV34JDM5ZYM0WCHT
{
"items": [
{
"id": "trp_01M6V9CT8JBJVJK865ZH4D2ZZD",
"store": {
"id": "sto_01M6V9CT6QQBTTA6DBQXS60NCD",
"name": "Greenway Market"
},
"shopped_on": "2026-11-07",
"shopper": {
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
"item_count": 3,
"total_minor": 1225,
"currency": "USD",
"minutes": 0,
"finished_at": "2026-11-07T15:17:53.042Z",
"has_receipt": false,
"order_number": null,
"arrived_on": null
},
{
"id": "trp_01M6V9CT8S4T83B9C9T7FBKE1N",
"store": {
"id": "sto_01M6V9CT6VGD5JCJFJBVAFR4B3",
"name": "Pantry Direct"
},
"shopped_on": "2026-11-04",
"shopper": {
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
"item_count": 2,
"total_minor": 3348,
"currency": "USD",
"minutes": null,
"finished_at": null,
"has_receipt": false,
"order_number": "PD-48213",
"arrived_on": "2026-11-06"
}
],
"next_cursor": null
}List the trips to one store
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT93Z7E8FJS20RQN08VZ
{
"items": [
{
"id": "trp_01M6V9CT8JBJVJK865ZH4D2ZZD",
"store": {
"id": "sto_01M6V9CT6QQBTTA6DBQXS60NCD",
"name": "Greenway Market"
},
"shopped_on": "2026-11-07",
"shopper": {
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
"item_count": 3,
"total_minor": 1225,
"currency": "USD",
"minutes": 0,
"finished_at": "2026-11-07T15:17:53.042Z",
"has_receipt": false,
"order_number": null,
"arrived_on": null
}
],
"next_cursor": null
}List the latest trip
next_cursor says there are more.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT94SGV3Z26270NDT2RA
{
"items": [
{
"id": "trp_01M6V9CT8JBJVJK865ZH4D2ZZD",
"store": {
"id": "sto_01M6V9CT6QQBTTA6DBQXS60NCD",
"name": "Greenway Market"
},
"shopped_on": "2026-11-07",
"shopper": {
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
"item_count": 3,
"total_minor": 1225,
"currency": "USD",
"minutes": 0,
"finished_at": "2026-11-07T15:17:53.042Z",
"has_receipt": false,
"order_number": null,
"arrived_on": null
}
],
"next_cursor": "2026-11-07.trp_01M6V9CT8JBJVJK865ZH4D2ZZD"
}List the trip before it
Send next_cursor back, with the same filters.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1&cursor=2026-11-07.trp_01M6V9CT8JBJVJK865ZH4D2ZZD' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1&cursor=2026-11-07.trp_01M6V9CT8JBJVJK865ZH4D2ZZD", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.trip.list?limit=1&cursor=2026-11-07.trp_01M6V9CT8JBJVJK865ZH4D2ZZD HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CT95NJQYF36AFCTF9Q8W
{
"items": [
{
"id": "trp_01M6V9CT8S4T83B9C9T7FBKE1N",
"store": {
"id": "sto_01M6V9CT6VGD5JCJFJBVAFR4B3",
"name": "Pantry Direct"
},
"shopped_on": "2026-11-04",
"shopper": {
"id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
"name": "Ada Okafor"
},
"item_count": 2,
"total_minor": 3348,
"currency": "USD",
"minutes": null,
"finished_at": null,
"has_receipt": false,
"order_number": "PD-48213",
"arrived_on": "2026-11-06"
}
],
"next_cursor": null
}For Rigel#
Rigel's tool for this query is shopping_trip_list. Rigel runs this on its own, then says what it did. The agent guide has the rest.