Recipes

The household's recipe book.20 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

GET/api/v1/households/{householdId}/recipes

Read the household's own shelf a page at a time: its own and generated recipes, and every base recipe — or one of those sources alone

Any member. One page of rows — id, title, category, minutes, portions, tags, picture and the household's own marks (favorites, times cooked, excluded from planning). The ingredients, the steps, the named parts and the folded base recipes are one GET …/recipes/{id} away (#2960). ?q= matches the title and the ingredient names, case-insensitively; ?category= is a MealCategory and may be repeated — any of them (#3177); ?maxTotalMinutes= keeps the dishes at most that many minutes from start to table (#3177); ?favourites=true keeps only the dishes the household has marked; ?isBase= and ?isDinner= keep doughs or dinners only; ?source= is one RecipeSource and keeps that section alone — User is the book's «Bare egne», the household's own writing and its own base recipes (#3055); ?sort= is Title (default) or ActiveMinutes. ?limit= is 1–100, 50 by default. The order is the shelf's own — dinners before base recipes, the household's own before generated, then the sort — so the reader's sections stay whole across pages. total counts every match for the filter, and nextCursor — opaque — is handed back as ?cursor= for the next page; null on the last. A cursor cut under another sort, or one nobody handed out, is a 400. The shared starter library is not in this list since #2828: read it from GET …/recipes/library.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
qquerystring——
categoryqueryMealCategory[]——
favouritesqueryboolean——
isBasequeryboolean——
isDinnerqueryboolean——
sourcequeryRecipeSource——
sortqueryRecipeListSort——
maxTotalMinutesqueryinteger (int32)——
cursorquerystring——
limitqueryinteger (int32)——

Responses

200OK
application/jsonPagedRecipeListItemResponse
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/recipes"

Example response

200application/json
{
  "items": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "title": "string",
      "category": {},
      "source": {},
      "tags": [
        "string"
      ],
      "activeMinutes": 0,
      "totalMinutes": 0,
      "basePortions": 0,
      "isFamilyFavorite": false,
      "favoriteMemberIds": [
        "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      ],
      "timesCooked": 0,
      "excludedFromPlanning": false,
      "isBase": false,
      "isDinner": true,
      "isCore": false
    }
  ],
  "nextCursor": "string",
  "total": 0
}
POST/api/v1/households/{householdId}/recipes

Add a recipe of the household's own

Adults only; a Junior member gets 403 — writing the shared cookbook is household-shaping (#980). Created recipes are always Source = User.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Request body

application/jsonRequiredSaveRecipeRequest

Responses

201Created
application/jsonRecipeResponse
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=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/recipes" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","category":"Fish","ingredients":[{"foodKey":"string","displayName":"string","quantity":0,"unit":"string","isOptional":false}],"steps":["string"],"tags":["string"],"activeMinutes":0,"totalMinutes":0,"basePortions":0}'

Example response

201application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
GET/api/v1/households/{householdId}/recipes/facets

Count what each of the book's filters would leave, over the whole book

Any member. The numbers the book's «Filtrer» sheet shows (#3177): total for the whole filter, and for each group — every category the book holds, the time-to-table steps (any, ≤ 20, ≤ 30, ≤ 45 minutes), the three sources and the favourites — how many dishes that choice would leave under the word typed and the other groups' choices. Takes the list's own ?q=, ?category= (repeatable), ?favourites= and ?maxTotalMinutes=, and ?source= as All (default), Own or Library — the household's shelf and the starter library together, the household's own writing, or the library alone.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
qquerystring——
categoryqueryMealCategory[]——
favouritesqueryboolean——
maxTotalMinutesqueryinteger (int32)——
sourcequeryRecipeBookSource——

Responses

200OK
application/jsonRecipeFacetsResponse
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/recipes/facets"

Example response

200application/json
{
  "total": 0,
  "categories": [
    {
      "category": {},
      "count": 0
    }
  ],
  "times": [
    {
      "maxTotalMinutes": 0,
      "count": 0
    }
  ],
  "sources": {
    "all": 0,
    "own": 0,
    "library": 0
  },
  "favourites": 0
}
GET/api/v1/households/{householdId}/recipes/tags

List the tags the household has used on its own recipes

