Maak een eigen concept. Publicatie gebeurt na insturen door de redactie. Een herhaalde idempotencyKey maakt geen dubbel recept.
Toegang: recipes:write
Uitvoer: Het aangemaakte recept als concept, inclusief id en updatedAt. timeIsEstimated markeert geschatte tijden; timeNote verklaart bijvoorbeeld rust of koeling. prepTime zit al in totalTime. editorialNote is een openbare redactionele toelichting en kan niet door leden worden geschreven. cookingMethods bevat bereidingswijzen. equipment bevat vereiste regels met alternatives (één keuze per regel volstaat). equipmentComplete=true bevestigt dat alle apparaten vermeld zijn; true plus een lege lijst betekent geen apparaten. Vermeld alleen vereiste apparaten, geen optionele bewaring.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 100
},
"recipe": {
"type": "object",
"properties": {
"cookingMethods": {
"maxItems": 15,
"type": "array",
"items": {
"type": "string",
"enum": [
"koken",
"bakken",
"braden",
"roerbakken",
"stoven",
"stomen",
"grillen",
"frituren",
"pocheren",
"blancheren",
"pureren",
"kneden",
"koelen",
"invriezen",
"zonder-verhitten"
]
}
},
"equipment": {
"maxItems": 15,
"type": "array",
"items": {
"type": "object",
"properties": {
"alternatives": {
"minItems": 1,
"maxItems": 15,
"type": "array",
"items": {
"type": "string",
"enum": [
"kookplaat",
"oven",
"airfryer",
"magnetron",
"barbecue",
"friteuse",
"slowcooker",
"snelkookpan",
"stoompan",
"blender",
"staafmixer",
"handmixer",
"keukenmachine",
"koelkast",
"vriezer"
]
}
}
},
"required": [
"alternatives"
],
"additionalProperties": false
}
},
"equipmentComplete": {
"type": "boolean"
},
"timeIsEstimated": {
"type": "boolean"
},
"timeNote": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"intro": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "null"
}
]
},
"totalTime": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 1440
},
{
"type": "null"
}
]
},
"prepTime": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 600
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 24
},
{
"type": "null"
}
]
},
"difficulty": {
"anyOf": [
{
"type": "string",
"enum": [
"makkelijk",
"gemiddeld",
"uitdagend"
]
},
{
"type": "null"
}
]
},
"method": {
"type": "string",
"enum": [
"fornuis",
"oven",
"airfryer",
"geen"
]
},
"vegetarian": {
"type": "boolean"
},
"category": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"heroImage": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "null"
}
]
},
"ingredients": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"quantity": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000
},
{
"type": "null"
}
]
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
}
},
"required": [
"name"
],
"additionalProperties": false
}
},
"steps": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"timerMinutes": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 600
},
{
"type": "null"
}
]
}
},
"required": [
"text"
],
"additionalProperties": false
}
}
},
"required": [
"title",
"ingredients",
"steps"
],
"additionalProperties": false
}
},
"required": [
"idempotencyKey",
"recipe"
],
"additionalProperties": false
}