Skip to content
Rigel docs
Open Rigel

The shopping list

shopping.list.get

GET/api/v1/households/{household_id}/queries/shopping.list.get

  • Query
  • Rigel runs it

What we need: the unchecked items, plus items checked off at this store on the current trip. Without a store, grouped by category. With a store, grouped by its aisles in walking order, then items with no aisle by category, then items the store doesn't carry. Fails with store_not_found for an unknown store.

Parameters#

The shopping list: parameters
FieldDescription
household_idpathstringrequired

The household's ID.

store_idquerystringoptional

Show the list in this store's order.

Response#

200 The answer.

The shopping list: response fields
FieldDescription
storeobject or nullrequired

The store the list is for, or null for the plain list.

store.idstringrequired

A store ID, such as sto_01JC0000000000000000000000.

store.namestringrequiredNo description.
store.is_onlinebooleanrequired

Whether it is an online store.

sectionsarray of objectsrequired

Without a store: categories in the household's category order, then Other. With a store: its aisles in walking order, then items with no aisle by category. Empty sections are left out.

sections[].titlestringrequired

The aisle label, the category, or "Other" for items with no category.

sections[].aisle_idstring or nullrequired

The aisle, for an aisle section; null for a category section.

sections[].categorystring or nullrequired

The category, for a category section; null for an aisle or for Other.

sections[].category_idstring or nullrequired

The category's ID, for a category section.

sections[].entriesarray of objectsrequired

The items, by product name.

sections[].entries[].item_idstringrequired

The list item's ID.

sections[].entries[].product_idstringrequired

A product ID, such as prd_01JC0000000000000000000000.

sections[].entries[].namestringrequired

The product's name.

sections[].entries[].categorystring or nullrequired

The product's category, such as Dairy or Produce, if it has one.

sections[].entries[].category_idstring or nullrequired

The category's ID, from inventory's product categories.

sections[].entries[].shopping_notestring or nullrequired

The product's standing note for shoppers, such as a preferred brand.

sections[].entries[].quantitynumber or nullrequired

How many, when said.

sections[].entries[].unitone of: mg, g, kg, oz, lb, ml, l, tsp, tbsp, fl_oz, cup, pint, quart, gallon, pinch, dash, clove, slice, stick, sprig, head, bunch, stalk, can, jar, bottle, box, bag, package, carton, roll, null or nullrequired

The unit of the quantity; null for a plain count.

sections[].entries[].amountstring or nullrequired

The amount for people, such as "2 lb" or "3"; null without a quantity.

sections[].entries[].notestring or nullrequired

What was written for this item, such as "plain" or "the big bag".

sections[].entries[].for_personobject or nullrequired

Who it's for, when it's for someone.

sections[].entries[].for_person.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

sections[].entries[].for_person.namestringrequired

What the family calls them.

sections[].entries[].mealsarray of objectsrequired

The planned meals it's for, soonest first; empty when it isn't for a planned meal.

sections[].entries[].meals[].meal_idstringrequired

A meal ID, such as mel_01JC0000000000000000000000.

sections[].entries[].meals[].datestringrequired

The meal's date, YYYY-MM-DD.

sections[].entries[].meals[].slotone of: breakfast, lunch, dinner, snackrequired

Which meal of the day.

sections[].entries[].recipesarray of objectsrequired

The recipes it was added for, by title; empty when none.

sections[].entries[].recipes[].recipe_idstringrequired

A recipe ID, such as rcp_01JC0000000000000000000000.

sections[].entries[].recipes[].titlestringrequired

The recipe's title.

sections[].entries[].added_byobject or nullrequired

Who put it on the list.

sections[].entries[].added_by.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

sections[].entries[].added_by.namestringrequired

What the family calls them.

sections[].entries[].checked_atstring (date-time) or nullrequired

When it was checked off, or null while still to get.

sections[].entries[].checked_byobject or nullrequired

Who checked it off.

sections[].entries[].checked_by.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

sections[].entries[].checked_by.namestringrequired

What the family calls them.

sections[].entries[].is_carriedbooleanrequired

Whether the selected store carries it. Always true without a store.

sections[].entries[].placementobject or nullrequired

Where it is at the selected store; null without a store or when no aisle fits.

sections[].entries[].placement.aisle_idstringrequired

The aisle it is in.

sections[].entries[].placement.sourceone of: person, rigel, guessrequired

person: someone picked it. rigel: Rigel placed it. guess: worked out from the aisle signs just now, not stored.

sections[].entries[].updated_atstring (date-time)required

When the item last changed.

not_carriedarray of objectsrequired

Items the selected store doesn't carry. Empty without a store.

not_carried[].item_idstringrequired

The list item's ID.