Any member. Distinct, trimmed, lowercased and sorted — the vocabulary the editor's autocomplete offers. The shared library's tags are not in it: they are Bryti's words, not this household's.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Responses

200OK
application/jsonstring[]
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/recipes/tags"

Example response

200application/json
[
  "string"
]
GET/api/v1/households/{householdId}/recipes/library

Read the shared starter library a page at a time, searched and sorted on the server

Any member. Only the shared seed recipes (never the household's own). ?q= matches the title and the ingredient names, case-insensitively; ?category= is a MealCategory and may be repeated — any of them (#3177); ?maxTotalMinutes= keeps the dishes at most that many minutes from start to table (#3177); ?favourites=true keeps only the dishes this household has marked; ?sort= is Default (by title), Title or Quickest (active minutes, then title) — the enum's names, as ?category= takes the category's. ?limit= is 1–100, 50 by default. Each recipe carries the household's own marks like the list does, total counts every match for the filter, and nextCursor — opaque — is handed back as ?cursor= for the next page; null on the last. A cursor cut under another sort, or one nobody handed out, is a 400 (#2828).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
qquerystring——
categoryqueryMealCategory[]——
favouritesqueryboolean——
sortqueryRecipeLibrarySort——
maxTotalMinutesqueryinteger (int32)——
cursorquerystring——
limitqueryinteger (int32)——

Responses

200OK
application/jsonPagedRecipeResponse
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/recipes/library"

Example response

200application/json
{
  "items": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "title": "string",
      "category": {},
      "source": {},
      "ingredients": [
        {}
      ],
      "steps": [
        "string"
      ],
      "tags": [
        "string"
      ],
      "activeMinutes": 0,
      "totalMinutes": 0,
      "basePortions": 0,
      "isFamilyFavorite": false,
      "favoriteMemberIds": [
        "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      ],
      "timesCooked": 0,
      "excludedFromPlanning": false,
      "isBase": false,
      "isDinner": true,
      "isCore": false
    }
  ],
  "nextCursor": "string",
  "total": 0
}
GET/api/v1/households/{householdId}/recipes/{recipeId}

Read one recipe, with its linked base recipes folded in

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Responses

200OK
application/jsonRecipeResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
PATCH/api/v1/households/{householdId}/recipes/{recipeId}

Edit one of the household's own recipes

Adults only; a Junior member gets 403. The whole content is replaced. Only Source = User recipes can be edited — a seed or generated recipe answers 400 (save a variant instead). Null StepSections, References and IsBase keep what the recipe has; an empty list clears them (ADR-154 pt. 10). Every edit is recorded in the history.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredSaveRecipeRequest

Responses

200OK
application/jsonRecipeResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","category":"Fish","ingredients":[{"foodKey":"string","displayName":"string","quantity":0,"unit":"string","isOptional":false}],"steps":["string"],"tags":["string"],"activeMinutes":0,"totalMinutes":0,"basePortions":0}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
DELETE/api/v1/households/{householdId}/recipes/{recipeId}

Delete one of the household's own or generated recipes

Adults only; a Junior member gets 403. Seed recipes cannot be deleted (400). 409 with code recipe_in_plan and the date when the recipe is a dinner still to come — swap that day out first (#1897, ADR-168). Days already past keep their history and do not block.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Responses

204No Content
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 DELETE \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6"
GET/api/v1/households/{householdId}/recipes/{recipeId}/history

List a page of a recipe's edit history, newest first

Any member. Cursor-paged (ADR-292): 50 revisions by default, 100 at most, and Total is every revision the recipe has — what «Vis alle 12» says. Empty for a recipe nobody has edited since history was recorded. 400 on a limit out of range or a cursor this endpoint did not hand out.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—
cursorquerystring——
limitqueryinteger (int32)——

Responses

200OK
application/jsonPagedRecipeRevisionResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/history"

Example response

200application/json
{
  "items": [
    {
      "version": 0,
      "changedAt": "2026-09-07T16:30:00Z",
      "changes": [
        {}
      ]
    }
  ],
  "nextCursor": "string",
  "total": 0
}
GET/api/v1/households/{householdId}/recipes/{recipeId}/fit

Check whether a recipe suits the household or one evening's table

Without date the whole household's constraints apply; with date, the people eating that evening. Says what a variant would swap or leave out, whether one can be made at all, and whether the household already saved one with that title (#742, ADR-072).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—
datequerystring (date)——

Responses

200OK
application/jsonRecipeFitResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/fit"

Example response

200application/json
{
  "conflicts": [
    {
      "foodKey": "string",
      "displayName": "string",
      "isOptional": false,
      "constraint": "string",
      "constraintKind": "string",
      "memberNames": [
        "string"
      ],
      "substituteFoodKey": "string",
      "substituteDisplayName": "string",
      "removed": false,
      "note": "string"
    }
  ],
  "canMakeVariant": false,
  "variantTitle": "string",
  "existingVariantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
GET/api/v1/households/{householdId}/recipes/{recipeId}/tips

Read the kitchen tips that fit one recipe

Any member. At most three tips, best first, each judged to help with this dish as written: technique, preparation or rescue. Only Bryti's library recipes have any; the household's own and imported recipes get none. The text is Norwegian and carries no source (#3743).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Responses

200OK
application/jsonRecipeTipsResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/tips"

Example response

200application/json
{
  "tips": [
    {
      "id": "string",
      "text": "string",
      "kind": "string"
    }
  ]
}
POST/api/v1/households/{householdId}/recipes/{recipeId}/variants

Save a variant of the recipe as the household's own

Adults only; a Junior member gets 403. Two kinds that never coincide: a swap the table needs (default — «uten melk», #742) or the tips the household marked as used in cook mode (FromTips, #696, ADR-076). Safe to retry: a variant with that title already saved is returned with AlreadyExisted = true rather than duplicated. With PlanOnDate the variant is also put on Date as that day's dinner. 400 when FromTips and PlanOnDate are combined, when the dish already suits the table, or when a conflict has no honest substitute.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredCreateRecipeVariantRequest

Responses

200OK
application/jsonRecipeVariantResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/variants" \
  -H "Content-Type: application/json" \
  -d '{"planOnDate":false}'

Example response

200application/json
{
  "recipe": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "title": "string",
    "category": {},
    "source": {},
    "ingredients": [
      {}
    ],
    "steps": [
      "string"
    ],
    "tags": [
      "string"
    ],
    "activeMinutes": 0,
    "totalMinutes": 0,
    "basePortions": 0,
    "isFamilyFavorite": false,
    "favoriteMemberIds": [
      "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "timesCooked": 0,
    "excludedFromPlanning": false,
    "isBase": false,
    "isDinner": true,
    "isCore": false
  },
  "alreadyExisted": false,
  "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
  }
}
PUT/api/v1/households/{householdId}/recipes/{recipeId}/favorite

Mark or unmark a recipe as a favorite for one member or the whole household

Any member, Junior included. Null HouseholdMemberId means the whole household. Safe to retry: setting an existing mark or clearing a missing one is a no-op. 400 when the member is outside this household.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredSetRecipeFavoriteRequest

Responses

200OK
application/jsonRecipeResponse
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 PUT \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/favorite" \
  -H "Content-Type: application/json" \
  -d '{"householdMemberId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","favorite":false}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
PUT/api/v1/households/{householdId}/recipes/{recipeId}/exclusion

Tell the planner never to propose this recipe again, or undo that

Adults only; a Junior member gets 403. Per household — the recipe stays in the cookbook, marked, with «Angre» (#740, ADR-075). Safe to retry: idempotent both ways.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredSetRecipeExclusionRequest

Responses

200OK
application/jsonRecipeResponse
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 PUT \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/exclusion" \
  -H "Content-Type: application/json" \
  -d '{"excluded":false}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
GET/api/v1/households/{householdId}/recipes/{recipeId}/references/{referenceId}/candidates

List a page of the recipes a reference could be linked to, by name

Adults only; a Junior member gets 403. Cursor-paged (ADR-292), ordered by title. Kind picks which of the sheet's three lists: Suggestions is the normalised-title match on the reference's own label («Er det denne?»), Bases is the household's base recipes, and All — the default — is everything it can see except the dish itself, for the search box. q matches the title, case-insensitively. 400 on a limit out of range or a cursor cut under another kind.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—
referenceIdpathstring (uuid)Required—
qquerystring——
kindqueryReferenceCandidateKind——
cursorquerystring——
limitqueryinteger (int32)——

Responses

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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/references/3fa85f64-5717-4562-b3fc-2c963f66afa6/candidates"

Example response

200application/json
{
  "items": [
    {
      "recipeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "title": "string",
      "isBase": false,
      "titleMatches": false
    }
  ],
  "nextCursor": "string",
  "total": 0
}
POST/api/v1/households/{householdId}/recipes/{recipeId}/sections/extract

Lift a named part of a recipe out into a base recipe of its own

Adults only; a Junior member gets 403. Only on the household's own recipes. The part becomes a base recipe and the host keeps a linked reference in its place, in one transaction (ADR-154 pt. 9). 400 when the part has no ingredients or no steps of its own; 404 when no part has that name.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredExtractSectionRequest

Responses

200OK
application/jsonExtractSectionResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/sections/extract" \
  -H "Content-Type: application/json" \
  -d '{"section":"string"}'

Example response

200application/json
{
  "host": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "title": "string",
    "category": {},
    "source": {},
    "ingredients": [
      {}
    ],
    "steps": [
      "string"
    ],
    "tags": [
      "string"
    ],
    "activeMinutes": 0,
    "totalMinutes": 0,
    "basePortions": 0,
    "isFamilyFavorite": false,
    "favoriteMemberIds": [
      "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "timesCooked": 0,
    "excludedFromPlanning": false,
    "isBase": false,
    "isDinner": true,
    "isCore": false
  },
  "base": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "title": "string",
    "category": {},
    "source": {},
    "ingredients": [
      {}
    ],
    "steps": [
      "string"
    ],
    "tags": [
      "string"
    ],
    "activeMinutes": 0,
    "totalMinutes": 0,
    "basePortions": 0,
    "isFamilyFavorite": false,
    "favoriteMemberIds": [
      "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "timesCooked": 0,
    "excludedFromPlanning": false,
    "isBase": false,
    "isDinner": true,
    "isCore": false
  }
}
GET/api/v1/households/{householdId}/recipes/{recipeId}/image

Read the household's own photograph of a recipe

Any member. The address a recipe's ImageUrl names when the household put the picture there itself; served only to the household, never linked elsewhere. 404 when the recipe has no photograph of the household's own.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Responses

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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/image"
POST/api/v1/households/{householdId}/recipes/{recipeId}/image

Put a photograph of the dish on one of the household's own recipes

Adults only; a Junior member gets 403. JSON body: a base64 JPEG whose long side is at most 2 000 px, 5 MB at most — the apps scale and convert HEIC and PNG before sending. 400 with code image_not_jpeg or image_too_large otherwise, and recipe_not_own for a starter-library or generated recipe (save a variant first). The camera's metadata is removed; the file is the household's and replaces any picture the recipe had (ADR-343 (#3181)).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Request body

application/jsonRequiredSetRecipeImageRequest

Responses

200OK
application/jsonRecipeResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/image" \
  -H "Content-Type: application/json" \
  -d '{"imageBase64":"string","contentType":"string"}'

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}
DELETE/api/v1/households/{householdId}/recipes/{recipeId}/image

Take the photograph off one of the household's own recipes

Adults only; a Junior member gets 403. Removes the picture whether the household took it or the import found it; the household's own file is deleted. 400 with code recipe_not_own for a recipe that is not the household's own.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
recipeIdpathstring (uuid)Required—

Responses

200OK
application/jsonRecipeResponse
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/recipes/3fa85f64-5717-4562-b3fc-2c963f66afa6/image"

Example response

200application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "string",
  "category": "Fish",
  "source": "Seed",
  "ingredients": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "isOptional": false
    }
  ],
  "steps": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "activeMinutes": 0,
  "totalMinutes": 0,
  "basePortions": 0,
  "isFamilyFavorite": false,
  "favoriteMemberIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "timesCooked": 0,
  "excludedFromPlanning": false,
  "isBase": false,
  "isDinner": true,
  "isCore": false
}

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

CreateRecipeVariantRequest

PropertyTypeRequired
datestring (date) | null—
planOnDateboolean—
fromTipsVariantFromTipsRequest | null—

ExtractSectionRequest

PropertyTypeRequired
sectionstringRequired
titlestring | null—

ExtractSectionResponse

PropertyTypeRequired
hostRecipeResponseRequired
baseRecipeResponseRequired

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

OutcomeReason

Type

Values

UnexpectedEventMissingIngredientNotEnoughTimeTooTiredNotAppealingIllnessPlansChangedOtherDidNotLike

or null

OutcomeStatus

Type

Values

CookedCookedWithChangesNotCookedAteElsewhere

PagedRecipeListItemResponse

PropertyTypeRequired
itemsRecipeListItemResponse[]Required
nextCursorstring | nullRequired
totalinteger (int32) | nullRequired

PagedRecipeResponse

PropertyTypeRequired
itemsRecipeResponse[]Required
nextCursorstring | nullRequired
totalinteger (int32) | nullRequired

PagedRecipeRevisionResponse

PropertyTypeRequired
itemsRecipeRevisionResponse[]Required
nextCursorstring | nullRequired
totalinteger (int32) | nullRequired

PagedReferenceLinkCandidateResponse

PropertyTypeRequired
itemsReferenceLinkCandidateResponse[]Required
nextCursorstring | nullRequired
totalinteger (int32) | nullRequired

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

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

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—

RecipeBookSource

Type

Values

AllOwnLibrary

or null

RecipeCategoryFacet

PropertyTypeRequired
categoryMealCategoryRequired
countinteger (int32)Required

RecipeChange

PropertyTypeRequired
fieldRecipeChangeFieldRequired
detailstring | nullRequired

RecipeChangeField

Type

Values

TitleCategoryIngredientsStepsTagsTimesPortionsSectionsReferencesBaseDinner

RecipeFacetsResponse

PropertyTypeRequired
totalinteger (int32)Required
categoriesRecipeCategoryFacet[]Required
timesRecipeTimeFacet[]Required
sourcesRecipeSourceFacetsRequired
favouritesinteger (int32)Required

RecipeFitConflictResponse

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
isOptionalbooleanRequired
constraintstringRequired
constraintKindstringRequired
memberNamesstring[]Required
substituteFoodKeystring | nullRequired
substituteDisplayNamestring | nullRequired
removedbooleanRequired
notestring | nullRequired

RecipeFitResponse

PropertyTypeRequired
conflictsRecipeFitConflictResponse[]Required
canMakeVariantbooleanRequired
variantTitlestring | nullRequired
existingVariantIdstring (uuid) | nullRequired
softMatchesRecipeFitSoftMatchResponse[] | null—

RecipeFitSoftMatchResponse

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
constraintstringRequired
memberNamesstring[]Required

RecipeIngredientDto

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
quantitynumber (double)Required
unitstringRequired
isOptionalbooleanRequired
functionTagsstring[] | null—
displayQuantitynumber (double) | null—
displayUnitstring | null—
sectionstring | null—

RecipeLibrarySort

Type

Values

DefaultTitleQuickest

or null

RecipeLinkResponse

PropertyTypeRequired
idstring (uuid)Required
titlestringRequired

RecipeListItemResponse

PropertyTypeRequired
idstring (uuid)Required
titlestringRequired
categoryMealCategoryRequired
sourceRecipeSourceRequired
tagsstring[]Required
activeMinutesinteger (int32)Required
totalMinutesinteger (int32)Required
basePortionsinteger (int32)Required
isFamilyFavoritebooleanRequired
favoriteMemberIdsstring (uuid)[]Required
sourceUrlstring | null—
sourceNamestring | null—
licensestring | null—
imageUrlstring | null—
timesCookedinteger (int32)—
lastCookedOnstring (date) | null—
excludedFromPlanningboolean—
isBaseboolean—
effectiveActiveMinutesinteger (int32) | null—
effectiveTotalMinutesinteger (int32) | null—
isDinnerboolean—
attributionstring | null—
isCoreboolean—

RecipeListSort

Type

Values

TitleActiveMinutes

or null

RecipeReferenceDto

PropertyTypeRequired
idstring (uuid) | nullRequired
labelstringRequired
sourceHintstring | nullRequired
sectionstring | nullRequired
positioninteger (int32)Required
linkedRecipeIdstring (uuid) | nullRequired
linkedRecipeTitlestring | null—

RecipeResponse

PropertyTypeRequired
idstring (uuid)Required
titlestringRequired
categoryMealCategoryRequired
sourceRecipeSourceRequired
ingredientsRecipeIngredientDto[]Required
stepsstring[]Required
tagsstring[]Required
activeMinutesinteger (int32)Required
totalMinutesinteger (int32)Required
basePortionsinteger (int32)Required
isFamilyFavoritebooleanRequired
favoriteMemberIdsstring (uuid)[]Required
sourceUrlstring | null—
sourceNamestring | null—
licensestring | null—
imageUrlstring | null—
timesCookedinteger (int32)—
lastCookedOnstring (date) | null—
timersCandidateStepTimer[] | null—
excludedFromPlanningboolean—
isBaseboolean—
stepSectionsRecipeStepSectionDto[] | null—
referencesRecipeReferenceDto[] | null—
sectionsRecipeSectionResponse[] | null—
effectiveActiveMinutesinteger (int32) | null—
effectiveTotalMinutesinteger (int32) | null—
isDinnerboolean—
attributionstring | null—
translatedFromstring | null—
imageLicensestring | null—
imageAuthorstring | null—
imageSourceUrlstring | null—
isCoreboolean—
usedByRecipeLinkResponse[] | null—

RecipeRevisionResponse

PropertyTypeRequired
versioninteger (int32)Required
changedAtstring (date-time)Required
changesRecipeChange[]Required

RecipeSectionKind

Type

Values

OwnLinkedUnresolved

RecipeSectionResponse

PropertyTypeRequired
namestring | nullRequired
kindRecipeSectionKindRequired
ingredientsRecipeIngredientDto[]Required
stepsstring[]Required
timersCandidateStepTimer[] | nullRequired
sourceRecipeIdstring (uuid) | null—
sourceRecipeTitlestring | null—
referenceIdstring (uuid) | null—
sourceHintstring | null—
sourceActiveMinutesinteger (int32) | null—
sourceTotalMinutesinteger (int32) | null—

RecipeSource

Type

Values

SeedGeneratedUser

RecipeSourceFacets

PropertyTypeRequired
allinteger (int32)Required
owninteger (int32)Required
libraryinteger (int32)Required

RecipeStepSectionDto

PropertyTypeRequired
namestringRequired
fromStepinteger (int32)Required

RecipeTimeFacet

PropertyTypeRequired
maxTotalMinutesinteger (int32) | nullRequired
countinteger (int32)Required

RecipeTipResponse

PropertyTypeRequired
idstringRequired
textstringRequired
kindstringRequired

RecipeTipsResponse

PropertyTypeRequired
tipsRecipeTipResponse[]Required

RecipeVariantResponse

PropertyTypeRequired
recipeRecipeResponseRequired
alreadyExistedbooleanRequired
planWeeklyPlanResponse | nullRequired

ReferenceCandidateKind

Type

Values

SuggestionsBasesAll

or null

ReferenceLinkCandidateResponse

PropertyTypeRequired
recipeIdstring (uuid)Required
titlestringRequired
isBasebooleanRequired
titleMatchesbooleanRequired

SaveRecipeRequest

PropertyTypeRequired
titlestringRequired
categoryMealCategoryRequired
ingredientsRecipeIngredientDto[]Required
stepsstring[]Required
tagsstring[]Required
activeMinutesinteger (int32)Required
totalMinutesinteger (int32)Required
basePortionsinteger (int32)Required
timersCandidateStepTimer[] | null—
stepSectionsRecipeStepSectionDto[] | null—
referencesRecipeReferenceDto[] | null—
isBaseboolean | null—
isDinnerboolean | null—

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—

SetRecipeExclusionRequest

PropertyTypeRequired
excludedbooleanRequired

SetRecipeFavoriteRequest

PropertyTypeRequired
householdMemberIdstring (uuid) | nullRequired
favoritebooleanRequired

SetRecipeImageRequest

PropertyTypeRequired
imageBase64stringRequired
contentTypestringRequired

SetReferenceLinkRequest

PropertyTypeRequired
linkedRecipeIdstring (uuid) | nullRequired

StaleReason

Type

Values

GuestsHouseholdMixed

or null

VariantFromTipsRequest

PropertyTypeRequired
planIdstring (uuid)Required
entryIdstring (uuid)Required
tipIndexesinteger (int32)[]Required
titlestring | 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—