A whole recipe
recipes.recipe.get
GET/api/v1/households/{household_id}/queries/recipes.recipe.get
- Query
- Rigel runs it
The recipe with its ingredients and steps in order, step ingredient links, source fields, cooks and versions. Pass servings to see the amounts scaled to that many servings without changing the recipe.
Parameters#
| Field | Description |
|---|---|
household_idpathstringrequired | The household's ID. |
recipe_idquerystringrequired | A recipe ID, such as rcp_01JC0000000000000000000000. |
servingsqueryintegeroptional | Show amounts for this many servings, 1–1,000. Defaults to the recipe's own. |
Response#
200 The answer.
| Field | Description |
|---|---|
recipeobjectrequired | |
recipe.idstringrequired | A recipe ID, such as rcp_01JC0000000000000000000000. |
recipe.created_atstring (date-time)required | When the recipe was made. |
recipe.updated_atstring (date-time)required | When it last changed. |
recipe.titlestringrequired | The title, as written. |
recipe.summarystring or nullrequired | One or two sentences about it, or null. |
recipe.servingsintegerrequired | How many servings the stored amounts make. |
recipe.prep_minutesinteger or nullrequired | Hands-on preparation in minutes, or null. |
recipe.cook_minutesinteger or nullrequired | Cooking time in minutes, or null. |
recipe.total_minutesinteger or nullrequired | Prep plus cook minutes, or null when neither is known. |
recipe.notesstring or nullrequired | Kitchen notes on the whole recipe, or null. |
recipe.based_on_recipe_idstring or nullrequired | The recipe this is a version of, or null. |
recipe.source_urlstring or nullrequired | Where it was imported from, or null. |
recipe.source_titlestring or nullrequired | The original's title, or null. |
recipe.source_sitestring or nullrequired | The site or book it came from, or null. |
recipe.source_authorstring or nullrequired | The author, or null. |
recipe.icon_file_idstring or nullrequired | The small icon, or null if there isn't one yet. |
recipe.card_file_idstring or nullrequired | The illustrated card image, or null if there isn't one yet. |
recipe.import_stateone of: none, importing, imported, failedrequired | none (made here), importing (a URL import is running), imported, or failed. |
recipe.import_errorstring or nullrequired | Why a failed import failed, in words for people, or null. |
recipe.shown_servingsintegerrequired | The servings the ingredient amounts are shown for. |
recipe.ingredientsarray of objectsrequired | In order, scaled to shown_servings. |
recipe.ingredients[].idstringrequired | A recipe ingredient ID, such as rci_01JC0000000000000000000000. |
recipe.ingredients[].sectionstring or nullrequired | The group heading, or null. |
recipe.ingredients[].positionintegerrequired | Order across the whole recipe, from 0. |
recipe.ingredients[].product_idstring or nullrequired | The product it is linked to, or null. |
recipe.ingredients[].namestringrequired | The ingredient as written. |
recipe.ingredients[].quantitynumber or nullrequired | The amount at shown_servings, or null for 'to taste'. |
recipe.ingredients[].quantity_maxnumber or nullrequired | The top of a range at shown_servings, or null. |
recipe.ingredients[].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, or null for a plain count. |
recipe.ingredients[].preparationstring or nullrequired | How it is prepared, or null. |
recipe.ingredients[].is_optionalbooleanrequired | Whether it can be left out. |
recipe.ingredients[].amountstring or nullrequired | The amount for people, such as "1½ cups", or null with no quantity. |
recipe.stepsarray of objectsrequired | In order. |
recipe.steps[].idstringrequired | A recipe step ID, such as rcs_01JC0000000000000000000000. |
recipe.steps[].sectionstring or nullrequired | The group heading, or null. |
recipe.steps[].positionintegerrequired | Order across the whole recipe, from 0. |
recipe.steps[].textstringrequired | The instruction, as written. |
recipe.steps[].timer_secondsinteger or nullrequired | The timer this step offers, in seconds, or null. |
recipe.steps[].notestring or nullrequired | A kitchen note on this step, or null. |
recipe.steps[].ingredient_idsarray of stringsrequired | The ingredients this step uses. |
recipe.cooksarray of objectsrequired | Every time it was cooked, newest first. |
recipe.cooks[].idstringrequired | A recipe cook ID, such as rck_01JC0000000000000000000000. |
recipe.cooks[].cooked_onstring (date)required | The day it was cooked. |
recipe.cooks[].servingsintegerrequired | How many servings were made. |
recipe.cooks[].notestring or nullrequired | How it went, or null. |
recipe.cooks[].cooked_by_person_idstring or nullrequired | Who cooked it, or null if unknown. |
recipe.cooks[].cooked_bystring or nullrequired | Their name, or null if unknown. |
recipe.cooks[].meal_idstring or nullrequired | The planned meal it was cooked for, or null. |
recipe.based_onobject or nullrequired | The recipe this is a version of, or null. |
recipe.based_on.idstringrequired | A recipe ID, such as rcp_01JC0000000000000000000000. |
recipe.based_on.titlestringrequired | Its title. |
recipe.versionsarray of objectsrequired | Recipes made from this one. |
recipe.versions[].idstringrequired | A recipe ID, such as rcp_01JC0000000000000000000000. |
recipe.versions[].titlestringrequired | Its title. |
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.
Open a recipe
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSDJQ4QJRP1FMJ2EAD9S
{
"recipe": {
"id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
"created_at": "2026-11-07T15:17:52.168Z",
"updated_at": "2026-11-07T15:17:52.168Z",
"title": "Tomato and white bean orzo",
"summary": "One pot, 30 minutes. Good the next day too.",
"servings": 4,
"prep_minutes": 10,
"cook_minutes": 20,
"total_minutes": 30,
"notes": null,
"based_on_recipe_id": null,
"source_url": null,
"source_title": null,
"source_site": null,
"source_author": null,
"icon_file_id": null,
"card_file_id": null,
"import_state": "none",
"import_error": null,
"shown_servings": 4,
"ingredients": [
{
"id": "rci_01M6V9CSD8MJZZDY9C256CQPD0",
"section": null,
"position": 0,
"product_id": "prd_01M6V9CSAT6M58YWZ1H4DFY9K2",
"name": "olive oil",
"quantity": 2,
"quantity_max": null,
"unit": "tbsp",
"preparation": null,
"is_optional": false,
"amount": "2 tbsp"
},
{
"id": "rci_01M6V9CSD8HFZX76ACQ7929C3Z",
"section": null,
"position": 1,
"product_id": null,
"name": "garlic",
"quantity": 3,
"quantity_max": 4,
"unit": "clove",
"preparation": "minced",
"is_optional": false,
"amount": "3–4 cloves"
},
{
"id": "rci_01M6V9CSD8J6BVN3AC4YDGRFCN",
"section": null,
"position": 2,
"product_id": "prd_01M6V9CSAQDSZHDQNXHXRCDA8Z",
"name": "orzo",
"quantity": 1,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": false,
"amount": "1 cup"
},
{
"id": "rci_01M6V9CSD8Q0HKRAACH243A5QR",
"section": null,
"position": 3,
"product_id": null,
"name": "crushed tomatoes",
"quantity": 1,
"quantity_max": null,
"unit": "can",
"preparation": null,
"is_optional": false,
"amount": "1 can"
},
{
"id": "rci_01M6V9CSD8GKH358ACE12HS4ES",
"section": null,
"position": 4,
"product_id": null,
"name": "white beans",
"quantity": 1,
"quantity_max": null,
"unit": "can",
"preparation": "drained and rinsed",
"is_optional": false,
"amount": "1 can"
},
{
"id": "rci_01M6V9CSD8DPC2ZFAC3657BTP5",
"section": null,
"position": 5,
"product_id": null,
"name": "vegetable broth",
"quantity": 2,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": false,
"amount": "2 cups"
},
{
"id": "rci_01M6V9CSD8Y6T0ADACG3WMTNWC",
"section": null,
"position": 6,
"product_id": null,
"name": "baby spinach",
"quantity": 2,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": true,
"amount": "2 cups"
}
],
"steps": [
{
"id": "rcs_01M6V9CSD83SCWCMACXFJ7CBK6",
"section": null,
"position": 0,
"text": "Warm the oil in a wide pot. Cook the garlic for 1 minute.",
"timer_seconds": 60,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8MJZZDY9C256CQPD0",
"rci_01M6V9CSD8HFZX76ACQ7929C3Z"
]
},
{
"id": "rcs_01M6V9CSD8B7WBT18BW4WS3FAY",
"section": null,
"position": 1,
"text": "Stir in the orzo, tomatoes and broth. Simmer until the orzo is tender, stirring now and then.",
"timer_seconds": 600,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8J6BVN3AC4YDGRFCN",
"rci_01M6V9CSD8Q0HKRAACH243A5QR",
"rci_01M6V9CSD8DPC2ZFAC3657BTP5"
]
},
{
"id": "rcs_01M6V9CSD87PWCHB8B8VQY5XHE",
"section": null,
"position": 2,
"text": "Add the beans, and the spinach if you have it. Cook until the spinach wilts.",
"timer_seconds": 180,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8GKH358ACE12HS4ES",
"rci_01M6V9CSD8Y6T0ADACG3WMTNWC"
]
}
],
"cooks": [],
"based_on": null,
"versions": []
}
}Open a recipe for more people
servings scales the amounts for this answer only; the recipe stays as written.
curl 'https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ&servings=8' \
-H "Cookie: rigel_session=$RIGEL_SESSION"const response = await fetch("https://rigel.house/api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ&servings=8", {
headers: {
Cookie: `rigel_session=${process.env.RIGEL_SESSION}`,
},
});
const data = await response.json();GET /api/v1/households/hh_01M6V9CS6GGVFCY7NAS8ZTQV95/queries/recipes.recipe.get?recipe_id=rcp_01M6V9CSD8VZYF11AC568Y7QPZ&servings=8 HTTP/1.1
Host: rigel.house
Cookie: rigel_session=<your session>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_01M6V9CSDQY9BJX6NYASQ3J692
{
"recipe": {
"id": "rcp_01M6V9CSD8VZYF11AC568Y7QPZ",
"created_at": "2026-11-07T15:17:52.168Z",
"updated_at": "2026-11-07T15:17:52.168Z",
"title": "Tomato and white bean orzo",
"summary": "One pot, 30 minutes. Good the next day too.",
"servings": 4,
"prep_minutes": 10,
"cook_minutes": 20,
"total_minutes": 30,
"notes": null,
"based_on_recipe_id": null,
"source_url": null,
"source_title": null,
"source_site": null,
"source_author": null,
"icon_file_id": null,
"card_file_id": null,
"import_state": "none",
"import_error": null,
"shown_servings": 8,
"ingredients": [
{
"id": "rci_01M6V9CSD8MJZZDY9C256CQPD0",
"section": null,
"position": 0,
"product_id": "prd_01M6V9CSAT6M58YWZ1H4DFY9K2",
"name": "olive oil",
"quantity": 4,
"quantity_max": null,
"unit": "tbsp",
"preparation": null,
"is_optional": false,
"amount": "4 tbsp"
},
{
"id": "rci_01M6V9CSD8HFZX76ACQ7929C3Z",
"section": null,
"position": 1,
"product_id": null,
"name": "garlic",
"quantity": 6,
"quantity_max": 8,
"unit": "clove",
"preparation": "minced",
"is_optional": false,
"amount": "6–8 cloves"
},
{
"id": "rci_01M6V9CSD8J6BVN3AC4YDGRFCN",
"section": null,
"position": 2,
"product_id": "prd_01M6V9CSAQDSZHDQNXHXRCDA8Z",
"name": "orzo",
"quantity": 2,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": false,
"amount": "2 cups"
},
{
"id": "rci_01M6V9CSD8Q0HKRAACH243A5QR",
"section": null,
"position": 3,
"product_id": null,
"name": "crushed tomatoes",
"quantity": 2,
"quantity_max": null,
"unit": "can",
"preparation": null,
"is_optional": false,
"amount": "2 cans"
},
{
"id": "rci_01M6V9CSD8GKH358ACE12HS4ES",
"section": null,
"position": 4,
"product_id": null,
"name": "white beans",
"quantity": 2,
"quantity_max": null,
"unit": "can",
"preparation": "drained and rinsed",
"is_optional": false,
"amount": "2 cans"
},
{
"id": "rci_01M6V9CSD8DPC2ZFAC3657BTP5",
"section": null,
"position": 5,
"product_id": null,
"name": "vegetable broth",
"quantity": 4,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": false,
"amount": "4 cups"
},
{
"id": "rci_01M6V9CSD8Y6T0ADACG3WMTNWC",
"section": null,
"position": 6,
"product_id": null,
"name": "baby spinach",
"quantity": 4,
"quantity_max": null,
"unit": "cup",
"preparation": null,
"is_optional": true,
"amount": "4 cups"
}
],
"steps": [
{
"id": "rcs_01M6V9CSD83SCWCMACXFJ7CBK6",
"section": null,
"position": 0,
"text": "Warm the oil in a wide pot. Cook the garlic for 1 minute.",
"timer_seconds": 60,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8MJZZDY9C256CQPD0",
"rci_01M6V9CSD8HFZX76ACQ7929C3Z"
]
},
{
"id": "rcs_01M6V9CSD8B7WBT18BW4WS3FAY",
"section": null,
"position": 1,
"text": "Stir in the orzo, tomatoes and broth. Simmer until the orzo is tender, stirring now and then.",
"timer_seconds": 600,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8J6BVN3AC4YDGRFCN",
"rci_01M6V9CSD8Q0HKRAACH243A5QR",
"rci_01M6V9CSD8DPC2ZFAC3657BTP5"
]
},
{
"id": "rcs_01M6V9CSD87PWCHB8B8VQY5XHE",
"section": null,
"position": 2,
"text": "Add the beans, and the spinach if you have it. Cook until the spinach wilts.",
"timer_seconds": 180,
"note": null,
"ingredient_ids": [
"rci_01M6V9CSD8GKH358ACE12HS4ES",
"rci_01M6V9CSD8Y6T0ADACG3WMTNWC"
]
}
],
"cooks": [],
"based_on": null,
"versions": []
}
}For Rigel#
Rigel's tool for this query is recipes_recipe_get. Rigel runs this on its own, then says what it did. The agent guide has the rest.