GET
/meal-plan
Get the meal plan for the current (or specified) week
Example request
curl -X GET https://thesaucery.nz/api/v1/meal-plan \ -H "Authorization: Bearer sc_key_..."
Response 200 · OK
| Field | Type | Notes |
|---|---|---|
| data | object | |
| data.id | string | |
| data.family_id | any | |
| data.week_start_date | string | |
| data.entries | object[]optional | |
| data.entries[].id | string | |
| data.entries[].date | string | |
| data.entries[].meal_type | string | |
| data.entries[].recipe | objectoptional | |
| data.entries[].recipe.id | string | |
| data.entries[].recipe.family_id | any | |
| data.entries[].recipe.web_url | string | |
| data.entries[].recipe.title | string | |
| data.entries[].recipe.description | string or null | |
| data.entries[].recipe.cuisine | string or null | |
| data.entries[].recipe.tags | any | |
| data.entries[].recipe.source_type | string | |
| data.entries[].recipe.source_url | string or null | |
| data.entries[].recipe.source_name | string or null | |
| data.entries[].recipe.prep_time_minutes | integer or null | |
| data.entries[].recipe.cook_time_minutes | integer or null | |
| data.entries[].recipe.total_time_minutes | integer or null | |
| data.entries[].recipe.servings | integer | |
| data.entries[].recipe.photos | string[] | |
| data.entries[].recipe.is_stylizing_hero | boolean | |
| data.entries[].recipe.sketch_url | string or null | |
| data.entries[].recipe.is_sketching | boolean | |
| data.entries[].recipe.notes | string or null | |
| data.entries[].recipe.image_prompt | string or null | |
| data.entries[].recipe.visibility | string | |
| data.entries[].recipe.is_favourite | boolean | |
| data.entries[].recipe.needs_review | boolean | |
| data.entries[].recipe.ingredients | object[]optional | |
| data.entries[].recipe.steps | object[]optional | |
| data.entries[].recipe.last_cooked_at | stringoptional | |
| data.entries[].recipe.times_cooked | integeroptional | |
| data.entries[].recipe.comments | object[]optional | |
| data.entries[].recipe.created_by | objectoptional | |
| data.entries[].recipe.lab_items | object[]optional | |
| data.entries[].recipe.created_at | string or null | |
| data.entries[].recipe.updated_at | string or null | |
| data.entries[].recipe.is_starter True for one of the sample recipes every new family's book starts with, which the family did not add. Always present. | boolean | True for one of the sample recipes every new family's book starts with, which the family did not add. Always present. |
| data.entries[].recipe.byline Where the recipe came from when it is not the family's own, ready to show under the title, e.g. "From The Saucery". Null for the family's own recipes. | string or null | Where the recipe came from when it is not the family's own, ready to show under the title, e.g. "From The Saucery". Null for the family's own recipes. |
| data.entries[].recipe.scales True when a planned meal of this recipe is cooked for the household and starts at the family's default servings. False for a batch, such as a cake or a loaf, which is planned at the recipe's own servings. Always present. | boolean | True when a planned meal of this recipe is cooked for the household and starts at the family's default servings. False for a batch, such as a cake or a loaf, which is planned at the recipe's own servings. Always present. |
| data.entries[].recipe.shared_by_name The name of the person who sent the link this recipe was saved from, e.g. "Grace". Null for a recipe that was not saved from a share link. Separate from source_name, which says where the recipe originally came from. | string or null | The name of the person who sent the link this recipe was saved from, e.g. "Grace". Null for a recipe that was not saved from a share link. Separate from source_name, which says where the recipe originally came from. |
| data.entries[].recipe.grocery_specials | string[] | |
| data.entries[].recipe_id | string | |
| data.entries[].recipe_link_source 'user' if someone picked the recipe, 'auto' if we inferred it from the label they typed. Clients can use it to offer an "not this one?" escape hatch on a link they didn't ask for; the label stays the display string either way. | string or null | 'user' if someone picked the recipe, 'auto' if we inferred it from the label they typed. Clients can use it to offer an "not this one?" escape hatch on a link they didn't ask for; the label stays the display string either way. |
| data.entries[].label | string or null | |
| data.entries[].servings | integer or null | |
| data.entries[].postponed_from_entry_id Kept for clients shipped before the day a postponed meal left was freed. Always null now — read postponed_from_date. | string | Kept for clients shipped before the day a postponed meal left was freed. Always null now — read postponed_from_date. |
| data.entries[].postponed_from_date The day this meal was first planned on, if it was postponed from there. Later moves keep it, and it clears when the meal goes back to that day or a different meal takes its place. Its ingredients were bought for the original week, so it is deliberately absent from this week's shopping list. | string | The day this meal was first planned on, if it was postponed from there. Later moves keep it, and it clears when the meal goes back to that day or a different meal takes its place. Its ingredients were bought for the original week, so it is deliberately absent from this week's shopping list. |
| data.entries[].ingredients_already_purchased | boolean | |
| data.entries[].cooked_at | string | |
| data.entries[].cook Who is cooking this meal, or null when nobody has been named. It moves with the meal: a move, swap or postpone takes it along, and a different meal on the same night keeps it. Set it with PUT /meal-plan/entry/{id}/cook. `user_id` is the member's user id (equal to `id`) when the cook is in the family, or null for someone without the app, whose `id` is one of the family's `cooks`. `pending` is true while that person is invited and has not joined. | any | Who is cooking this meal, or null when nobody has been named. It moves with the meal: a move, swap or postpone takes it along, and a different meal on the same night keeps it. Set it with PUT /meal-plan/entry/{id}/cook. `user_id` is the member's user id (equal to `id`) when the cook is in the family, or null for someone without the app, whose `id` is one of the family's `cooks`. `pending` is true while that person is invited and has not joined. |
| data.entries[].cook_user_id The cook's user id (the same id as the family's members), or null, including when the cook is someone without the app. | string or null | The cook's user id (the same id as the family's members), or null, including when the cook is someone without the app. |
| data.created_at | string or null | |
| data.updated_at | string or null |