Skip to content

Restore a recipe revision

POST
/api/v1/recipes/{id}/revisions/{revision}/restore
curl --request POST \
--url http://127.0.0.1:8080/api/v1/recipes/example/revisions/1/restore \
--header 'Authorization: Bearer <token>'
id
required

Library entry identifier

string

Library entry identifier

revision
required

Historical revision number

integer format: int64
>= 1

Historical revision number

If-Match

Strong ETag of the current revision

string

Strong ETag of the current revision

OK

Media typeapplication/json
object
created_at
required
string format: date-time
deleted_at
string format: date-time
id
required

Identifier of this entry in the local Savorum library

string
recipe
required
object
allergen_declarations

Allergen presence, precaution, and absence the source stated; an unmentioned substance is unknown

Array<object> | null
<= 1000 items
object
condition
string
<= 1000000 characters
presence
required

Contains: present; may_contain: precautionary or cross-contact warning; free_from: explicit absence claim

string
Allowed values: contains may_contain free_from
substance
required

The substance as the source names it

string
>= 1 characters <= 1000 characters
text
required

The complete authored statement

string
>= 1 characters <= 1000000 characters
variant_ref
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
assets
Array<object> | null
<= 10000 items
object
alt
string
<= 1000 characters
caption
string
<= 1000000 characters
creator

Who the source credits with creating the file

string
<= 1000 characters
credit

Authored credit line

string
<= 1000000 characters
id
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
license

License the source applies to the file; absent means unknown

object
name
string
<= 1000 characters
url
string format: uri
<= 10000 characters
media_type
required
string
<= 255 characters /^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$/
path
required
string
<= 512 characters /^assets/[A-Za-z0-9][A-Za-z0-9._/-]{0,510}$/
rights

Authored copyright or rights statement

string
<= 1000000 characters
role
string
Allowed values: image source other
sha256
required
string
/^[a-f0-9]{64}$/
size
required
integer format: int64
source_url

Page or file the asset came from

string format: uri
<= 10000 characters
authors
Array<object> | null
<= 100 items
object
kind

Absent when the source does not support a defensible classification

string
Allowed values: person organization other
kind_label

Source-authored classification used only with kind other

string
<= 1000 characters
name
required
string
>= 1 characters <= 1000 characters
url
string format: uri
<= 10000 characters /^[A-Za-z][A-Za-z0-9+.-]*:/
categories

Ordered source-authored broad classifications

Array<string> | null
<= 1000 items
cooking_methods

Ordered source-authored cooking-method labels

Array<string> | null
<= 1000 items
courses

Ordered source-authored meal-role classifications

Array<string> | null
<= 1000 items
cuisines
Array<string> | null
<= 1000 items
description
string
<= 1000000 characters
dietary_claims

Dietary suitability the source stated; never derived from ingredients

Array<object> | null
<= 1000 items
object
condition

Authored limit on the claim; a conditional claim is never shown or filtered as unconditional

string
<= 1000000 characters
diet

Normalized subject; absent when the diet has none

string
Allowed values: diabetic gluten_free halal hindu kosher low_calorie low_fat low_lactose low_salt vegan vegetarian
suitability
required
string
Allowed values: suitable unsuitable
text
required

The complete authored statement

string
>= 1 characters <= 1000000 characters
variant_ref

The variant the claim describes, which it does not extend to the recipe as written

string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
equipment

Ordered equipment the recipe identifies as required or expected; recipe content, not kitchen inventory

Array<object> | null
<= 1000 items
object
name
required

Authored equipment description; not a normalized registry identity

string
>= 1 characters <= 1000 characters
note
string
<= 1000000 characters
quantity

Authored equipment count or measure; does not automatically scale with recipe yield

object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum alternatives opaque
options
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
extensions_raw
object
key
additional properties
id
required

Portable recipe document identifier

string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
image_refs
Array<string> | null
<= 10000 items
ingredient_sections
required
Array<object> | null
<= 1000 items
object
id
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
ingredients
required
Array<object> | null
>= 1 items <= 10000 items

The line read as an ingredient. Its normalization method is extracted when an amount was read and unresolved when the line named a measure that could not be identified safely. A line with no amount is returned as a name

object
alternatives
Array<object> recursive| null
id
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
name
string
>= 1 characters <= 1000 characters
normalization
object
method
required
string
Allowed values: authored extracted inferred unresolved
review
string
Allowed values: confirmed corrected
warnings
Array<string> | null
<= 100 items
note
string
<= 1000000 characters
optional

The author sanctioned leaving this occurrence out. It belongs to the occurrence, never to the ingredient: the same thing may be optional in a garnish section and required by the method

boolean
package_size
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
quantity
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum alternatives opaque
options
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
recipe

The recipe that makes this ingredient, as the source identified it. Its content is not included

object
recipe_id

The other recipe’s portable document ID, not a library entry ID

string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
title

The other recipe’s title as authored

string
<= 1000 characters
url

Where the other recipe is published

