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#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
store_idquerystringoptional | Show the list in this store's order. |
Response#
200 The answer.
| Field | Description |
|---|---|
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.namestringrequired | No 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.
| 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.
Read the shopping list
Grouped by category.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get' \
-H "Cookie: rigel_session=$RIGEL_SESSION"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();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>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.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01M6V9CT6QQBTTA6DBQXS60NCD' \
-H "Cookie: rigel_session=$RIGEL_SESSION"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();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>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
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/shopping.list.get?store_id=sto_01JC0000000000000000000000' \
-H "Cookie: rigel_session=$RIGEL_SESSION"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();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>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.