not_carried[].product_idstringrequired

A product ID, such as prd_01JC0000000000000000000000.

not_carried[].namestringrequired

The product's name.

not_carried[].categorystring or nullrequired

The product's category, such as Dairy or Produce, if it has one.

not_carried[].category_idstring or nullrequired

The category's ID, from inventory's product categories.

not_carried[].shopping_notestring or nullrequired

The product's standing note for shoppers, such as a preferred brand.

not_carried[].quantitynumber or nullrequired

How many, when said.

not_carried[].unitone of: mg, g, kg, oz, lb, ml, l, tsp, tbsp, fl_oz, cup, pint, quart, gallon, pinch, dash, clove, slice, stick, sprig, head, bunch, stalk, can, jar, bottle, box, bag, package, carton, roll, null or nullrequired

The unit of the quantity; null for a plain count.

not_carried[].amountstring or nullrequired

The amount for people, such as "2 lb" or "3"; null without a quantity.

not_carried[].notestring or nullrequired

What was written for this item, such as "plain" or "the big bag".

not_carried[].for_personobject or nullrequired

Who it's for, when it's for someone.

not_carried[].for_person.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

not_carried[].for_person.namestringrequired

What the family calls them.

not_carried[].mealsarray of objectsrequired

The planned meals it's for, soonest first; empty when it isn't for a planned meal.

not_carried[].meals[].meal_idstringrequired

A meal ID, such as mel_01JC0000000000000000000000.

not_carried[].meals[].datestringrequired

The meal's date, YYYY-MM-DD.

not_carried[].meals[].slotone of: breakfast, lunch, dinner, snackrequired

Which meal of the day.

not_carried[].recipesarray of objectsrequired

The recipes it was added for, by title; empty when none.

not_carried[].recipes[].recipe_idstringrequired

A recipe ID, such as rcp_01JC0000000000000000000000.

not_carried[].recipes[].titlestringrequired

The recipe's title.

not_carried[].added_byobject or nullrequired

Who put it on the list.

not_carried[].added_by.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

not_carried[].added_by.namestringrequired

What the family calls them.

not_carried[].checked_atstring (date-time) or nullrequired

When it was checked off, or null while still to get.

not_carried[].checked_byobject or nullrequired

Who checked it off.

not_carried[].checked_by.idstringrequired

A person ID, such as per_01JC0000000000000000000000.

not_carried[].checked_by.namestringrequired

What the family calls them.

not_carried[].is_carriedbooleanrequired

Whether the selected store carries it. Always true without a store.

not_carried[].placementobject or nullrequired

Where it is at the selected store; null without a store or when no aisle fits.

not_carried[].placement.aisle_idstringrequired

The aisle it is in.

not_carried[].placement.sourceone of: person, rigel, guessrequired

person: someone picked it. rigel: Rigel placed it. guess: worked out from the aisle signs just now, not stored.

not_carried[].updated_atstring (date-time)required

When the item last changed.

countsobjectrequired
counts.totalintegerrequired

Items shown, checked or not.

counts.checkedintegerrequired

How many of them are checked.

counts.to_getintegerrequired

How many are still to get.

elsewherearray of objectsrequired

Items already checked off at other stores, so shoppers see "Ada got 3 things at Trader Joe's". With a store, those checked off with no store are included.

elsewhere[].store_idstring or nullrequired

The store they were checked off at; null for checked off with no store.

elsewhere[].store_namestring or nullrequired

That store's name.

elsewhere[].countintegerrequired

How many items.

elsewhere[].checked_byarray of stringsrequired

Names of who checked them off.

Errors#

Every error has the same envelope: error.code, error.message, error.details, error.recovery and error.request_id.

The shopping list: 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.

Read the shopping list

Grouped by category.

Request, curl
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get' \
  -H "Cookie: rigel_session=$RIGEL_SESSION"
Request, TypeScript
const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get", {
  headers: {
    Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
  },
});
const data = await response.json();
Request, HTTP
GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get 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_01M6V9CT814WZA4RK3WK85D0RS