string format: uri
<= 10000 characters
relation
string
Allowed values: or and_or preferred
source_text
string
<= 1000000 characters
temperature
object
amount
object
approximate
boolean
max
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
note
string
<= 1000 characters
purpose
object
kind
required
string
Allowed values: oven internal oil water surface other
label
string
<= 1000 characters
source_text
string
<= 1000 characters
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
title
string
<= 1000 characters
instruction_sections
required
Array<object> | null
<= 1000 items
object
id
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
steps
required
Array<object> | null
>= 1 items <= 10000 items
object
id
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
image_refs
Array<string> | null
<= 10000 items
ingredient_uses
Array<object> | null
<= 10000 items
object
ingredient_ref
required
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
quantity
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum alternatives opaque
options
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
temperatures
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^-?(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
note
string
<= 1000 characters
purpose
object
kind
required
string
Allowed values: oven internal oil water surface other
label
string
<= 1000 characters
source_text
string
<= 1000 characters
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text

Instruction prose; a step requires a title or text

string
<= 1000000 characters
timing_refs

Canonical timing assertions this step is associated with

Array<string> | null
<= 50 items
title

Optional authored heading for this instruction

string
<= 1000 characters
title
string
<= 1000 characters
keywords
Array<string> | null
<= 1000 items
language
string
<= 255 characters
modified

Authored recipe or source-work modification date or date-time

string
/^[0-9]{4}-[0-9]{2}-[0-9]{2}(?:[Tt][0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]+)?(?:[Zz]|[+-][0-9]{2}:[0-9]{2}))?$/
notes
Array<string> | null
<= 1000 items
nutrition

Authored nutrition statements, each with its own basis. Savorum does not calculate nutrition

Array<object> | null
<= 100 items
object
basis
required
object
kind
required

Recipe: the whole recipe as written; serving: one serving; quantity: a stated amount such as 100 g; unspecified: the source did not say

string
Allowed values: recipe serving quantity unspecified
quantity

Serving size or reference amount; required for a quantity basis and absent for an unspecified one

object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum alternatives opaque
options
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text

Authored basis wording such as 1 slice

string
<= 1000 characters
note

Authored qualification of the whole statement

string
<= 1000000 characters
nutrients
required
Array<object> | null
>= 1 items <= 200 items
object
amount

An authored zero is a value; an unmentioned nutrient is absent

object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
label

The source’s own name; required for other

string
<= 1000 characters
nutrient
required
string
Allowed values: energy fat saturated_fat trans_fat unsaturated_fat cholesterol carbohydrate sugars fiber protein sodium salt other
source_text
string
<= 1000 characters
text

Wording that is not a precise value; excludes amount and unit

string
<= 1000 characters
unit

Absent when the source stated no unit

string
Allowed values: kcal kJ g mg mcg
primary_image
string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
published

Authored recipe or source-work publication date or date-time

string
/^[0-9]{4}-[0-9]{2}-[0-9]{2}(?:[Tt][0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]+)?(?:[Zz]|[+-][0-9]{2}:[0-9]{2}))?$/
schema_version
required
integer format: int64
>= 1 <= 1
source
object
application

Portable source application or format identity; namespaces source_id

string
<= 1000 characters
attribution

Portable source credit or attribution

string
<= 1000000 characters
name

Portable source name credited by the recipe

string
<= 1000 characters
retrieved_at

Supplementary retrieval time; does not identify a source

string format: date-time
source_id

Identifier within application; never a Savorum library or publication ID

string
<= 1000 characters
url

Portable canonical source URL

string format: uri
<= 10000 characters
source_locale
string
<= 255 characters
sref_opaque_raw
object
key
additional properties
times
object
additional
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
assertions
Array<object> | null
<= 50 items
object
attention

Authored semantics; absent means the recipe does not say

string
Allowed values: active passive
duration
required
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
id
required
string
<= 255 characters
kind

Absent when the source supports a duration but no defensible classification

string
Allowed values: prep soak brine marinate cure proof ferment chill freeze drain cook rest cool other
label

Required when kind is other; may retitle a named one

string
<= 100 characters
microwave
object
choices
Array<object> | null
<= 100 items
object
duration
required
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
power
object
percent
string
/^(?:100|[1-9][0-9]?)$/
text
string
<= 1000 characters
watts
integer format: int64
>= 1 <= 1000000
rated_output_watts
integer format: int64
>= 1 <= 1000000
source_text
required
string
>= 1 characters <= 1000 characters
mode_text
string
<= 1000 characters
power
object
percent
string
/^(?:100|[1-9][0-9]?)$/
text
string
<= 1000 characters
watts
integer format: int64
>= 1 <= 1000000
rated_output_watts
integer format: int64
>= 1 <= 1000000
restrictions
Array<string> | null
<= 100 items
source_text
required
string
>= 1 characters <= 1000 characters
note
string
<= 1000 characters
provenance

How Savorum came to hold this timing; not part of the portable recipe

string
Allowed values: derived supplemental
cook
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
prep
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
total
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
title
required
string
>= 1 characters <= 1000 characters
translations

Declared relationships to other renditions of this recipe in other languages. Each rendition is its own recipe; a relationship shares no content

