Plans

The week: plan it, read it, swap a dinner, lock a day.19 operations

Headers on every response

Every response on this page carries these headers.
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).

Operations

POST/api/v1/households/{householdId}/plans/generate

Put the week in the planning queue and answer with the run

Adults only; a Junior member gets 403. Answers 202 with the run's id (ADR-289): the week is built by a background job, GET plans/runs/{jobId} says where the run stands, and the phone is told by push when the week lands (#200). Costs credits unless the cookbook or the starter library answers every day — GET cost-estimate says the price first. A second press while the run is going joins it and gets the same run id back; 409 with code week_planning_in_progress only for two presses in the very same instant (ADR-073). What the run itself can end in — rules that cannot all be met, a provider that never answered — is on the run's status, not here.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Request body

application/jsonRequiredGeneratePlanRequest

Responses

202Accepted
application/jsonPlanRunAccepted
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
409Conflict
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/generate" \
  -H "Content-Type: application/json" \
  -d '{"weekStart":"2026-09-07"}'

Example response

202application/json
{
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStart": "2026-09-07"
}
GET/api/v1/households/{householdId}/plans/runs/{jobId}

Say where a planning run stands, and why it ended if it ended badly

Any member — the week is the household's and so is the wait. status is queued, running, done or failed; queuePosition counts from one while the run waits, and counts the runs already in the model, because they are what it is waiting for. planId is the week the run settled, once it is done. failure carries the problem the run would have answered with while a request was still open — planning_conflict with its errors, for one (ADR-289).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
jobIdpathstring (uuid)Required—

Responses

200OK
application/jsonPlanRunStatusResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/runs/3fa85f64-5717-4562-b3fc-2c963f66afa6"

Example response

200application/json
{
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStart": "2026-09-07",
  "status": "Queued",
  "queuePosition": 0,
  "planId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "startedAt": "2026-09-07T16:30:00Z"
}
GET/api/v1/households/{householdId}/plans/cost-estimate

Estimate what planning the week would cost, with a day-by-day preflight