{
  "store": null,
  "sections": [
    {
      "title": "Dairy",
      "aisle_id": null,
      "category": "Dairy",
      "category_id": "pcg_01M6V9CSAY46AA0R1RMXHDQEQ5",
      "entries": [
        {
          "item_id": "shi_01M6V9CT7DFWJ9QA55E2RH41NS",
          "product_id": "prd_01M6V9CSAWSAMCWTBQ2M7F80H9",
          "name": "Milk",
          "category": "Dairy",
          "category_id": "pcg_01M6V9CSAY46AA0R1RMXHDQEQ5",
          "shopping_note": null,
          "quantity": 2,
          "unit": "gallon",
          "amount": "2 gallons",
          "note": "Whole, for Theo.",
          "for_person": null,
          "meals": [],
          "recipes": [],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.007Z"
        }
      ]
    },
    {
      "title": "Other",
      "aisle_id": null,
      "category": null,
      "category_id": null,
      "entries": [
        {
          "item_id": "shi_01M6V9CT7NDTGH8Q6235X75TRQ",
          "product_id": "prd_01M6V9CT7NYAYFKM62G2MNMNYY",
          "name": "Baby spinach",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 1,
          "unit": "bag",
          "amount": "1 bag",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        },
        {
          "item_id": "shi_01M6V9CT7J9XGMH0J24WZ258T7",
          "product_id": "prd_01M6V9CT7JAMWHZXH2HJ4HMB3Y",
          "name": "Crushed tomatoes",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 2,
          "unit": "can",
          "amount": "2 cans",
          "note": "Whole peeled are fine too.",
          "for_person": null,
          "meals": [
            {
              "meal_id": "mel_01M6V9CSFSFH4859KG4NM47HF2",
              "date": "2026-11-09",
              "slot": "dinner"
            }
          ],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.021Z"
        },
        {
          "item_id": "shi_01M6V9CT7NNVHTKA72V67H9E98",
          "product_id": "prd_01M6V9CSWCK03ABGA7BSJA03Q1",
          "name": "Furnace filter 16x25x1",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 1,
          "unit": "package",
          "amount": "1 package",
          "note": "A 4-pack. The filter is due soon.",
          "for_person": null,
          "meals": [],
          "recipes": [],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        },
        {
          "item_id": "shi_01M6V9CT7NV33ZA862550Z1QRH",
          "product_id": "prd_01M6V9CT7NMP3FQ56224YCHPFJ",
          "name": "Vegetable broth",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 1,
          "unit": "carton",
          "amount": "1 carton",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        },
        {
          "item_id": "shi_01M6V9CT7NJAFAZA624X5HJFE7",
          "product_id": "prd_01M6V9CT7NQ4N22J62H1W345SA",
          "name": "White beans",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 2,
          "unit": "can",
          "amount": "2 cans",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        },
        {
          "item_id": "shi_01M6V9CT7GG3ZTVWXX33PWZ46G",
          "product_id": "prd_01M6V9CSB0DQFW5YBZYYMJ0A77",
          "name": "Yogurt",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": null,
          "unit": null,
          "amount": null,
          "note": "Plain, the big tub.",
          "for_person": {
            "id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
            "name": "Nia"
          },
          "meals": [],
          "recipes": [],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.009Z"
        }
      ]
    }
  ],
  "not_carried": [],
  "counts": {
    "total": 7,
    "checked": 0,
    "to_get": 7
  },
  "elsewhere": []
}

Read the list for one store

In the store's walking order, then items with no aisle, then what the store doesn't carry.

Request, curl
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD' \
  -H "Cookie: rigel_session=$RIGEL_SESSION"
Request, TypeScript
const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD", {
  headers: {
    Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
  },
});
const data = await response.json();
Request, HTTP
GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD 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_01M6V9CT874KD49MA5J9ADHN3J