Array<object> | null
<= 1000 items
object
language
required

The counterpart’s primary language as a BCP 47 tag

string
>= 2 characters <= 255 characters
recipe_id

The counterpart’s portable recipe document ID, not a library entry ID

string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
relation
required

Original: this recipe was translated from the counterpart; translation: the counterpart was translated from this recipe; alternate: the same recipe in another language with no stated direction

string
Allowed values: original translation alternate
title

The counterpart’s title as authored

string
<= 1000 characters
url

Where the counterpart is published

string format: uri
<= 10000 characters
variants

Authored alternate realizations of this recipe, in source order. Preserved content, not a machine-applicable delta: identify one as a variant and show what it says rather than trying to apply it

Array<object> | null
<= 1000 items
object
id

Recipe-local identifier that claims use to scope themselves to this variant

string
/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/
text
required
string
>= 1 characters <= 1000000 characters
title
string
<= 1000 characters
yields

Independent authored yield assertions in source order. None is primary; which one a reader scales by is their own state

Array<object> | null
<= 100 items
object
label
string
<= 1000 characters
quantity
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum alternatives opaque
options
Array<object> | null
<= 100 items
object
amount
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple sum
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
terms
Array<object> | null
<= 100 items
object
amount
required
object
approximate
boolean
max
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
min
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
value
string
<= 128 characters /^(0|[1-9][0-9]*|[1-9][0-9]*/[1-9][0-9]*)$/
kind
required
string
Allowed values: simple
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
unit
string
<= 255 characters /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/
text
string
<= 1000 characters
revision
required
integer format: int64
>= 1
time_summary
required
object
active

Time the recipe needs the cook

object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
cook
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
elapsed

Time from starting to being able to eat

object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
prep
object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
written_total

An authored total the recipe itself contradicts, preserved but not presented as the elapsed time

object
approximate
boolean
max
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
min
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
source_text
string
<= 1000 characters
text

Opaque wording such as overnight; excludes a value or a range

string
<= 1000 characters
value
string
<= 100 characters /^P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+S)?)?$/
key
additional properties
any
updated_at
required
string format: date-time
key
additional properties
any
Example
{
"recipe": {
"allergen_declarations": [
{
"presence": "contains"
}
],
"assets": [
{
"role": "image"
}
],
"authors": [
{
"kind": "person"
}
],
"dietary_claims": [
{
"diet": "diabetic",
"suitability": "suitable"
}
],
"equipment": [
{
"quantity": {
"kind": "simple",
"options": [
{
"kind": "simple",
"terms": [
{
"kind": "simple"
}
]
}
],
"terms": [
{
"kind": "simple"
}
]
}
}
],
"ingredient_sections": [
{
"ingredients": [
{
"normalization": {
"method": "authored",
"review": "confirmed"
},
"package_size": {
"kind": "simple"
},
"quantity": {
"kind": "simple",
"options": [
{
"kind": "simple",
"terms": [
{
"kind": "simple"
}
]
}
],
"terms": [
{
"kind": "simple"
}
]
},
"relation": "or",
"temperature": {
"purpose": {
"kind": "oven"
}
}
}
]
}
],
"instruction_sections": [
{
"steps": [
{
"ingredient_uses": [
{
"quantity": {
"kind": "simple",
"options": [
{
"kind": "simple",
"terms": [
{
"kind": "simple"
}
]
}
],
"terms": [
{
"kind": "simple"
}
]
}
}
],
"temperatures": [
{
"purpose": {
"kind": "oven"
}
}
]
}
]
}
],
"nutrition": [
{
"basis": {
"kind": "recipe",
"quantity": {
"kind": "simple",
"options": [
{
"kind": "simple",
"terms": [
{
"kind": "simple"
}
]
}
],
"terms": [
{
"kind": "simple"
}
]
}
},
"nutrients": [
{
"nutrient": "energy",
"unit": "kcal"
}
]
}
],
"times": {
"assertions": [
{
"attention": "active",
"kind": "prep",
"provenance": "derived"
}
]
},
"translations": [
{
"relation": "original"
}
],
"yields": [
{
"quantity": {
"kind": "simple",
"options": [
{
"kind": "simple",
"terms": [
{
"kind": "simple"
}
]
}
],
"terms": [
{
"kind": "simple"
}
]
}
}
]
}
}
ETag
string

Bad Request

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

No valid session or API token (authentication-required), or the credential sent is invalid (invalid-credentials).

Media typeapplication/problem+json
object
code
required
string
detail
required
string
status
required
integer format: int64
title
required
string
type
required
string
key
additional properties
any
Examplegenerated
{
"code": "example",
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Not Found

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

Conflict

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

Precondition Failed

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

Unprocessable Entity

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

Precondition Required

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}

Internal Server Error

Media typeapplication/problem+json
object
code

Stable application error code; clients may also use the problem type suffix.

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

key
additional properties
any
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
params

Structured context for the stable error code.

object
key
additional properties
any
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
violations
Array<object>
object
code
required
string
location
required
string
params
object
key
additional properties
any
key
additional properties
any
Example
{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}