Reads only — nothing is generated or charged (#340). Answers the credits, what is left of the quota, whether the run would be admitted, and a preflight of what each day becomes if the run is pressed as it stands (#694, ADR-066). scope defaults to WholeWeek; allowGeneration overrides the household's cap on new dishes for this estimate only. lockedDates and excludedTitles are the sheet's «Låst» and «Ikke denne» (ADR-356 (#3244)), read exactly as the run's policy reads them; lockedDates absent means the plan's own locks. heldDishes («yyyy-MM-dd:Title») are the cookbook dishes the sheet already showed on days nobody touched, held there so re-pricing does not move them (ADR-366 (#3288)).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
weekStartquerystring (date)Required—
scopequeryReplanScope——
allowGenerationqueryinteger (int32)——
lockedDatesquerystring (date)[]——
excludedTitlesquerystring[]——
heldDishesquerystring[]——

Responses

200OK
application/jsonPlanCostEstimateResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/cost-estimate?weekStart=2026-09-07"

Example response

200application/json
{
  "credits": 0,
  "remaining": 0,
  "affordable": false,
  "daysToGenerate": 0,
  "usesStarterLibrary": false,
  "resetsAt": "2026-09-07T16:30:00Z",
  "suggestMoreCredits": 0,
  "affordableNewDishes": 0,
  "shortfall": 0
}
GET/api/v1/households/{householdId}/plans/overview

List which days carry a dinner, week by week, for a window of at most 92 days

Month-map data: each week's status, each day's entry type and dish name, and whether the week has a shopping list and when the trip was finished. from and to are both required and from must not be after to (#445), and the window may cover at most 92 days — a calendar read, not a page (#2977, ADR-292). The widest any client asks for is a month grid's six weeks.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
fromquerystring (date)Required—
toquerystring (date)Required—

Responses

200OK
application/jsonPlanOverviewResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/overview?from=2026-09-07&to=2026-09-07"

Example response

200application/json
{
  "weeks": [
    {
      "weekStart": "2026-09-07",
      "status": {},
      "days": [
        {}
      ],
      "hasShoppingList": false,
      "changedSinceShopped": 0
    }
  ]
}
GET/api/v1/households/{householdId}/plans/by-week/{weekStart}

Get the week's live plan

weekStart is the week's Monday. Superseded versions are never returned; 404 when the week has no plan.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
weekStartpathstring (date)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
400The request could not be read as the route needs it: a body that is not the documented shape (a required field left out, a null where none is allowed, a value too long for its field), a parameter that does not parse, or a NUL character anywhere (#3540, #3541, #3543). Code validation_failed or value_too_long.
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/by-week/2026-09-07"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
GET/api/v1/households/{householdId}/plans/by-week/{weekStart}/use-up

Read the use-up bundle for a week: what is running out after the planned use, and the fewest swaps that would use it.

weekStart is normalised to its Monday. Anchored at that Monday or today, whichever is later, while every deadline is measured from today (ADR-175): a week whose days are all past the food's life gets an empty bundle, and so does a week that is over. The bundle carries an id; apply or dismiss it through the home use-up endpoints. Read-only. A weekStart far outside the calendar a household lives in answers 400.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
weekStartpathstring (date)Required—

Responses

200OK
application/jsonHomeUseUpBundleQuestion
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/by-week/2026-09-07/use-up"

Example response

200application/json
{
  "bundleId": "string",
  "changes": [
    {
      "id": "string",
      "day": "2026-09-07",
      "kind": {},
      "recipeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "title": "string",
      "uses": [
        {}
      ],
      "handsBack": [
        {}
      ],
      "activeMinutes": 0,
      "shoppingDelta": 0
    }
  ],
  "coveredCount": 0,
  "urgentCount": 0,
  "notDinner": [
    {
      "foodKey": "string",
      "displayName": "string",
      "reason": {}
    }
  ]
}
POST/api/v1/households/{householdId}/plans/{planId}/activate

Make this plan the week's live plan

Adults only; a Junior member gets 403. Any other live plan for the same week is superseded first (#437). Safe to retry: activating the plan that is already active changes nothing and answers 200.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/activate"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/restore

Undo a replan: bring back the plan this one replaced

Adults only; a Junior member gets 403. The given plan is superseded and the week's previous plan is live again; the shopping list follows it back, but the credits the run spent are not refunded (#342). 409 with code plan_not_current when the week has been planned again since and this plan is no longer the week's — resync the page. 422 with code no_earlier_plan when this is the week's first plan.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
409Conflict
application/problem+jsonProblemDetails
422Unprocessable Entity
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Problem codes

The `code` in the problem body is what to branch on. `detail` is English, written for a log.

no_earlier_plan
— There is no earlier version of this week to go back to.
plan_not_current
— The week has been planned again since. Reload and try again.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/restore"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
PATCH/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}

Replace one day's dinner with another candidate, or make it a leftovers day

Adults only; a Junior member gets 403. Send exactly one of mealCandidateId (a candidate generated for the same date) or entryType "Leftovers" (#1691, ADR-136). Regenerates the week's shopping list if one exists. A superseded plan answers 400 — refresh to the current week.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Request body

application/jsonRequiredReplacePlanEntryRequest

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X PATCH \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Content-Type: application/json" \
  -d '{}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/feedback

Say what was wrong with a planned dinner and let Bryti act on it

Adults only; a Junior member gets 403. «Si fra om denne retten» (#740, ADR-075): depending on the reason Bryti swaps the day, replans the open days, offers a variant, excludes the dish, or only notes it when the day has passed or its outcome is recorded. Two of the reasons can end in a generation, so the call may cost credits and runs under the planner's time budget (502/504 as for planning the week). The answer carries the week and a typed result the client uses for «Angre».

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Request body

application/jsonRequiredPlanEntryFeedbackRequest

Responses

200OK
application/jsonPlanEntryFeedbackResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
422Unprocessable Entity
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.
502Bad Gateway
application/problem+jsonProblemDetails
504Gateway Timeout
application/problem+jsonProblemDetails

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/feedback" \
  -H "Content-Type: application/json" \
  -d '{"reason":"RuleBroken"}'

Example response

200application/json
{
  "plan": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "weekStartDate": "2026-09-07",
    "status": {},
    "plannerVersion": "string",
    "scoreBreakdown": {
      "key": 0
    },
    "entries": [
      {}
    ],
    "createdAt": "2026-09-07T16:30:00Z",
    "activatedAt": "2026-09-07T16:30:00Z",
    "fromStarterLibrary": false,
    "shoppingListStale": false
  },
  "result": {
    "reason": {},
    "action": {}
  }
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/move

Move a dinner to another day in the same week, trading places if that day has one

Adults only; a Junior member gets 403. toDate must be a day of the same plan, and the day being moved must have a dinner (#111). Regenerates the week's shopping list if one exists.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Request body

application/jsonRequiredMovePlanEntryRequest

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/move" \
  -H "Content-Type: application/json" \
  -d '{"toDate":"2026-09-07"}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
DELETE/api/v1/households/{householdId}/plans/{planId}

Delete the week's plan, putting the week back to «not planned»

Adults only; a Junior member gets 403. Deleting a live plan also removes the versions it superseded and the week's shopping list; deleting a superseded plan by id removes only that one (#882). The week's candidate pool survives.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—

Responses

204No Content
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X DELETE \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6"
DELETE/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/dinner

Take the dinner off a day and leave the day open

Adults only; a Junior member gets 403. Not eating out and not a swap — the day simply has nothing planned (#111). Regenerates the week's shopping list if one exists.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X DELETE \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/dinner"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/plan-recipe

Put a recipe from the library on a day

Adults only; a Junior member gets 403. No model is asked and nothing is charged: the recipe becomes the day's dinner, scaled to that day's table (#115). A week with no plan yet is opened by the first dish (#1681). A base recipe is a part, not a dinner, and is refused with 400 (ADR-154).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Request body

application/jsonRequiredPlanRecipeOnDayRequest

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/plan-recipe" \
  -H "Content-Type: application/json" \
  -d '{"recipeId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","date":"2026-09-07"}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/lock

Lock a day's dinner so a replan leaves it alone

Adults only; a Junior member gets 403.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/lock"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/unlock

Unlock a day's dinner so a replan may change it again

Adults only; a Junior member gets 403.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Responses

200OK
application/jsonWeeklyPlanResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/unlock"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/tips/{index}/used

Mark one of tonight's serving tips as used, or take the mark off

Any member, Juniors included — it says what happened in the kitchen and changes no plan (#696, ADR-076). index is the tip's position in the entry's stored array (ServingNoteResponse.TipIndex), not its place in the servingNotes list. Idempotent. Nothing is saved to the cookbook; the marks are what the finished screen offers to turn into a variant.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—
indexpathinteger (int32)Required—

Request body

application/jsonRequiredSetServingTipUsedRequest

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/tips/0/used" \
  -H "Content-Type: application/json" \
  -d '{"used":false}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/entries/{entryId}/freezer

Say how many baby portions tonight's cooking put in the freezer

Any member, Juniors included — it says what happened in the kitchen (#3092). Portions is the total for this dinner, not an increment: tapping again sends two and «Angre» sends zero, so the call is idempotent. 400 when the dinner is not showing the freezer advice, or when portions is outside 0..20. Writes one pantry row on the food key baby-portion-frozen, in the freezer.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
entryIdpathstring (uuid)Required—

Request body

application/jsonRequiredSetFrozenBabyPortionsRequest

Responses

200OK
application/jsonWeeklyPlanResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/entries/3fa85f64-5717-4562-b3fc-2c963f66afa6/freezer" \
  -H "Content-Type: application/json" \
  -d '{"portions":0}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStartDate": "2026-09-07",
  "status": "Draft",
  "plannerVersion": "string",
  "scoreBreakdown": {
    "key": 0
  },
  "entries": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "date": "2026-09-07",
      "entryType": {},
      "isLocked": false,
      "portions": 0,
      "candidate": {}
    }
  ],
  "createdAt": "2026-09-07T16:30:00Z",
  "activatedAt": "2026-09-07T16:30:00Z",
  "fromStarterLibrary": false,
  "shoppingListStale": false
}
POST/api/v1/households/{householdId}/plans/{planId}/replan

Put the week back in the planning queue and answer with the run

Adults only; a Junior member gets 403. Answers 202 with the run's id (ADR-289): the week is planned again by a background job, and GET plans/runs/{jobId} says where it stands. scope defaults to OpenDays, which fills only the days with nothing on them and changes nothing already decided; WholeWeek re-solves everything that is not locked, answered for or in the past (#340). The optional body is the preflight's answer (#694, ADR-066).May cost credits — GET plans/cost-estimate says the price first. The shopping list follows the week to the new plan, and «Angre» is POST plans/{planId}/restore. A press while a run is going joins that run; 409 (week_planning_in_progress) means the same as for planning the week.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
planIdpathstring (uuid)Required—
scopequeryReplanScope——

Request body

application/jsonOptionalPlanPolicy | null

Responses

202Accepted
application/jsonPlanRunAccepted
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
409Conflict
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/plans/3fa85f64-5717-4562-b3fc-2c963f66afa6/replan" \
  -H "Content-Type: application/json" \
  -d '{"allowNearMisses":false}'

Example response

202application/json
{
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "weekStart": "2026-09-07"
}

Schemas

BabyPortionFit

Type

Values

NotApplicablePossibleNotPossible

CandidateContent

PropertyTypeRequired
titlestringRequired
rationalestringRequired
ingredientsCandidateIngredient[]Required
stepsstring[]Required
activeMinutesinteger (int32)Required
totalMinutesinteger (int32)Required
portionsinteger (int32)Required
tagsstring[]Required
leftoverPotentialstringRequired
confidencenumber (double)Required
assumptionsstring[]Required
safetyWarningsstring[]Required
nutritionCandidateNutrition | null—
timersCandidateStepTimer[] | null—
sectionsCandidateSection[] | null—

CandidateIngredient

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
quantitynumber (double)Required
unitstringRequired
isOptionalbooleanRequired
missingbooleanRequired
displayQuantitynumber (double) | null—
displayUnitstring | null—

CandidateNutrition

PropertyTypeRequired
kcalPerPortioninteger (int32)Required
proteinGramsnumber (double)Required
fibreGramsnumber (double)Required
addedSugarGramsnumber (double)Required
saltGramsnumber (double)Required
fruitVegPortionsnumber (double)Required
coveragenumber (double)Required

CandidatePrice

PropertyTypeRequired
classPriceClassRequired
perPortionNoknumber (double) | nullRequired
sourcePriceSourceRequired
coveragenumber (double)Required

CandidateSection

PropertyTypeRequired
namestring | nullRequired
kindRecipeSectionKindRequired
ingredientsCandidateIngredient[]Required
stepsstring[]Required
timersCandidateStepTimer[] | nullRequired
sourceRecipeIdstring (uuid) | nullRequired
sourceRecipeTitlestring | nullRequired

CandidateStepTimer

PropertyTypeRequired
stepinteger (int32)Required
minutesinteger (int32)Required
namestringRequired

DayOfWeek

Type

Values

SundayMondayTuesdayWednesdayThursdayFridaySaturday

or null

GeneratePlanRequest

PropertyTypeRequired
weekStartstring (date)Required
policyPlanPolicy | null—

HomeUseUpBundleQuestion

PropertyTypeRequired
bundleIdstringRequired
changesHomeUseUpChange[]Required
coveredCountinteger (int32)Required
urgentCountinteger (int32)Required
notDinnerHomeUseUpFood[]Required
nextWeekHomeUseUpNextWeek | null—

HomeUseUpChange

PropertyTypeRequired
idstringRequired
daystring (date)Required
kindHomeUseUpChangeKindRequired
recipeIdstring (uuid) | nullRequired
titlestringRequired
usesHomeUseUpUse[]Required
handsBackHomeUseUpUse[]Required
activeMinutesinteger (int32)Required
shoppingDeltainteger (int32)Required

HomeUseUpChangeKind

Type

Values

SwapDishAdaptIngredientFillOpenDay

HomeUseUpFood

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
reasonHomeUseUpFoodReason—

HomeUseUpFoodReason

Type

Values

BreadFoodNoRecipeLeftoversNoChangeInTime

Default "BreadFood"

HomeUseUpNextWeek

PropertyTypeRequired
changeCountinteger (int32)Required
foodNamesstring[]Required

HomeUseUpUse

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
quantitynumber (double) | nullRequired
unitstring | nullRequired
usesMostOfItboolean—

MealCandidateResponse

PropertyTypeRequired
idstring (uuid)Required
householdIdstring (uuid)Required
targetDatestring (date)Required
categoryMealCategoryRequired
contentCandidateContentRequired
scoresmapRequired
createdAtstring (date-time)Required
recipeIdstring (uuid) | null—
imageUrlstring | null—
priceCandidatePrice | null—

MealCategory

Type

Values

FishMeatPoultryVegetarianVeganSoupPastaTacoLeftoversOther

MovePlanEntryRequest

PropertyTypeRequired
toDatestring (date)Required

OutcomeReason

Type

Values

UnexpectedEventMissingIngredientNotEnoughTimeTooTiredNotAppealingIllnessPlansChangedOtherDidNotLike

or null

OutcomeStatus

Type

Values

CookedCookedWithChangesNotCookedAteElsewhere

PlanCostEstimateResponse

PropertyTypeRequired
creditsinteger (int32)Required
remaininginteger (int32)Required
affordablebooleanRequired
daysToGenerateinteger (int32)Required
usesStarterLibrarybooleanRequired
resetsAtstring (date-time)Required
suggestMoreCreditsinteger (int32)—
preflightPlanPreflightResponse | null—
affordableNewDishesinteger (int32)—
shortfallinteger (int32)—

PlanDeviationKind

Type

Values

BentSoftNearMissLeftOpenHandPicked

PlanDeviationOptionResponse

PropertyTypeRequired
codestringRequired
datestring (date) | null—
categorystring | null—
ruleIdstring (uuid) | null—

PlanDeviationResponse

PropertyTypeRequired
kindPlanDeviationKindRequired
rulePlanDeviationRuleRequired
ruleIdstring (uuid) | nullRequired
datestring (date) | nullRequired
categorystring | nullRequired
targetinteger (int32) | nullRequired
actualinteger (int32) | nullRequired
minutesinteger (int32) | nullRequired
reasonstringRequired
optionsPlanDeviationOptionResponse[]Required
ingredientstring | null—
memberNamestring | null—
constraintKindstring | null—
lockedByHouseholdboolean | null—
capSpentboolean | null—
priceCeilingPriceCeiling | null—

PlanDeviationRule

Type

Values

CategoryFrequencyMaximumActiveCookingTimeCalendarCapCategoryOnDayCategoryExcludedDaysHardConstraintBabySafePortionDietaryPreferencePriceClassOnDaysRepeatAfterDays

PlanEntryAdaptationResponse

PropertyTypeRequired
idstring (uuid)Required
fromFoodKeystringRequired
fromDisplayNamestringRequired
toFoodKeystringRequired
toDisplayNamestringRequired
quantitynumber (double)Required
unitstringRequired
notestring | nullRequired

PlanEntryFeedbackAction

Type

Values

SwappedReplannedVariantOfferedExcludedNotedNothingToSwapTo

PlanEntryFeedbackReason

Type

Values

RuleBrokenTooMuchOfCategoryConstraintNotHonouredTooMuchWorkKidsWontEatNeverAgain

PlanEntryFeedbackRequest

PropertyTypeRequired
reasonPlanEntryFeedbackReasonRequired
textstring | null—
memberIdstring (uuid) | null—

PlanEntryFeedbackResponse

PropertyTypeRequired
planWeeklyPlanResponseRequired
resultPlanEntryFeedbackResultResponseRequired

PlanEntryFeedbackResultResponse

PropertyTypeRequired
reasonPlanEntryFeedbackReasonRequired
actionPlanEntryFeedbackActionRequired
brokePlanEntryFeedbackRuleResponse | null—
categorystring | null—
categoryCountBeforeinteger (int32) | null—
categoryCountAfterinteger (int32) | null—
memberNamesstring[] | null—
previousCandidateIdstring (uuid) | null—
newCandidateIdstring (uuid) | null—
newTitlestring | null—
newActiveMinutesinteger (int32) | null—
preferenceIdsstring (uuid)[] | null—
recipeIdstring (uuid) | null—
variantTitlestring | null—
existingVariantIdstring (uuid) | null—

PlanEntryFeedbackRuleResponse

PropertyTypeRequired
rulePlanDeviationRuleRequired
ruleIdstring (uuid) | null—
categorystring | null—
minutesinteger (int32) | null—
weekdayDayOfWeek | null—
targetinteger (int32) | null—
actualinteger (int32) | null—
ingredientstring | null—
memberNamestring | null—
constraintKindstring | null—

PlanEntryResponse

PropertyTypeRequired
idstring (uuid)Required
datestring (date)Required
entryTypePlanEntryTypeRequired
isLockedbooleanRequired
portionsinteger (int32)Required
candidateMealCandidateResponse | nullRequired
outcomeOutcomeStatus | null—
outcomeReasonOutcomeReason | null—
outcomeFollowedUpAtstring (date-time) | null—
leftoverFromDatesstring (date)[] | null—
leftoverPortionsinteger (int32) | null—
lastModifiedByUserIdstring (uuid) | null—
lastModifiedByNamestring | null—
lastModifiedAtstring (date-time) | null—
servingNotesServingNoteResponse[] | null—
servingSummariesServingSummaryResponse[] | null—
usedTipIndexesinteger (int32)[] | null—
servingTimestring | null—
adaptationsPlanEntryAdaptationResponse[] | null—
frozenBabyPortionsinteger (int32) | null—
newFromRunboolean | null—

PlanEntryType

Type

Values

CookAtHomeEatingOutNoDinnerPlanLeftovers

PlanHeldDish

PropertyTypeRequired
datestring (date)Required
titlestringRequired

PlanningConflictDayResponse

PropertyTypeRequired
datestring (date)Required
reasonstringRequired

PlanningConflictResponse

PropertyTypeRequired
codestringRequired
messagestringRequired
relatedDatesstring (date)[]Required
suggestedResolutionstringRequired
categorystring | null—
requiredCountinteger (int32) | null—
availableCountinteger (int32) | null—
ruleMaximuminteger (int32) | null—
servedCountinteger (int32) | null—
dayReasonsPlanningConflictDayResponse[] | null—

PlanOverviewDayResponse

PropertyTypeRequired
datestring (date)Required
hasDinnerbooleanRequired
entryTypePlanEntryTypeRequired
titlestring | null—

PlanOverviewResponse

PropertyTypeRequired
weeksPlanOverviewWeekResponse[]Required

PlanOverviewWeekResponse

PropertyTypeRequired
weekStartstring (date)Required
statusPlanStatusRequired
daysPlanOverviewDayResponse[]Required
hasShoppingListboolean—
shoppedAtstring (date-time) | null—
changedSinceShoppedinteger (int32)—

PlanPickedDish

PropertyTypeRequired
datestring (date)Required
candidateIdstring (uuid) | null—
recipeIdstring (uuid) | null—

PlanPolicy

PropertyTypeRequired
allowGenerationinteger (int32) | null—
allowNearMissesboolean—
categoryCapsRunCategoryCap[] | null—
reopenDatesstring (date)[] | null—
lockedDatesstring (date)[] | null—
excludedTitlesstring[] | null—
pickedDishesPlanPickedDish[] | null—
heldDishesPlanHeldDish[] | null—

PlanPreflightBlockedRule

PropertyTypeRequired
rulePlanDeviationRuleRequired
categorystring | null—
minutesinteger (int32) | null—
priceCeilingPriceCeiling | null—

PlanPreflightDay

PropertyTypeRequired
datestring (date)Required
statePlanPreflightDayStateRequired
titlestring | null—
categorystring | null—
bendPlanDeviationResponse | null—
reasonPlanPreflightReason | null—
keptboolean | null—
usesUpPlanPreflightUseUp[] | null—

PlanPreflightDayState

Type

Values

LibraryGenerateNearMissStaysOpenLockedAnsweredPastEatingOutLeftoversReplaced

PlanPreflightReason

PropertyTypeRequired
kindPlanPreflightReasonKindRequired
usedinteger (int32) | null—
capinteger (int32) | null—
proposalsinteger (int32) | null—
rulesPlanPreflightBlockedRule[] | null—

PlanPreflightReasonKind

Type

Values

CapReachedNoCandidateFitsRuleBlocked

PlanPreflightResponse

PropertyTypeRequired
daysPlanPreflightDay[]Required
nearMissOfferPlanDeviationResponse[]Required
generationCapinteger (int32)Required
householdCapinteger (int32)Required
alwaysNewDishesbooleanRequired
nextWeekOnlyboolean—

PlanPreflightUseUp

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
bestBeforestring (date) | nullRequired

PlanRecipeOnDayRequest

PropertyTypeRequired
recipeIdstring (uuid)Required
datestring (date)Required

PlanRunAccepted

PropertyTypeRequired
jobIdstring (uuid)Required
weekStartstring (date)Required

PlanRunFailureResponse

PropertyTypeRequired
statusinteger (int32)Required
codestring | nullRequired
errorsPlanningConflictResponse[] | null—
resetsAtstring (date-time) | null—
scopestring | null—
shortfallinteger (int32) | null—

PlanRunState

Type

Values

QueuedRunningDoneFailed

PlanRunStatusResponse

PropertyTypeRequired
jobIdstring (uuid)Required
weekStartstring (date)Required
statusPlanRunStateRequired
queuePositioninteger (int32) | nullRequired
planIdstring (uuid) | nullRequired
startedAtstring (date-time)Required
failurePlanRunFailureResponse | null—

PlanStatus

Type

Values

DraftActiveSuperseded

PriceCeiling

Type

Values

CheapCheapOrMid

PriceClass

Type

Values

CheapMidExpensive

PriceSource

Type

Values

ObservedCatalogueTableUnknown

ProblemDetails

PropertyTypeRequired
typestring | null—
titlestring | null—
statusinteger (int32) | null—
detailstring | null—
instancestring | null—
codestring | null—

RecipeSectionKind

Type

Values

OwnLinkedUnresolved

ReplacePlanEntryRequest

PropertyTypeRequired
mealCandidateIdstring (uuid) | null—
entryTypePlanEntryType | null—

ReplanScope

Type

Values

OpenDaysWholeWeek

or null

RunCategoryCap

PropertyTypeRequired
categoryMealCategoryRequired
maxPerWeekinteger (int32)Required

ServingAudienceKind

Type

Values

PotMemberBabyGuests

ServingNoteResponse

PropertyTypeRequired
kindServingAudienceKindRequired
sourceServingNoteSourceRequired
codestringRequired
textstringRequired
tagsstring[]Required
memberIdstring (uuid) | null—
memberNamestring | null—
stepIndexinteger (int32) | null—
tipIndexinteger (int32) | null—
tipFoodsstring[] | null—
rowTextstring | null—
lappKindstring | null—
actionstring | null—
whystring | null—

ServingNoteSource

Type

Values

EngineModel

ServingSummaryResponse

PropertyTypeRequired
kindServingAudienceKindRequired
memberIdstring (uuid) | nullRequired
memberNamestring | nullRequired
labelstringRequired
textstringRequired
fitBabyPortionFitRequired
clausesstring[]Required
shortstring | null—

SetFrozenBabyPortionsRequest

PropertyTypeRequired
portionsinteger (int32)Required

SetServingTipUsedRequest

PropertyTypeRequired
usedbooleanRequired

StaleReason

Type

Values

GuestsHouseholdMixed

or null

WeeklyPlanResponse

PropertyTypeRequired
idstring (uuid)Required
householdIdstring (uuid)Required
weekStartDatestring (date)Required
statusPlanStatusRequired
plannerVersionstringRequired
scoreBreakdownmapRequired
entriesPlanEntryResponse[]Required
createdAtstring (date-time)Required
activatedAtstring (date-time) | nullRequired
fromStarterLibraryboolean—
shoppingListStaleboolean—
staleDatesstring (date)[] | null—
staleReasonStaleReason | null—
deviationsPlanDeviationResponse[] | null—