{
  "store": {
    "id": "sto_01M6V9CT6QQBTTA6DBQXS60NCD",
    "name": "Greenway Market",
    "is_online": false
  },
  "sections": [
    {
      "title": "Aisle 1",
      "aisle_id": "ais_01M6V9CT70D5FS0MQC395FBAYP",
      "category": null,
      "category_id": null,
      "entries": [
        {
          "item_id": "shi_01M6V9CT7NV33ZA862550Z1QRH",
          "product_id": "prd_01M6V9CT7NMP3FQ56224YCHPFJ",
          "name": "Vegetable broth",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 1,
          "unit": "carton",
          "amount": "1 carton",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": {
            "aisle_id": "ais_01M6V9CT70D5FS0MQC395FBAYP",
            "source": "guess"
          },
          "updated_at": "2026-11-07T15:17:53.013Z"
        }
      ]
    },
    {
      "title": "Dairy",
      "aisle_id": "ais_01M6V9CT70JNDJQ7QC41ERRZK6",
      "category": null,
      "category_id": null,
      "entries": [
        {
          "item_id": "shi_01M6V9CT7DFWJ9QA55E2RH41NS",
          "product_id": "prd_01M6V9CSAWSAMCWTBQ2M7F80H9",
          "name": "Milk",
          "category": "Dairy",
          "category_id": "pcg_01M6V9CSAY46AA0R1RMXHDQEQ5",
          "shopping_note": null,
          "quantity": 2,
          "unit": "gallon",
          "amount": "2 gallons",
          "note": "Whole, for Theo.",
          "for_person": null,
          "meals": [],
          "recipes": [],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": {
            "aisle_id": "ais_01M6V9CT70JNDJQ7QC41ERRZK6",
            "source": "person"
          },
          "updated_at": "2026-11-07T15:17:53.007Z"
        },
        {
          "item_id": "shi_01M6V9CT7GG3ZTVWXX33PWZ46G",
          "product_id": "prd_01M6V9CSB0DQFW5YBZYYMJ0A77",
          "name": "Yogurt",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": null,
          "unit": null,
          "amount": null,
          "note": "Plain, the big tub.",
          "for_person": {
            "id": "per_01M6V9CS79TMYHDAM7FTA9ZK3Z",
            "name": "Nia"
          },
          "meals": [],
          "recipes": [],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": {
            "aisle_id": "ais_01M6V9CT70JNDJQ7QC41ERRZK6",
            "source": "guess"
          },
          "updated_at": "2026-11-07T15:17:53.009Z"
        }
      ]
    },
    {
      "title": "Other",
      "aisle_id": null,
      "category": null,
      "category_id": null,
      "entries": [
        {
          "item_id": "shi_01M6V9CT7NDTGH8Q6235X75TRQ",
          "product_id": "prd_01M6V9CT7NYAYFKM62G2MNMNYY",
          "name": "Baby spinach",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 1,
          "unit": "bag",
          "amount": "1 bag",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        },
        {
          "item_id": "shi_01M6V9CT7J9XGMH0J24WZ258T7",
          "product_id": "prd_01M6V9CT7JAMWHZXH2HJ4HMB3Y",
          "name": "Crushed tomatoes",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 2,
          "unit": "can",
          "amount": "2 cans",
          "note": "Whole peeled are fine too.",
          "for_person": null,
          "meals": [
            {
              "meal_id": "mel_01M6V9CSFSFH4859KG4NM47HF2",
              "date": "2026-11-09",
              "slot": "dinner"
            }
          ],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.021Z"
        },
        {
          "item_id": "shi_01M6V9CT7NJAFAZA624X5HJFE7",
          "product_id": "prd_01M6V9CT7NQ4N22J62H1W345SA",
          "name": "White beans",
          "category": null,
          "category_id": null,
          "shopping_note": null,
          "quantity": 2,
          "unit": "can",
          "amount": "2 cans",
          "note": null,
          "for_person": null,
          "meals": [],
          "recipes": [
            {
              "recipe_id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
              "title": "Tomato and white bean orzo"
            }
          ],
          "added_by": {
            "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
            "name": "Ada Okafor"
          },
          "checked_at": null,
          "checked_by": null,
          "is_carried": true,
          "placement": null,
          "updated_at": "2026-11-07T15:17:53.013Z"
        }
      ]
    }
  ],
  "not_carried": [
    {
      "item_id": "shi_01M6V9CT7NNVHTKA72V67H9E98",
      "product_id": "prd_01M6V9CSWCK03ABGA7BSJA03Q1",
      "name": "Furnace filter 16x25x1",
      "category": null,
      "category_id": null,
      "shopping_note": null,
      "quantity": 1,
      "unit": "package",
      "amount": "1 package",
      "note": "A 4-pack. The filter is due soon.",
      "for_person": null,
      "meals": [],
      "recipes": [],
      "added_by": {
        "id": "per_01M6V9CS6RX26JK5KVYGRN22D2",
        "name": "Ada Okafor"
      },
      "checked_at": null,
      "checked_by": null,
      "is_carried": false,
      "placement": null,
      "updated_at": "2026-11-07T15:17:53.013Z"
    }
  ],
  "counts": {
    "total": 7,
    "checked": 0,
    "to_get": 7
  },
  "elsewhere": []
}

Read the list for a store that isn't there

Request, curl
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01JC0000000000000000000000' \
  -H "Cookie: rigel_session=$RIGEL_SESSION"
Request, TypeScript
const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01JC0000000000000000000000", {
  headers: {
    Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
  },
});
const data = await response.json();
Request, HTTP
GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01JC0000000000000000000000 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>
Response, 404
HTTP/1.1 404 Not Found
Content-Type: application/json
X-Request-Id: req_01M6V9CT8CY4J50JNS8K49VJ7C

{
  "error": {
    "code": "store_not_found",
    "message": "That store isn't there any more.",
    "details": {
      "store_id": "sto_01JC0000000000000000000000"
    },
    "recovery": "Read the current state, then ask a question that fits it.",
    "request_id": "req_01M6V9CT8CY4J50JNS8K49VJ7C"
  }
}

For Rigel#

Rigel's tool for this query is shopping_list_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