{
  "openapi": "3.0.0",
  "info": {
    "version": "3",
    "title": "Kitchen Stories Internal API",
    "description": "",
    "contact": {
      "email": "hello@kitchenstories.com"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "servers": [
    {
      "url": "https://api.kitchenstories.io/api",
      "description": "LIVE Environment"
    },
    {
      "url": "https://api.dev.kitchenstories.io/api",
      "description": "Development Environment"
    },
    {
      "url": "http://localhost:8000/api",
      "description": "Local Environment"
    }
  ],
  "tags": [],
  "paths": {
    "/articles/": {
      "get": {
        "summary": "List Articles",
        "operationId": "article-list",
        "tags": [
          "Articles"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "query",
            "description": "Get articles by slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Get article type eg. 'article', 'essential', 'static_page', 'blogger_profile'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "description": "Get articles by tag eg. 'partner'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Get articles by given category slug eg. 'news'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "order",
            "in": "query",
            "description": "Get articles in descending order of 'date' or 'likes'. Any other value is ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified article",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all articles",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/article_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/articles/{uuid-or-slug}/": {
      "get": {
        "summary": "Details of given Article",
        "operationId": "article-detail",
        "tags": [
          "Articles"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "draft",
            "in": "query",
            "description": "Get article with the current draft",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified article",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Article with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/article"
                }
              }
            }
          },
          "404": {
            "description": "Article not found"
          }
        }
      }
    },
    "/articles/{uuid-or-slug}/recommendations/": {
      "get": {
        "summary": "List Recommendations for given Article uuid or slug",
        "operationId": "article-recommendation-list",
        "tags": [
          "Articles"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified article schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Articles Paginated List with Recommendations",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/article_pagination"
                }
              }
            }
          },
          "404": {
            "description": "Article not found"
          }
        }
      }
    },
    "/articles/{uuid-or-slug}/content-meta/": {
      "get": {
        "summary": "Content meta of given Article",
        "operationId": "article-detail-content-meta",
        "tags": [
          "Articles"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get content meta for Article with the specific uuid. The returned entries will be ordered by descending updated date.",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta_list"
                }
              }
            }
          },
          "404": {
            "description": "Article not found"
          }
        }
      },
      "post": {
        "summary": "Add a new content meta",
        "operationId": "article-content-meta-create",
        "tags": [
          "Articles Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_meta_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get content meta for Article with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Article not found"
          }
        }
      },
      "put": {
        "summary": "Edit an existing content meta",
        "operationId": "article-content-meta-edit",
        "tags": [
          "Articles Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "description": "unique key of Content Meta to edit. Not mandatory since it can also be passed in the request body.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_meta_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The edited content meta for Article with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Article not found"
          }
        }
      },
      "delete": {
        "summary": "Delete a content meta by key",
        "operationId": "article-content-meta-delete",
        "tags": [
          "Articles Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the article",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "description": "unique key of Content Meta to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "language code of the content meta to delete. If not provided, it will delete in all languages available.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A confirmation or error deleting the target content meta"
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Article or Content Meta key not found"
          }
        }
      }
    },
    "/users/me/external-recipes/": {
      "get": {
        "summary": "List all external recipes saved by the user",
        "operationId": "external-recipes-list",
        "tags": [
          "User External Recipes"
        ],
        "responses": {
          "200": {
            "description": "Get all items (external recipes) from the logged in user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add saved-external-recipe uuid or url into the user's external recipes",
        "operationId": "external-recipes-create",
        "tags": [
          "User External recipes"
        ],
        "requestBody": {
          "description": "The saved-external-recipe uuid or url of recipe to extract and save - if url or id is already saved, it will be returned",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/cookbook_recipes_add_json"
                  },
                  {
                    "$ref": "#/components/schemas/cookbook_externalrecipes_add_json"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/users/me/external-recipes/{external-recipe-id}/": {
      "get": {
        "summary": "Get saved external recipe data from the user's external recipes list",
        "operationId": "external-recipes-get",
        "tags": [
          "User External Recipes"
        ],
        "parameters": [
          {
            "name": "external-recipe-id",
            "in": "path",
            "description": "External Recipe ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "Not Found. When recipe is not found"
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "delete": {
        "summary": "Remove saved external recipe from the user's external recipes",
        "operationId": "external-recipes-delete",
        "tags": [
          "User External Recipes"
        ],
        "parameters": [
          {
            "name": "external-recipe-id",
            "in": "path",
            "description": "External Recipe ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "Not Found. When recipe is not found"
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/indexer/recipe/{uuid}/": {
      "get": {
        "summary": "Index the given recipe in algolia",
        "operationId": "indexer-recipe",
        "tags": [
          "Indexer"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Recipe uuid",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Note that this endpoint triggers an async request to the indexer - it returns without error even if the indexation fails",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/indexer/article/{uuid}/": {
      "get": {
        "summary": "Index the given Article in algolia",
        "operationId": "indexer-article",
        "tags": [
          "Indexer"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Article uuid",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Note that this endpoint triggers an async request to the indexer - it returns without error even if the indexation fails",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/indexer/video/{uuid}/": {
      "get": {
        "summary": "Index the given video in algolia",
        "operationId": "indexer-video",
        "tags": [
          "Indexer"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Video uuid",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Note that this endpoint triggers an async request to indexer - it returns without error even if the indexation fails",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/users/me/rating/": {
      "get": {
        "summary": "List all ratings for currently authenticated user",
        "operationId": "rating-list",
        "tags": [
          "User Ratings"
        ],
        "responses": {
          "200": {
            "description": "Get all Ratings",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/rating_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a Rating on the given feed-item for the currently authenticated user",
        "operationId": "rating-create",
        "tags": [
          "User Ratings"
        ],
        "requestBody": {
          "description": "feed_items-uuid and rating (normalized) from 0-1",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/rating_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When user feed-item does not exists"
          }
        }
      }
    },
    "/users/me/rating/{feeditem-uuid}/": {
      "put": {
        "summary": "Updates a given feed-item rating for the currently authenticated user",
        "operationId": "rating-update",
        "tags": [
          "User Ratings"
        ],
        "parameters": [
          {
            "name": "feeditem-uuid",
            "in": "path",
            "description": "Feed Item uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "feed_items-uuid and rating (normalized) from 0-1",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/rating_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When user feed-item does not exists"
          }
        }
      }
    },
    "/recipes/": {
      "get": {
        "summary": "List Recipes",
        "operationId": "recipe-list",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "query",
            "description": "Get recipe by slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Get recipe type eg. 'recipe', 'howto', 'community'. Any other value is ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "description": "Get recipe by tag eg. 'partner'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Get recipes by given category slug eg. 'pizza-recipes'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "order",
            "in": "query",
            "description": "Get recipes in descending order of 'date' or 'likes'. Any other value is ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "craft_ids",
            "in": "query",
            "description": "Get recipe by separated content_ids eg. 'R1234,R2345'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all recipes",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/recipes/{uuid-or-slug}/": {
      "get": {
        "summary": "Details of given Recipe",
        "operationId": "recipe-detail",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "draft",
            "in": "query",
            "description": "Get submitted user recipe or wagtail recipe with latest revision",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Recipe with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      }
    },
    "/recipes/{uuid-or-slug}/recommendations/": {
      "get": {
        "summary": "List Recommendations for given Recipe uuid or slug",
        "operationId": "recipe-recommendation-list",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All recipes",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_pagination"
                }
              }
            }
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      }
    },
    "/recipes/{uuid-or-slug}/content-meta/": {
      "get": {
        "summary": "Content meta of given Recipe",
        "operationId": "recipe-detail-content-meta",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get content meta for Recipe with the specific uuid. The items will be ordered by descending updated date",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta_list"
                }
              }
            }
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      },
      "post": {
        "summary": "Add a new content meta",
        "operationId": "recipe-content-meta-create",
        "tags": [
          "Recipes Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_meta_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Edit an existing content meta for Recipe with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      },
      "put": {
        "summary": "Edit an existing content meta",
        "operationId": "recipe-content-meta-edit",
        "tags": [
          "Recipes Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "description": "unique key of Content Meta to edit. Non mandatory as it can be also passed via the body of the request",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_meta_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Create new content meta for Recipe with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      },
      "delete": {
        "summary": "Delete a content meta by key",
        "operationId": "recipe-content-meta-delete",
        "tags": [
          "Recipes Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the recipe",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "description": "unique key of Content Meta to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "the language code of the content meta to delete. If not provided, the content meta will be deleted in all languages",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A confirmation or error deleting the target content meta"
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Recipe or Content Meta key not found"
          }
        }
      }
    },
    "/recipes/send_email_with_recipes/": {
      "get": {
        "summary": "Send E-Mail with List of Recipes for the currently authenticated User",
        "operationId": "recipe-send-email-with-recipes",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "Recipes UUID separated by **,** eg. '56050eb4-4a6e-4165-940f-b5d4ab70db92,7bd8e39c-c3af-4164-89fb-ddc2524993bb'",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull"
          }
        }
      }
    },
    "/recipe-of-the-day/": {
      "get": {
        "summary": "Get current Recipe Of the Day",
        "operationId": "recipe-of-the-day",
        "tags": [
          "Recipes"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "description": "Preview Date of the recipe",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Recipe of the day",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "Recipe not found"
          }
        }
      }
    },
    "/report/abuse/": {
      "post": {
        "summary": "Report abuse for Comment or User",
        "operationId": "abuse-create",
        "tags": [
          "Reports"
        ],
        "requestBody": {
          "description": "installation.id + (comment.id or user.id) + reason",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/report_abuse_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/users/me/likes/": {
      "get": {
        "deprecated": true,
        "summary": "replaced with  `users/me/likes/feed-items/`",
        "operationId": "likes-list-old",
        "tags": [
          "User Likes"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "Returns a list with `feeditem-ids` only.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all liked articles or recipes from current user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feeditem_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/users/me/likes/feed-items/": {
      "get": {
        "summary": "List likes for currently authenticated user",
        "operationId": "likes-list",
        "tags": [
          "User Likes"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "Returns a list with `feeditem-ids` only.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all liked articles or recipes from currently authenticated user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feeditem_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Like a Recipe or Article",
        "operationId": "like-create",
        "tags": [
          "User Likes"
        ],
        "requestBody": {
          "description": "Article or Recipe `feed_items`-uuid",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_recipes_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/me/likes/feed-items/{feeditem-uuid}/": {
      "delete": {
        "summary": "Delete Like on the given feed-item for currently authenticated user",
        "operationId": "like-delete",
        "tags": [
          "User Likes"
        ],
        "parameters": [
          {
            "name": "feeditem-uuid",
            "in": "path",
            "description": "Feed Item (Recipe or Article) uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/me/likes/comments/": {
      "get": {
        "summary": "List Comment Likes for currently authenticated user",
        "operationId": "likes-comment-list",
        "tags": [
          "User Comment Likes"
        ],
        "responses": {
          "200": {
            "description": "Get all liked articles or recipes for currently authenticated user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/comment_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Like a given comment for the currently authenticated user",
        "operationId": "like-comment-create",
        "tags": [
          "User Comment Likes"
        ],
        "requestBody": {
          "description": "comment-uuid",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user_likes_comment_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Comment does not exists"
          }
        }
      }
    },
    "/users/me/likes/comments/{comment-uuid}/": {
      "delete": {
        "summary": "Delete Like of given Comment for currently authenticated user",
        "operationId": "like-comment-delete",
        "tags": [
          "User Comment Likes"
        ],
        "parameters": [
          {
            "name": "comment-uuid",
            "in": "path",
            "description": "Comment uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Comment does not exists"
          }
        }
      }
    },
    "/upload/image/": {
      "post": {
        "summary": "Upload an JPEG image for the currently authenticated user",
        "operationId": "upload-image",
        "tags": [
          "Upload"
        ],
        "requestBody": {
          "description": "An `JPG` image-binary with form-data. Other formats will be rejected. No validation for dimensions or sizes.",
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/user_public_upload_image"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful or errors-list",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/image"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/upload/video/": {
      "post": {
        "summary": "Upload a video for the currently authenticated user",
        "operationId": "upload-video",
        "tags": [
          "Upload"
        ],
        "requestBody": {
          "description": "Any binary with form-data less than 500MB. No other validations.",
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/user_public_upload_video"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful or errors-list",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/video"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/users/me/mealplan/": {
      "get": {
        "summary": "Get all meal plan items for the currently authenticated user",
        "operationId": "mealplan-list",
        "tags": [
          "User Meal Plan"
        ],
        "parameters": [
          {
            "name": "week",
            "in": "query",
            "description": "Calendar week number",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "year",
            "in": "query",
            "description": "Year",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start",
            "in": "query",
            "description": "Start date (YYYY-MM-DD)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "End date (YYYY-MM-DD)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with meal plan items",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/mealplan"
                }
              }
            }
          },
          "403": {
            "description": "User not authenticated"
          }
        }
      },
      "post": {
        "summary": "Create a meal plan item for the currently authenticated user",
        "operationId": "mealplan-create",
        "tags": [
          "User Meal Plan"
        ],
        "requestBody": {
          "description": "Feed item is mandatory. Either target_date or year and calendar_week must be provided.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/mealplan_add_json"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/mealplan_item"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/users/me/mealplan/{mealplan-item-uuid}/": {
      "get": {
        "summary": "Get the given meal plan item for the currently authenticated user",
        "operationId": "mealplan-detail",
        "tags": [
          "User Meal Plan"
        ],
        "parameters": [
          {
            "name": "mealplan-item-uuid",
            "in": "path",
            "description": "Meal plan item uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get this Meal Plan item details",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/mealplan_item"
                }
              }
            }
          },
          "404": {
            "description": "Meal plan item not found"
          }
        }
      },
      "put": {
        "summary": "Update a Meal Plan item for the currently authenticated User",
        "operationId": "mealplan-update",
        "tags": [
          "User Meal Plan"
        ],
        "parameters": [
          {
            "name": "mealplan-item-uuid",
            "in": "path",
            "description": "Meal plan item uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Updates the meal plan item",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/mealplan_update"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/mealplan_item"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "Meal plan item not found"
          }
        }
      },
      "delete": {
        "summary": "Delete a Meal Plan item for the currently authenticated User",
        "operationId": "mealplan-delete",
        "tags": [
          "User Meal Plan"
        ],
        "parameters": [
          {
            "name": "mealplan-item-uuid",
            "in": "path",
            "description": "Meal plan item uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Operation successful"
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Meal Plan item does not exist"
          }
        }
      }
    },
    "/users/comments/": {
      "get": {
        "summary": "List User Comments",
        "operationId": "comment-list",
        "tags": [
          "User Comments"
        ],
        "parameters": [
          {
            "name": "feed_item",
            "in": "query",
            "description": "Get comments for the specific feed-item",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "parent",
            "in": "query",
            "description": "Get all answers for the given parent comment uuid",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with_feed_item",
            "in": "query",
            "description": "Embed the feeditem in the comment",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all comments (with optionally embedded articles or recipes) from the current user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/comment_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new comment",
        "operationId": "comment-create",
        "tags": [
          "User Comments"
        ],
        "requestBody": {
          "description": "feed_item + parent is feed_item-uuid or parent-comment-uuid. Provide `feed_item` or `parent`",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/comment_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/comment"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/comments/images/": {
      "get": {
        "summary": "Get user image comments",
        "operationId": "comment-images-list",
        "tags": [
          "User Comments"
        ],
        "parameters": [
          {
            "name": "feed_item",
            "in": "query",
            "description": "Get comments for the specific feed-item",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all image comments from the current user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/comment_image_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/users/comments/{comment-uuid}/images/": {
      "post": {
        "summary": "Attach an image to a comment",
        "operationId": "comment-image",
        "tags": [
          "User Comments"
        ],
        "parameters": [
          {
            "name": "comment-uuid",
            "in": "path",
            "description": "Comment uuid",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Image is a http-form-url-encoded image",
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/user_public_update_image"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/comment_image_create"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Comment does not exists"
          }
        }
      }
    },
    "/users/{uuid-or-slug}/cookbooks/": {
      "get": {
        "summary": "Get all public cookbooks of the given partner or editor user",
        "operationId": "public-cookbook-list",
        "tags": [
          "User Public Cookbooks"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "User uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all Public Cookbooks",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/cookbook_pagination"
                }
              }
            }
          },
          "404": {
            "description": "User not found or not able to display public cookbooks (not editor nor partner type)"
          }
        }
      }
    },
    "/users/{uuid-or-slug}/cookbooks/{cookbook-uuid}/": {
      "get": {
        "summary": "Get details for given cookbook from partner or editor user",
        "operationId": "public-cookbook-detail",
        "tags": [
          "User Public Cookbooks"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "User uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Coookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search through cookbooks by title",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cookbook details",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/cookbook"
                }
              }
            }
          },
          "404": {
            "description": "User or Public Cookbook not found (Not public, empty or not existant)"
          }
        }
      }
    },
    "/users/{uuid-or-slug}/cookbooks/{cookbook-uuid}/recipes/": {
      "get": {
        "summary": "Get recipes for this public user cookbook",
        "operationId": "public-cookbook-recipes-list",
        "tags": [
          "User Public Cookbooks"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "User uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all Recipes for the given cookbook",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feeditem_pagination"
                }
              }
            }
          },
          "404": {
            "description": "User or Public Cookbook not found (Not public, empty or not existant)"
          }
        }
      }
    },
    "/users/{uuid-or-slug}/cookbooks/{cookbook-uuid}/items/": {
      "get": {
        "summary": "Get feed items (recipes and articles) for this public user cookbook",
        "operationId": "public-cookbook-items-list",
        "tags": [
          "User Public Cookbooks"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "User uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Coookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search through cookbooks by title",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all Feed-Items (Recipes or Articles) from the given cookbook",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feeditem_pagination"
                }
              }
            }
          },
          "404": {
            "description": "User or Public Cookbook not found"
          }
        }
      }
    },
    "/users/me/cookbooks/": {
      "get": {
        "summary": "Get all cookbooks for the currently authenticated user",
        "operationId": "cookbook-list",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "feed_item",
            "in": "query",
            "description": "A feed item (article or recipe) uuid. If passed, will only return cookbooks whose item is saved in",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search through cookbooks by title",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get a paginated list of Cookbooks",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/cookbook_pagination"
                }
              }
            }
          },
          "403": {
            "description": "User not authenticated"
          }
        }
      },
      "post": {
        "summary": "Create a cookbook for the currently authenticated user User",
        "description": "Image is the image-uuid for cover-image",
        "operationId": "cookbook-create",
        "tags": [
          "User Cookbooks"
        ],
        "requestBody": {
          "description": "Title is mandatory. `feed_items` is deprecated - use `feed_item_id` for internal feeditem or `external_url` for external recipe. user `feed_item_id` for existing external-recipe.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/cookbook"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/": {
      "get": {
        "summary": "Get the given cookbook for the currently authenticated user",
        "operationId": "cookbook-detail",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get this Cookbook details",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/cookbook"
                }
              }
            }
          },
          "404": {
            "description": "Cookbook not found"
          }
        }
      },
      "put": {
        "summary": "Update a Cookbook for the currently authenticated User",
        "description": "Image is the image-uuid for cover-image",
        "operationId": "cookbook-update",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Updates the title for the cookbook",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_change_title"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "delete": {
        "summary": "Delete a Cookbook for the currently authenticated User",
        "operationId": "cookbook-delete",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/recipes/": {
      "get": {
        "deprecated": true,
        "summary": "See `/users/me/cookbooks/cookbook-uuid/items/`. This endpoints return internal recipes and articles only)\n",
        "operationId": "cookbook-get-recipes-list",
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "tags": [
          "UserCookbooksRecipes"
        ],
        "responses": {
          "200": {
            "description": "See `/users/me/cookbooks/cookbook-uuid/items/`"
          }
        }
      },
      "post": {
        "deprecated": true,
        "summary": "See `/users/me/cookbooks/{cookbook-uuid}/items/` this endpoint adds internal recipes and articles only\n",
        "operationId": "cookbook-create-ecipes-list",
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "tags": [
          "UserCookbooksRecipes"
        ],
        "responses": {
          "200": {
            "description": "See `/users/me/cookbooks/{cookbook-uuid}/items/`"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/recipes/{feeditem-uuid}/": {
      "put": {
        "deprecated": true,
        "summary": "See `/users/me/cookbooks/cookbook-uuid/items/feeditem-uuid`. Move an internal recipe or article from one cookbook to another\n",
        "operationId": "cookbook-recipe-move",
        "tags": [
          "UserCookbooksRecipes"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "feeditem-uuid",
            "in": "path",
            "description": "Internal Article or Recipe uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The returned id is the new cookbook-uuid",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_update_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "delete": {
        "deprecated": true,
        "summary": "See `/users/me/cookbooks/cookbook-uuid/items/feeditem-uuid`. Delete an internal recipe or article from a cookbook\n",
        "operationId": "cookbook-recipe-delete",
        "tags": [
          "UserCookbooksRecipes"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "feeditem-uuid",
            "in": "path",
            "description": "Internal Recipe or Article uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/items/": {
      "get": {
        "summary": "List all items for the given cookbook",
        "operationId": "cookbook-items-list",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search through items of this cookbook by title",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all items (internal recipes, external recipes and articles) from the given cookbook",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feeditem_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add Internal Recipe, Article or saved-external-recipe to the given cookbook",
        "operationId": "cookbook-item-create",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The Article, Internal Recipe or saved-external-recipe uuid - can not already have item with this id in cookbook",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_recipes_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exist"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/external-items/": {
      "post": {
        "summary": "Add an external recipe to the given cookbook",
        "operationId": "cookbook-external-recipes-create",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "URL of the external recipe - can not already have recipe with this url in cookbook",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_externalrecipes_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful - recipe payload returned",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "202": {
            "description": "Operation successful - recipe is being fetched. Rerun the request to get the recipe."
          },
          "403": {
            "description": "Forbidden. When user is not logged in or does not have permission to run the operation (not premium)"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/users/me/cookbooks/{cookbook-uuid}/items/{item-uuid}/": {
      "put": {
        "summary": "Move an item from the given cookbook to another",
        "operationId": "cookbook-item-move",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Origin Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "item-uuid",
            "in": "path",
            "description": "Item uuid (external recipe, internal recipe or article) - id can not already be in new cookbook",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "id should be the destination cookbook-uuid",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cookbook_update_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "delete": {
        "summary": "Delete an item from the given cookbook",
        "operationId": "cookbook-item-delete",
        "tags": [
          "User Cookbooks"
        ],
        "parameters": [
          {
            "name": "cookbook-uuid",
            "in": "path",
            "description": "Cookbook uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "item-uuid",
            "in": "path",
            "description": "Item uuid (external recipe, internal recipe or article)",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Cookbook does not exists"
          }
        }
      }
    },
    "/shopping-tips/": {
      "get": {
        "tags": [
          "Shopping Tips (Affiliate Pages)"
        ],
        "summary": "Get shopping tips grouped by categories",
        "description": "Returns a paginated list of categories containing shopping tips.\nEach category includes its basic information and a list of associated shopping tips (if not in simplified output mode).\n",
        "parameters": [
          {
            "name": "tips_per_category",
            "in": "query",
            "description": "Number of tips to return per category",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 4
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Return simplified version (just categories, no tips per category)",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number for pagination",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Shopping Tips (Affiliate Pages)",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/shopping_tips_list"
                }
              }
            }
          }
        }
      }
    },
    "/shopping-tips/{category_slug}/": {
      "get": {
        "tags": [
          "Shopping Tips (Affiliate Pages)"
        ],
        "summary": "Get shopping tips for a specific category",
        "description": "Returns a paginated list of shopping tips for the specified category",
        "parameters": [
          {
            "name": "category_slug",
            "in": "path",
            "description": "Slug of the category",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Return simplified version of articles",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number for pagination",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Shopping Tip (Article) with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/shopping_tips_category"
                }
              }
            }
          },
          "404": {
            "description": "Shopping Tip (Article) not found"
          }
        }
      }
    },
    "/shopping-tips/{category_slug}/{uuid-or-slug}/": {
      "get": {
        "summary": "Details of given Shopping Tip",
        "operationId": "shopping-tip-detail",
        "tags": [
          "Shopping Tips (Affiliate Pages)"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the shopping tip (article)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category_slug",
            "in": "path",
            "description": "slug of the shopping tip (article)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "draft",
            "in": "query",
            "description": "Get a shopping tip (article) with the current draft",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified shopping tip (article)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Shopping Tip (Article) with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/article"
                }
              }
            }
          },
          "404": {
            "description": "Shopping Tip (Article) not found"
          }
        }
      }
    },
    "/personalization/": {
      "get": {
        "summary": "Get personalization flags for user (or preferences set)",
        "operationId": "personalization-get",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the flags for personalization",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Obtain a preferences set (for logged out preferences usage)",
        "operationId": "personalization-post",
        "tags": [
          "Personalization"
        ],
        "requestBody": {
          "description": "When calling this endpoint with a logged out user, it will generate and create a new preferences set and return an uuid. This uuid can be used to set the preferences. If you call this endpoint with a logged in user, you will obtain the same result as calling the GET endpoint.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns a new personalization set for a logged out user, or the existing personalization set for a logged in user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update personalization flags for user (or preferences set)",
        "operationId": "personalization-put",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "--",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The payload with the flags to update and their values",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization"
                }
              }
            }
          },
          "404": {
            "description": "Preferences set not found (when user logged out)"
          }
        }
      }
    },
    "/personalization/preferences/": {
      "get": {
        "summary": "Get a list of personalization preferences",
        "operationId": "personalizationpreferences-get",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The current preferences and their values",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_preference_paginated"
                }
              }
            }
          },
          "404": {
            "description": "Preferences set not found (when user logged out)"
          }
        }
      },
      "post": {
        "summary": "Insert a new personalization preference",
        "operationId": "personalizationpreferences-post",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "A uuid identifying an option and an array of value uuids",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_preference_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_preference"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When provided preferences set does not belong to user"
          }
        }
      }
    },
    "/personalization/preferences/{uuid}/": {
      "get": {
        "summary": "Get a single personalization preference by uuid",
        "operationId": "personalizationpreferences-get-by-uuid",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for preference",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_preference"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When preference does not exist or does not belong to user/set"
          }
        }
      },
      "put": {
        "summary": "Update a single preference",
        "operationId": "personalizationpreferences-put-by-uuid",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for preference",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "--",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_preference_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation Successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_preference"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When preference does not exist or does not belong to user/set"
          }
        }
      },
      "delete": {
        "summary": "Delete a single preference",
        "operationId": "personalizationpreferences-delete-by-uuid",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for preference",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "set",
            "description": "The uuid of a Preferences Set (for logged-out usage)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation Successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When preference does not exist"
          }
        }
      }
    },
    "/personalization/options/": {
      "get": {
        "summary": "Get a list of available personalization options (and their values)",
        "operationId": "personalizationoptions-get",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "show_all",
            "in": "query",
            "description": "Show all options in the system (even those without values)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of options with associated available values",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_option_paginated"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Insert a new personalization option",
        "operationId": "personalizationoptions-post",
        "tags": [
          "Personalization Admin"
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_option_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When user does not have permsission for this operation (editor only)"
          }
        }
      }
    },
    "/personalization/options/{uuid}/": {
      "get": {
        "summary": "Get a single option information by its uuid",
        "operationId": "personalizationoptions-get-by-uuid",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the informatiom about the queried option",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_option"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. Option with given uuid does not exist"
          }
        }
      },
      "put": {
        "summary": "Globally update an option information",
        "operationId": "personalizationoptions-put-by-uuid",
        "tags": [
          "Personalization Admin"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_option_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful or detailed errors in case of failure",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When option does not exist"
          },
          "403": {
            "description": "NotAuthorized. When user does not have permission for this operation (only editor)"
          }
        }
      },
      "delete": {
        "summary": "Globally delete an option",
        "operationId": "personalizationoptions-delete-by-uuid",
        "tags": [
          "Personalization Admin"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When option does not exist"
          },
          "403": {
            "description": "NotAuthorized. When user does not have permission for this operation (only editor)"
          }
        }
      }
    },
    "/personalization/options/{uuid}/values/": {
      "get": {
        "summary": "Get available values for a given option uuid",
        "operationId": "personalizationoptions-values-get",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a paginated list of available values",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_option_value_paginated"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When option does not exist"
          }
        }
      },
      "post": {
        "summary": "Create a new value for an option",
        "operationId": "personalizationoptions-values-post",
        "tags": [
          "Personalization Admin"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_option_value_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_option_value"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When option does not exist"
          },
          "403": {
            "description": "NotAuthorized. When user does not have permission for this operation (only editor)"
          }
        }
      }
    },
    "/personalization/options/{option-uuid}/values/{value-uuid}/": {
      "get": {
        "summary": "Get a single value for an option by its uuid",
        "operationId": "personalizationoptions-values-get-by-uuid",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "name": "option-uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "value-uuid",
            "in": "path",
            "description": "Unique identifier for value",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the information about the queried value",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization_option_value"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When value does not exist"
          }
        }
      },
      "put": {
        "summary": "Globally update a value for an option",
        "operationId": "personalizationoptions-values-put-by-uuid",
        "tags": [
          "Personalization Admin"
        ],
        "parameters": [
          {
            "name": "option-uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "value-uuid",
            "in": "path",
            "description": "Unique identifier for value",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/personalization_option_value_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When value or option do not exist"
          },
          "403": {
            "description": "NotAuthorized. When user does not have permission for this operation (only editor)"
          }
        }
      },
      "delete": {
        "summary": "Globally delete a value for an option",
        "operationId": "personalizationoptions-values-delete-by-uuid",
        "tags": [
          "Personalization Admin"
        ],
        "parameters": [
          {
            "name": "option-uuid",
            "in": "path",
            "description": "Unique identifier for option",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "value-uuid",
            "in": "path",
            "description": "Unique identifier for value",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successful",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When value or option do not exist"
          },
          "403": {
            "description": "NotAuthorized. When user does not have permission for this operation (only editor)"
          }
        }
      }
    },
    "/tags/": {
      "get": {
        "summary": "List Tags",
        "operationId": "tag-list",
        "tags": [
          "Tags"
        ],
        "parameters": [
          {
            "name": "hidden",
            "in": "query",
            "description": "Display hidden tags with `hidden=True`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all tags",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/tag_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/tags/{slug}/": {
      "get": {
        "summary": "Details of given Tag",
        "operationId": "tag-detail",
        "tags": [
          "Tags"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "description": "Tag unique slug",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get tag with the specified slug",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/tag"
                }
              }
            }
          },
          "404": {
            "description": "Tag not found"
          }
        }
      }
    },
    "/ingredients/": {
      "get": {
        "summary": "List Ingredients",
        "operationId": "ingredient-list",
        "tags": [
          "Ingredients"
        ],
        "parameters": [
          {
            "name": "is_partner",
            "in": "query",
            "description": "Set to 1 or true to filter by partner ingredients, 0 or false to filter by non-partner ingredients, or leave empty to get all ingredients",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_searcheable",
            "in": "query",
            "description": "Set to 1 or true to filter by ingredients explictily marked as searcheable, 0 or false to explicityl exclude them from the results, or leave empty to get all ingredients",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all ingredients",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/ingredients/{uuid}/": {
      "get": {
        "summary": "Details of given ingredient",
        "operationId": "ingredient-detail",
        "tags": [
          "Ingredients"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Ingredient uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get ingredient details for the given uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient"
                }
              }
            }
          },
          "404": {
            "description": "Ingredient not found"
          }
        }
      }
    },
    "/ingredients/additional-information/": {
      "get": {
        "summary": "List Additional Information entries for all Ingredients",
        "operationId": "ingredient-additional-information-list",
        "tags": [
          "Ingredients"
        ],
        "responses": {
          "200": {
            "description": "Get all ingredients additional information",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_additionalinformation_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/ingredients/additional-information/{uuid}/": {
      "get": {
        "summary": "Details for given Ingredients additional Information",
        "operationId": "ingredient-additionalinformation-detail",
        "tags": [
          "Ingredients"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Ingredient Additional Information uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ingredients additional Information Detail",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/additional_information"
                }
              }
            }
          },
          "404": {
            "description": "Ingredient Additional information not found"
          }
        }
      }
    },
    "/ingredients/units/": {
      "get": {
        "summary": "List ingredient units",
        "operationId": "ingredient-units-list",
        "tags": [
          "Ingredients"
        ],
        "responses": {
          "200": {
            "description": "Get all ingredients units. If Many does not exists, one is filled instead.",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_unit_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/ingredients/units/{uuid}/": {
      "get": {
        "summary": "Details on the given Ingredients Unit",
        "operationId": "ingredient-unit-detail",
        "tags": [
          "Ingredients"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Ingredient Unit uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ingredient Unit Details. If Many does not exists, one is filled instead.",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/unit"
                }
              }
            }
          },
          "404": {
            "description": "Ingredient Unit not found"
          }
        }
      }
    },
    "/ingredients/promoted/": {
      "get": {
        "summary": "Obtains the list of top promoted ingredients",
        "operationId": "ingredient-promoted-list",
        "tags": [
          "Ingredients"
        ],
        "responses": {
          "200": {
            "description": "Get all promoted ingredients",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_promoted_list"
                }
              }
            }
          }
        }
      }
    },
    "/qa/users/me/": {
      "put": {
        "summary": "Update currently authenticated user",
        "operationId": "qa-user-update",
        "tags": [
          "QA"
        ],
        "requestBody": {
          "description": "desc",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/qa_user_update_json"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/qa_user_public_update_image"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/user"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      }
    },
    "/qa/users/me/{pk}/": {
      "delete": {
        "summary": "Delete a given User",
        "operationId": "qa-user-me-delete",
        "tags": [
          "QA"
        ],
        "parameters": [
          {
            "name": "pk",
            "in": "path",
            "description": "delete an user by uuid , email or name",
            "required": true,
            "schema": {
              "type": "string",
              "format": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When User does not exists"
          }
        }
      }
    },
    "/qa/ugc/recipe/{pk}/accept/": {
      "post": {
        "summary": "Accept / Approve given UGC recipe",
        "operationId": "qa-ugc-accept",
        "tags": [
          "QA"
        ],
        "parameters": [
          {
            "name": "pk",
            "in": "path",
            "description": "Accept an ugc recipe by uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "string"
            }
          }
        ],
        "requestBody": {
          "description": "desc",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/qa_ugc_recipe_accept"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When Ugc recipe does not exists"
          }
        }
      }
    },
    "/qa/ugc/recipe/{pk}/reject/": {
      "post": {
        "summary": "Reject given UGC recipe",
        "operationId": "qa-ugc-reject",
        "tags": [
          "QA"
        ],
        "parameters": [
          {
            "name": "pk",
            "in": "path",
            "description": "Reject an ugc recipe by uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "NotFound. When Ugc recipe does not exists"
          }
        }
      }
    },
    "/personalization/feed/": {
      "get": {
        "summary": "Get the personalized feed for the current user",
        "operationId": "personalization-feed-get",
        "tags": [
          "Personalization"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "refresh",
            "description": "Indicate if you want a fresh feed",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "deep_refresh",
            "description": "Get the current feed and issue a task to fully refresh it. Note that this feed response will not be the fully re-generated feed as it is asynchronously being generated. Please keep pooling this endpoint until all generated_at fields of the collections are updated.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "exclude_liked_saved_content",
            "description": "Specifies whether to exclude content liked and saved by user from personalized content. Defaults to True.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the personalized feed.",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/personalization-feed"
                }
              }
            }
          }
        }
      }
    },
    "/videos/": {
      "get": {
        "summary": "List published videos, ordered by `-published` for the current given language",
        "operationId": "video-list",
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "types",
            "in": "query",
            "description": "Get video by types eg. **'howto,recipe'**. Available types **['howto', 'recipe', 'article']**.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "description": "Get video by tags eg. **'partner,meal'**.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "query",
            "description": "Get video by slug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/video_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/videos/{uuid-or-slug}/": {
      "get": {
        "summary": "Details for given Video uuid or slug (ignores publishing date)",
        "operationId": "video-detail",
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "Video uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "draft",
            "in": "query",
            "description": "Get the latest draft version - for preview eg. **true** or **false**",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/video"
                }
              }
            }
          },
          "404": {
            "description": "Video not found"
          }
        }
      }
    },
    "/videos/view/vimeo/{remote-id}/": {
      "post": {
        "summary": "Save a video view for the given Video vimeo-remote-id",
        "operationId": "video-save-view",
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "remote-id",
            "in": "path",
            "description": "Vimeo remote-id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Operation successfull"
          },
          "404": {
            "description": "Video not found"
          }
        }
      }
    },
    "/videos/view/{video-id}/": {
      "post": {
        "summary": "Save a video view for the given Video uuid",
        "operationId": "video-save-view-videoid",
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "video-id",
            "in": "path",
            "description": "Video uuid",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Operation successfull"
          },
          "404": {
            "description": "Video not found"
          }
        }
      }
    },
    "/videos/{uuid-or-slug}/recommendations/": {
      "get": {
        "summary": "List Recommendations for given Video uuid or slug",
        "operationId": "video-recommendations",
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "Video uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/video_pagination"
                }
              }
            }
          },
          "404": {
            "description": "Video not found"
          }
        }
      }
    },
    "/authenticate/": {
      "post": {
        "deprecated": true,
        "summary": "Authenticate and get a bearer token for the subsequent calls to the api",
        "operationId": "autenticate",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "This endpoint can be called also without a requestBody. Then an access Token will be returned.",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/apple_auth"
                  },
                  {
                    "$ref": "#/components/schemas/google_auth"
                  },
                  {
                    "$ref": "#/components/schemas/facebook_auth"
                  },
                  {
                    "$ref": "#/components/schemas/email_auth"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success for `apple_auth`, `google_auth`, `facebook_auth` and `email_auth` an `user_token` schema will be returned. On empty body an `access_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/access_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/authenticate/appleid/": {
      "post": {
        "summary": "Authenticate using Apple ID, get a bearer token for subsequent calls",
        "operationId": "autenticate-appleid",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "This endpoint can be called also without a requestBody. Then an access Token will be returned.",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/apple_auth"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success an `user_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/authenticate/google/": {
      "post": {
        "summary": "Authenticate using Google Account, get a bearer token for subsequent calls",
        "operationId": "autenticate-google",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "This endpoint can be called also without a requestBody. Then an access Token will be returned.",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/google_auth"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success an `user_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/authenticate/facebook/": {
      "post": {
        "summary": "Authenticate using Facebook Account, get a bearer token for the subsequent calls",
        "operationId": "autenticate-facebook",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "This endpoint can be called also without a requestBody. Then an access Token will be returned.",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/facebook_auth"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success an `user_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/authenticate/credentials/": {
      "post": {
        "summary": "authenticate and get a bearer token for the subsequent calls to the api",
        "operationId": "autenticate-credentials",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "This endpoint can be called also without a requestBody. Then an access Token will be returned.",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/email_auth"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success an `user_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/register/": {
      "post": {
        "summary": "Create a new user with email and password",
        "operationId": "register-credentials",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "although `installation_id` is a required field, this can be set to a dummy value if not used (ie for web registration)\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/email_registration"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success an `user_token` schema will be returned. If where is an error `errors` schema will be returned.\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/user_token"
                    },
                    {
                      "$ref": "#/components/schemas/errors"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/users/validate/email": {
      "get": {
        "summary": "validate email link - generated by ultron on account creation (note no trailing slash on this endpoint)",
        "operationId": "validate-email",
        "tags": [
          "Authentication"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "email of the user",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hash",
            "in": "query",
            "description": "hash created by ultron with email and secret key to compare",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "On success empty error schema is returned, otherwise error is given\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/password/forgot/": {
      "post": {
        "summary": "Send out a password forgot e-mail if the account exists",
        "operationId": "password-forgot",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "email",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/forgot_password"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success empty error schema is returned, otherwise error is given\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/password/reset/": {
      "get": {
        "summary": "Reset the user password (needs password forgot payload token)",
        "operationId": "password-reset",
        "tags": [
          "Authentication"
        ],
        "parameters": [
          {
            "name": "new_password",
            "in": "query",
            "description": "new password",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "password_token",
            "in": "query",
            "description": "password token generated by ultron when sending reset link",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "On success empty error schema is returned, otherwise error is given\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          }
        }
      }
    },
    "/installations/": {
      "post": {
        "summary": "Create a new installation in the database",
        "operationId": "create-installation",
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "Only id is required",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/create_installation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "On success Installation schema is returned, otherwise error is given. For compatibility reasons, errors key is always present in the response, and might be \"Null\" when there are no errors.",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/errors"
                    },
                    {
                      "$ref": "#/components/schemas/installation"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/categories/": {
      "get": {
        "summary": "List Categories",
        "operationId": "category-list",
        "tags": [
          "Categories"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "query",
            "description": "Category Slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified category schema",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "children_of",
            "in": "query",
            "description": "Get all children of the category with this uuid. Use root for root category",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "embed_children",
            "in": "query",
            "description": "When this is set to 1 the children (simplified) of each category is embedded",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all categories",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/category_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/categories/{uuid-or-slug}/": {
      "get": {
        "summary": "Details of given Category",
        "operationId": "category-detail",
        "tags": [
          "Categories"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "Category id or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified category schema",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "embed_children",
            "in": "query",
            "description": "When this is 1 the children (simplified) of the category is embedded",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Category with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/category"
                }
              }
            }
          },
          "404": {
            "description": "Category not found"
          }
        }
      }
    },
    "/categories/{uuid-or-slug}/content-meta/": {
      "get": {
        "summary": "Content meta of given Category",
        "operationId": "category-detail-content-meta",
        "tags": [
          "Categories"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the category",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get content meta for Category with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta_list"
                }
              }
            }
          },
          "404": {
            "description": "Category not found"
          }
        }
      },
      "post": {
        "summary": "Add a new content meta",
        "operationId": "category-content-meta-create",
        "tags": [
          "Categories Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the category",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_meta_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Get content meta for Category with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_meta"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Category not found"
          }
        }
      },
      "delete": {
        "summary": "Delete a content meta by key",
        "operationId": "category-content-meta-delete",
        "tags": [
          "Categories Admin"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "id or slug of the category",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "description": "unique key of Content Meta to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A confirmation or error deleting the target content meta"
          },
          "403": {
            "description": "Forbidden \u2014\u00a0user does not have editor permissions"
          },
          "404": {
            "description": "Category or Content Meta key not found"
          }
        }
      }
    },
    "/content-collections/": {
      "get": {
        "summary": "List available content collections",
        "operationId": "content-collection-get-list",
        "tags": [
          "Content Collections"
        ],
        "responses": {
          "200": {
            "description": "Returns a paginated listing of all available collections and their titles",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collections_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add a new content collection",
        "operationId": "content-collection-create",
        "tags": [
          "Content Collections Admin"
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_collection_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns successfully created content collection",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When user does not have permsission for this operation (editor only)"
          }
        }
      }
    },
    "/content-collections/{uuid}/": {
      "get": {
        "summary": "Get a single content collection",
        "operationId": "content-collection-get-detail",
        "tags": [
          "Content Collections"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single content collection",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection_detail"
                }
              }
            }
          },
          "404": {
            "description": "Content collection not found"
          }
        }
      },
      "delete": {
        "summary": "Delete a content collection",
        "operationId": "content-collection-delete",
        "tags": [
          "Content Collections Admin"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Returns a message that deleting the object has succeeded",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "404": {
            "description": "Content collection item not found"
          }
        }
      },
      "put": {
        "summary": "Edit a content collection",
        "operationId": "content-collection-edit",
        "tags": [
          "Content Collections Admin"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_collection_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns successfully created content collection",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When user does not have permsission for this operation (editor only)"
          }
        }
      }
    },
    "/content-collections/{uuid}/items/": {
      "get": {
        "summary": "List available content collection items for a given collection",
        "operationId": "content-collection-item-get-list",
        "tags": [
          "Content Collections"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a paginated listing of all available content collection items",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection_items_pagination"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add a new content collection item",
        "operationId": "content-collection-item-create",
        "tags": [
          "Content Collections Admin"
        ],
        "requestBody": {
          "description": "The authenticated user must be of the type \"editor\" and have CMS access",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/content_collection_item_body"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Unique identifier for a collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns successfully created content collection item",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection_item"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When user does not have permsission for this operation (editor only)"
          }
        }
      }
    },
    "/content-collections/{collection-uuid}/items/{item-uuid}/": {
      "get": {
        "summary": "List a single content collection item",
        "operationId": "content-collection-item-get-detail",
        "tags": [
          "Content Collections"
        ],
        "parameters": [
          {
            "name": "collection-uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "item-uuid",
            "in": "path",
            "description": "Unique identifier for a single content item",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single content collection item",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/content_collection_item"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Remove a single content collection item from its associated collection",
        "operationId": "content-collection-item-delete",
        "tags": [
          "Content Collections Admin"
        ],
        "parameters": [
          {
            "name": "collection-uuid",
            "in": "path",
            "description": "Unique identifier for content collection",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "item-uuid",
            "in": "path",
            "description": "Unique identifier for a single content item",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a message that deleting the object has succeeded",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "NotAuthorized. When user does not have permsission for this operation (editor only)"
          },
          "404": {
            "description": "NotFound. Collection or item does not exist"
          }
        }
      }
    },
    "/feed/": {
      "get": {
        "summary": "Get Feed",
        "operationId": "feed-list",
        "tags": [
          "Feed"
        ],
        "parameters": [
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified feed schema (first two items are unrolled, remaining are simplified)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "order",
            "in": "query",
            "description": "Get first-time-feed with `order=featured`",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "query",
            "description": "Get preview- feed & poll with `date=2000-01-01T00:00`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Feed the automated.tabs is an enum with these values: ['ks', 'community']\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feed_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/feed-reduced/": {
      "get": {
        "summary": "Get Reduced Feed",
        "operationId": "feed-reduced-list",
        "tags": [
          "Feed"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "description": "Get preview- feed & poll with `date=2000-01-01T00:00`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Reduced Feed (Only module display information) the automated.tabs is an enum with these values: ['ks', 'community']\n",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/feed_reduced_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/search/featured/": {
      "get": {
        "summary": "List all featured search categories",
        "operationId": "search-category-list",
        "tags": [
          "Search Categories"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "query",
            "description": "Get category by slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all featured search categories",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/search_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/search/featured/{uuid-or-slug}/": {
      "get": {
        "summary": "Details for given Search Category",
        "operationId": "search-category-detail",
        "tags": [
          "Search Categories"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "Category uuid or slug",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get featured search categories with the specified uuid or slug",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/search_category"
                }
              }
            }
          },
          "404": {
            "description": "Category not found"
          }
        }
      }
    },
    "/health/": {
      "get": {
        "summary": "API Health Check - returns 200 ok when healthy",
        "operationId": "other-healthcheck",
        "tags": [
          "Other"
        ],
        "responses": {
          "200": {
            "description": "Healthy"
          }
        }
      }
    },
    "/redirect/": {
      "get": {
        "summary": "Return list of redirection rules (paths and where they should be redirected to)",
        "operationId": "other-redirect",
        "tags": [
          "Other"
        ],
        "responses": {
          "200": {
            "description": "redirects"
          }
        }
      }
    },
    "/search/suggestions/": {
      "get": {
        "summary": "Return static list of search suggestions",
        "operationId": "other-search-suggestions",
        "tags": [
          "Other"
        ],
        "responses": {
          "200": {
            "description": "list of suggestions"
          }
        }
      }
    },
    "/feed-item/{uuid-or-pk}/": {
      "get": {
        "summary": "Return Recipe or Article details based on provided uuid",
        "operationId": "other-feeditem",
        "tags": [
          "Other"
        ],
        "parameters": [
          {
            "name": "uuid-or-pk",
            "in": "path",
            "description": "uuid or pk id of the recipe or article",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns either an Article or Recipe(recipe schema here for example)",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/recipe"
                    },
                    {
                      "$ref": "#/components/schemas/article"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "feed item not found"
          }
        }
      }
    },
    "/poll/vote/": {
      "post": {
        "summary": "Submit a poll vote",
        "operationId": "other-poll",
        "tags": [
          "Other"
        ],
        "requestBody": {
          "description": "Submitting a poll vote requires an installation_id and a option_id. option_id is a string that is composed by joining the poll_id and vote_id of choice ('<poll_id>|<vote_id>')",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/poll_vote_body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Poll vote submitted",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_id_response"
                }
              }
            }
          },
          "404": {
            "description": "Poll not found or Installation not found"
          }
        }
      }
    },
    "/stats/community-recipes/": {
      "get": {
        "summary": "Get stats on current state of UGC Recipes",
        "operationId": "stats-community-recipes",
        "tags": [
          "Stats"
        ],
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "description": "Filter by language (en, de, zh only)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get stats",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/stats"
                }
              }
            }
          }
        }
      }
    },
    "/users/{uuid-or-slug}/": {
      "get": {
        "summary": "Details of given Public User",
        "operationId": "user-public-detail",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "name": "uuid-or-slug",
            "in": "path",
            "description": "User uuid or slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get user by uuid or slug",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/user_public"
                }
              }
            }
          },
          "404": {
            "description": "User not found"
          }
        }
      }
    },
    "/users/me/": {
      "get": {
        "summary": "Details on currently authenticated user",
        "operationId": "user-me",
        "tags": [
          "User"
        ],
        "responses": {
          "200": {
            "description": "Returns the currently authenticated user details",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/user"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "put": {
        "summary": "Update currently authenticated user",
        "operationId": "user-update",
        "tags": [
          "User"
        ],
        "requestBody": {
          "description": "You can choose to update the user base information using a JSON Schema or update the user profile image using a multipart/form-data request containing the \"image\" object. Image validations include being square sized (width and height are equal), at least 300px or bigger, and being less than 5MB in size.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user_public_update_json"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/user_public_update_image"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/user"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "delete": {
        "summary": "Delete currently authenticated user",
        "operationId": "user-delete",
        "tags": [
          "User"
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is KS user or not logged in"
          }
        }
      }
    },
    "/users/{user-id}/recipes/": {
      "get": {
        "summary": "Get all public recipes for the given user",
        "operationId": "user-recipe-list",
        "tags": [
          "User Public Recipes"
        ],
        "parameters": [
          {
            "name": "user-id",
            "in": "path",
            "description": "User uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all recipes for this user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_pagination"
                }
              }
            }
          },
          "404": {
            "description": "User not found"
          }
        }
      }
    },
    "/users/{user-id}/recipes/{recipe-id}/": {
      "get": {
        "summary": "Public Recipe details for given user",
        "operationId": "user-recipe-detail",
        "tags": [
          "User Public Recipes"
        ],
        "parameters": [
          {
            "name": "user-id",
            "in": "path",
            "description": "User uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "recipe-id",
            "in": "path",
            "description": "Recipe uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Recipe with the specified user and recipe id",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "Recipe or User not found"
          }
        }
      }
    },
    "/users/me/favorite-ingredients/": {
      "get": {
        "summary": "List all Favorite Ingredients from currently authenticated user",
        "operationId": "user-me-list-favorite-ingredients",
        "tags": [
          "User Private Favorite Ingredients"
        ],
        "responses": {
          "200": {
            "description": "Get all Favorite Ingredients from current user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_pagination"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in-"
          }
        }
      },
      "post": {
        "summary": "Add Favorite Ingredients",
        "operationId": "user-favorite-ingredients-create",
        "tags": [
          "User Private Favorite Ingredients"
        ],
        "requestBody": {
          "description": "Add Favorite Ingredients to the currently authenticated user. The `ingredients` field is required and must be list of valid ingredient UUID. Operation will fail if any of the passed ingredients is not valid.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ingredient_favorite_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/ingredient_pagination"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Ingredient does not exists"
          }
        }
      },
      "delete": {
        "summary": "Delete Favorite Ingredients",
        "description": "Use DELETE `/api/users/me/favorite-ingrediets/all/` to delete every ingredient in the user's favorite list.\n",
        "operationId": "user-favorite-ingredients-delete",
        "tags": [
          "User Private Favorite Ingredients"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "query",
            "description": "Ingredient uuid",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When Ingredient does not exists"
          }
        }
      }
    },
    "/users/me/recipes/": {
      "get": {
        "summary": "List all Recipes from currently authenticated user",
        "operationId": "user-me-list-recipes",
        "tags": [
          "User Private Recipes"
        ],
        "parameters": [
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all Recipes from current user",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_pagination"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          }
        }
      },
      "post": {
        "summary": "Create a new Private Recipe",
        "operationId": "user-recipe-create",
        "tags": [
          "User Private Recipes"
        ],
        "requestBody": {
          "description": "## detailed notes for using this endpoint:\n### uuids:\n- for fields that are uuids (`image` `ingredient_id`, `unit_id`, `ingredient_additional_information_id`, `ingredient_characteristic_id`, `image_id`, `video_id` etc) :\n- you can not use non-uuid\n- omitting the field, putting null, or empty string will work - null is recommended\n### ingredients:\n- you must provide atleast one of `name` or `ingredient_id`, without these it wont error but this ingredient will be ignored. if both are provided the `name` field is ignored\n- from the api-perspective the rest are optional - if no amount/unit is provided none is returned etc. i dont know how clients handle these.\n- __important__ : __every__ valid uuid provided _MUST_ match with a uuid in the db for that item. if a `unit_id` is given in the `ingredient_id` field, or a `utensil_additional_information_id` in the `ingredient_additional_information_id` then the recipe __will not work__.\n### steps:\n- although you can omit `utensils` / `selected_ingredient_index` , if you have them in the json they can not be null , [] - empty list is the correct way to denote a list is not used.\n- `description` is required.\n- `selected_ingredient_index` is a reference to the ingredient list above. [0] means to include the 1st ingrediant from the list in this step. [2,4] means to include the 3rd and 5th. if it is out of range it will be ignored\n- the backend supports using the same ingredients for different steps (although at this stage clients do not allow this). splitting ingredients between steps is not supported.\n### utensils :\n- are embedded in the step (unlike ingredients), similar though you need to provide `name` or `utensil_id`  , if both are provided the `name` is ignored\n\n<details> <summary> FULL EXAMPLE JSON </summary>\n```\n{\n    \"title\": \"Red chilaquiles\",\n    \"difficulty\": \"easy\",\n    \"image_id\": \"9f7deaf1-7539-4c26-b4b8-af79e82ff712\",\n    \"servings\": {\n        \"amount\": 2,\n        \"type\": \"portion\"\n    },\n    \"chefs_note\": \"you can make your own sauce but this is the easy version. often serve with a fried egg or pulled chicken breast\",\n    \"tags\": [\"9d531987-ae3e-43c4-bc06-7848ddbc825f\"],\n    \"ingredients\": [{\n            \"name\": \"corn chips\",\n            \"amount\": 150.0,\n            \"unit_id\": \"81939ac3-6943-4be2-9842-e9ca99fd831d\",\n            \"additional_information_id\": null,\n            \"characteristic_id\": null\n        },\n        {\n            \"ingredient_id\": \"d359a8dd-9708-42e1-b290-5e1c079d16a5\",\n            \"amount\": 300.0,\n            \"unit_id\": \"81939ac3-6943-4be2-9842-e9ca99fd831d\",\n            \"additional_information_id\": null,\n            \"characteristic_id\": null\n        },\n        {\n            \"ingredient_id\": \"d0402a2e-5804-487d-b860-b3200482ad9e\",\n            \"amount\": 1.0,\n            \"unit_id\": \"7be4e87a-2957-43c9-9efb-ab7947c25281\",\n            \"additional_information_id\": null,\n            \"characteristic_id\": null\n        },\n        {\n            \"ingredient_id\": \"99e187a9-bbbc-4b95-8809-3916f97398e8\",\n            \"amount\": 0.5,\n            \"unit_id\": \"81939ac3-6943-4be2-9842-e9ca99fd831d\",\n            \"additional_information_id\": null,\n            \"characteristic_id\": null\n        },\n        {\n            \"ingredient_id\": \"f084f606-b16b-44bb-bc44-973a63af0670\",\n            \"amount\": 4.0,\n            \"unit_id\": \"44191cfe-a2dd-4e11-89a6-1594fce3731d\",\n            \"additional_information_id\": \"7bb5693f-c4ea-42b1-857d-b7baad5888ea\",\n            \"characteristic_id\": null\n        },\n        {\n            \"ingredient_id\": \"7f91c6b3-b748-4e42-afeb-06ea90d23a29\",\n            \"amount\": 1.0,\n            \"unit_id\": \"44191cfe-a2dd-4e11-89a6-1594fce3731d\",\n            \"additional_information_id\": \"7bb5693f-c4ea-42b1-857d-b7baad5888ea\",\n            \"characteristic_id\": \"e878c5d3-99c1-4703-b623-fddf9b69da5f\"\n        },\n        {\n            \"ingredient_id\": \"f35a951b-f320-43a1-94de-66582e547e2f\",\n            \"amount\": 1.0,\n            \"unit_id\": \"7818cfdb-c946-4ff8-99f8-1bea2f024aee\",\n            \"additional_information_id\": null,\n            \"characteristic_id\": null\n        }\n    ],\n    \"steps\": [{\n            \"description\": \"grate garlic into frying pan with cooking oil, stir until light brown\",\n            \"image_id\": \"10d50b09-9868-4a90-9da9-98f92d270a62\",\n            \"video_id\": null,\n            \"selected_ingredient_indices\": [3, 6],\n            \"utensils\": [{\n                \"utensil_id\": \"a2dd43a1-643c-4e7f-9502-4eccfd384edb\"\n            }]\n        },\n        {\n            \"description\": \"add tomato sauce to pan. let this cook for a bit\",\n            \"image_id\": \"af0fa325-612e-4459-8960-16915cad3c2f\",\n            \"video_id\": null,\n            \"selected_ingredient_indices\": [1],\n            \"utensils\": []\n        },\n        {\n            \"description\": \"add chilli oil paste\",\n            \"image_id\": \"e9d9f2ae-acf7-49cc-b26d-2804e9017047\",\n            \"video_id\": null,\n            \"selected_ingredient_indices\": [2],\n            \"utensils\": []\n        },\n        {\n            \"description\": \"add the corn chips, mix together in pan.\",\n            \"image_id\": \"74f593ab-7d28-448d-9dd4-847ef9b4dbad\",\n            \"video_id\": null,\n            \"selected_ingredient_indices\": [0],\n            \"utensils\": []\n        },\n        {\n            \"description\": \"add cheese and onion as garnish\",\n            \"image_id\": \"9bbf5576-9282-47b6-a3f4-54e8fd9ac92d\",\n            \"video_id\": null,\n            \"selected_ingredient_indices\": [4, 5],\n            \"utensils\": []\n        }\n    ]\n}\n```\n</details>\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/recipe_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_id_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When User Recipe does not exists"
          }
        }
      }
    },
    "/users/me/recipes/{uuid}/": {
      "get": {
        "summary": "Details of given Private Recipe",
        "operationId": "users-me-recipe-detail",
        "tags": [
          "User Private Recipes"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Private Recipe uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "simplified",
            "in": "query",
            "description": "Get simplified recipe schema",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Recipe with the specified uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "404": {
            "description": "User Recipe not found"
          }
        }
      },
      "put": {
        "summary": "Update the given Private Recipe",
        "operationId": "user-recipe-update",
        "tags": [
          "User Private Recipes"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Recipe uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "see [POST](#/UserPrivateRecipes/user-recipe-create) endpoint documentation for detailed description of using this endpoint",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/recipe_add_json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When User Recipe does not exists"
          }
        }
      },
      "delete": {
        "summary": "Delete a Private Recipe",
        "operationId": "users-me-delete-recipe",
        "tags": [
          "User Private Recipes"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "id of the recipe",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When User Recipe does not exists"
          }
        }
      }
    },
    "/users/me/recipes/{uuid}/submit/": {
      "post": {
        "summary": "Submits the given Private Recipe to UGC review.",
        "operationId": "user-recipe-submit",
        "tags": [
          "User Private Recipes"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "id of the recipe",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation successfull",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/form_id_response"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. When user is not logged in"
          },
          "404": {
            "description": "NotFound. When User Recipe does not exists"
          }
        }
      }
    },
    "/users/me/external-recipe-preview/": {
      "get": {
        "summary": "Previews an external recipe by providing an URL",
        "description": "*Returns:*\n* On URL Error: `{'errors': ['previewexternalrecipeform.url.is_not_valid', 'previewexternalrecipeform.url.is_empty']}`\n* On Recipe-Not-Exists in the page: `{}`\n* On Recipe Exists: `RECIPE-Vx-OBJECT`\n",
        "operationId": "user-recipe-external-preview",
        "tags": [
          "User External Recipes"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "URL to the external Recipe",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get Recipe with the specific uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/recipe"
                }
              }
            }
          },
          "202": {
            "description": "Recipe needs time to be processed. Retry after some time"
          },
          "403": {
            "description": "Forbidden. When user is not logged in or does not have permission to run this operation"
          },
          "404": {
            "description": "NotFound. When User Recipe does not exists"
          }
        }
      }
    },
    "/utensils/": {
      "get": {
        "summary": "List Utensils",
        "operationId": "utensil-list",
        "tags": [
          "Utensils"
        ],
        "responses": {
          "200": {
            "description": "Get all utensils",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/utensil_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/utensils/{uuid}/": {
      "get": {
        "summary": "Details for given Utensil",
        "operationId": "utensil-detail",
        "tags": [
          "Utensils"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Utensil uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get utensil with the specified uuid",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/utensil"
                }
              }
            }
          },
          "404": {
            "description": "Utensil not found"
          }
        }
      }
    },
    "/utensils/additional-information/": {
      "get": {
        "summary": "List Additional Information for all Utensils",
        "operationId": "utensil-additional-information-list",
        "tags": [
          "Utensils"
        ],
        "responses": {
          "200": {
            "description": "Get all utensils additional information",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/utensil_additionalinformation_pagination"
                }
              }
            }
          }
        }
      }
    },
    "/utensils/additional-information/{uuid}/": {
      "get": {
        "summary": "Details for given Utensil's Additional Information",
        "operationId": "utensil-additionalinformation-detail",
        "tags": [
          "Utensils"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "description": "Utensil Additional Information uuid",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Utensils Additional Information Detail",
            "content": {
              "application/vnd.ajns.kitchenstories+json; version=3": {
                "schema": {
                  "$ref": "#/components/schemas/additional_information"
                }
              }
            }
          },
          "404": {
            "description": "Utensil Additional Information not found"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Ultron-User"
      }
    },
    "schemas": {
      "additional_information": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      },
      "article": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "comments_count": {
                "type": "number"
              },
              "images_count": {
                "type": "number"
              },
              "like_count": {
                "type": "number"
              },
              "quality": {
                "type": "number"
              }
            },
            "required": [
              "comments_count",
              "images_count",
              "like_count",
              "quality"
            ]
          },
          "content": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/article_headline"
                },
                {
                  "$ref": "#/components/schemas/article_quote"
                },
                {
                  "$ref": "#/components/schemas/article_text"
                },
                {
                  "$ref": "#/components/schemas/article_recipes"
                },
                {
                  "$ref": "#/components/schemas/article_shopping_tips"
                },
                {
                  "$ref": "#/components/schemas/article_image_gallery"
                },
                {
                  "$ref": "#/components/schemas/article_video"
                },
                {
                  "$ref": "#/components/schemas/content_meta_carousel"
                },
                {
                  "$ref": "#/components/schemas/article_proscons"
                },
                {
                  "$ref": "#/components/schemas/article_cta_button"
                }
              ]
            }
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          },
          "content_meta": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          },
          "categories": {
            "type": "object",
            "properties": {
              "main": {
                "$ref": "#/components/schemas/category_simplified"
              },
              "additional": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/category_simplified"
                }
              }
            }
          }
        },
        "required": [
          "content_id",
          "type",
          "publishing",
          "title",
          "content",
          "slug",
          "url",
          "subtitle",
          "meta",
          "user_reactions",
          "author",
          "id",
          "image"
        ]
      },
      "article_reduced": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "author": {
            "$ref": "#/components/schemas/user_public_reduced"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "like_count": {
                "type": "number"
              }
            },
            "required": [
              "like_count",
              "quality"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          }
        },
        "required": [
          "type",
          "publishing",
          "title",
          "url",
          "slug",
          "user_reactions",
          "author",
          "id",
          "image"
        ]
      },
      "article_headline": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "headline": {
            "type": "object",
            "properties": {
              "level": {
                "type": "number"
              },
              "text": {
                "type": "string"
              }
            },
            "required": [
              "level",
              "text"
            ]
          }
        },
        "required": [
          "type",
          "headline"
        ],
        "additionalProperties": false
      },
      "article_image_gallery": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "image_collection": {
            "type": "object",
            "properties": {
              "images": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "image": {
                      "$ref": "#/components/schemas/image"
                    },
                    "link": {
                      "type": "string"
                    },
                    "subtitle": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "image"
                  ]
                }
              }
            },
            "required": [
              "images"
            ]
          }
        },
        "required": [
          "type",
          "image_collection"
        ]
      },
      "article_quote": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "quote": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "author": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ]
          }
        },
        "required": [
          "type",
          "quote"
        ],
        "additionalProperties": false
      },
      "article_recipes": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "recipes": {
            "type": "object",
            "properties": {
              "recipes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/recipe_simplified"
                }
              }
            },
            "required": [
              "recipes"
            ]
          }
        },
        "required": [
          "recipes",
          "type"
        ]
      },
      "article_shopping_tips": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "shopping_tips": {
            "type": "object",
            "properties": {
              "shopping_tips": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/article_simplified"
                }
              }
            },
            "required": [
              "shopping_tips"
            ]
          }
        },
        "required": [
          "type",
          "shopping_tips"
        ]
      },
      "article_simplified": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "comments_count": {
                "type": "number"
              },
              "images_count": {
                "type": "number"
              },
              "like_count": {
                "type": "number"
              },
              "quality": {
                "type": "number"
              }
            },
            "required": [
              "comments_count",
              "images_count",
              "like_count",
              "quality"
            ]
          }
        },
        "required": [
          "content_id",
          "type",
          "publishing",
          "title",
          "slug",
          "url",
          "subtitle",
          "user_reactions",
          "author",
          "id",
          "image"
        ]
      },
      "article_text": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "text": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              }
            },
            "required": [
              "text"
            ]
          }
        },
        "required": [
          "text",
          "type"
        ],
        "additionalProperties": false
      },
      "article_video": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "video": {
            "type": "object",
            "properties": {
              "video": {
                "$ref": "#/components/schemas/video"
              },
              "subtitle": {
                "type": "string"
              }
            },
            "required": [
              "video"
            ]
          }
        },
        "required": [
          "type",
          "video"
        ]
      },
      "article_proscons": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "proscons": {
            "type": "object",
            "properties": {
              "pros_title": {
                "type": "string"
              },
              "pros": {
                "type": "string"
              },
              "cons_title": {
                "type": "string"
              },
              "cons": {
                "type": "string"
              }
            },
            "required": [
              "pros",
              "pros_title",
              "cons",
              "cons_title"
            ]
          }
        },
        "required": [
          "type",
          "proscons"
        ]
      },
      "article_cta_button": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "cta_button": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "link": {
                "type": "string"
              }
            },
            "required": [
              "text",
              "link"
            ]
          }
        },
        "required": [
          "cta_button",
          "type"
        ]
      },
      "shopping_tio": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "comments_count": {
                "type": "number"
              },
              "images_count": {
                "type": "number"
              },
              "like_count": {
                "type": "number"
              },
              "quality": {
                "type": "number"
              }
            },
            "required": [
              "comments_count",
              "images_count",
              "like_count",
              "quality"
            ]
          },
          "content": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/article_headline"
                },
                {
                  "$ref": "#/components/schemas/article_quote"
                },
                {
                  "$ref": "#/components/schemas/article_text"
                },
                {
                  "$ref": "#/components/schemas/article_recipes"
                },
                {
                  "$ref": "#/components/schemas/article_shopping_tips"
                },
                {
                  "$ref": "#/components/schemas/article_image_gallery"
                },
                {
                  "$ref": "#/components/schemas/article_video"
                },
                {
                  "$ref": "#/components/schemas/content_meta_carousel"
                },
                {
                  "$ref": "#/components/schemas/article_proscons"
                },
                {
                  "$ref": "#/components/schemas/article_cta_button"
                }
              ]
            }
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          },
          "content_meta": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          },
          "categories": {
            "type": "object",
            "properties": {
              "main": {
                "$ref": "#/components/schemas/category_simplified"
              },
              "additional": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/category_simplified"
                }
              }
            }
          }
        },
        "required": [
          "content_id",
          "type",
          "publishing",
          "title",
          "content",
          "slug",
          "url",
          "subtitle",
          "meta",
          "user_reactions",
          "author",
          "id",
          "image"
        ]
      },
      "shopping_tip_reduced": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "author": {
            "$ref": "#/components/schemas/user_public_reduced"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "like_count": {
                "type": "number"
              }
            },
            "required": [
              "like_count",
              "quality"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          }
        },
        "required": [
          "type",
          "publishing",
          "title",
          "url",
          "slug",
          "user_reactions",
          "author",
          "id",
          "image"
        ]
      },
      "characteristic": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      },
      "comment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "original_comment": {
            "type": "string"
          },
          "original_language_code": {
            "type": "string"
          },
          "original_location": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "like_count": {
            "type": "number"
          },
          "reply_count": {
            "type": "number"
          },
          "feed_item": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/feed_article"
              },
              {
                "$ref": "#/components/schemas/feed_recipe"
              }
            ]
          },
          "recent_answers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment_comment"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment_image"
            },
            "maxItems": 10
          },
          "errors": {
            "type": "object",
            "additionalProperties": false,
            "nullable": true
          }
        },
        "required": [
          "author",
          "created",
          "like_count",
          "id",
          "original_location",
          "original_comment",
          "reply_count"
        ]
      },
      "comment_comment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "original_comment": {
            "type": "string"
          },
          "original_language_code": {
            "type": "string"
          },
          "original_location": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "like_count": {
            "type": "number"
          },
          "reply_count": {
            "type": "number"
          },
          "feed_item": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/feed_article"
              },
              {
                "$ref": "#/components/schemas/feed_recipe"
              }
            ]
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment_image"
            },
            "maxItems": 10
          },
          "errors": {
            "type": "object",
            "additionalProperties": false,
            "nullable": true
          }
        },
        "required": [
          "author",
          "created",
          "like_count",
          "id",
          "original_location",
          "original_comment",
          "reply_count"
        ]
      },
      "comment_image": {
        "type": "object",
        "properties": {
          "comment": {
            "type": "string"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "original_location": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "author",
          "created",
          "image",
          "original_location",
          "comment"
        ]
      },
      "feed_article": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "article": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/article_simplified"
              },
              {
                "$ref": "#/components/schemas/article"
              }
            ]
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "article"
        ]
      },
      "feed_article_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "article": {
            "$ref": "#/components/schemas/article_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "article"
        ]
      },
      "feed_recipe": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "recipe": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/recipe_simplified"
              },
              {
                "$ref": "#/components/schemas/recipe"
              }
            ]
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "recipe"
        ]
      },
      "feed_recipe_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "recipe": {
            "$ref": "#/components/schemas/recipe_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "recipe"
        ]
      },
      "feed_shopping_tip": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "shopping_tip": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/article_simplified"
              },
              {
                "$ref": "#/components/schemas/article"
              }
            ]
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "shopping_tip"
        ]
      },
      "feed_shopping_tip_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "shopping_tip": {
            "$ref": "#/components/schemas/shopping_tip_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "shopping_tip"
        ]
      },
      "image": {
        "type": "object",
        "properties": {
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "source": {
            "type": "string"
          },
          "source_link": {
            "type": "string"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "links": {
        "type": "object",
        "properties": {
          "first": {
            "type": "string",
            "format": "uri"
          },
          "last": {
            "type": "string",
            "format": "uri"
          },
          "next": {
            "type": "string",
            "format": "uri"
          },
          "prev": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "last",
          "first"
        ],
        "additionalProperties": false
      },
      "meta": {
        "type": "object",
        "properties": {
          "pagination": {
            "type": "object",
            "properties": {
              "pages": {
                "type": "number"
              },
              "count": {
                "type": "number"
              },
              "page": {
                "type": "number"
              }
            },
            "required": [
              "page",
              "pages",
              "count"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "pagination"
        ],
        "additionalProperties": false
      },
      "publishing": {
        "type": "object",
        "properties": {
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          },
          "published": {
            "type": "string",
            "format": "date-time"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "created",
          "updated",
          "state"
        ],
        "additionalProperties": false
      },
      "rating": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "rating": {
            "type": "number",
            "maximum": 1
          },
          "feed_item": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "rating",
          "feed_item"
        ]
      },
      "recipe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "difficulty": {
            "type": "string"
          },
          "chefs_note": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "duration": {
            "type": "object",
            "properties": {
              "preparation": {
                "type": "number"
              },
              "baking": {
                "type": "number"
              },
              "resting": {
                "type": "number"
              }
            },
            "required": [
              "preparation",
              "resting",
              "baking"
            ],
            "nullable": true
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "rating": {
                "type": "number"
              },
              "rating_count": {
                "type": "number"
              },
              "images": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/comment_image"
                },
                "maxItems": 4
              },
              "comments_count": {
                "type": "number"
              },
              "images_count": {
                "type": "number"
              },
              "like_count": {
                "type": "number"
              },
              "quality": {
                "type": "number"
              }
            },
            "required": [
              "comments_count",
              "images_count",
              "like_count",
              "quality"
            ]
          },
          "servings": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number"
              },
              "type": {
                "type": "string"
              }
            },
            "required": [
              "amount",
              "type"
            ]
          },
          "nutrition": {
            "type": "object",
            "properties": {
              "calories": {
                "type": "number"
              },
              "fat": {
                "type": "number"
              },
              "protein": {
                "type": "number"
              },
              "carbohydrate": {
                "type": "number"
              }
            },
            "required": [
              "protein",
              "fat",
              "calories",
              "carbohydrate"
            ]
          },
          "publishing": {
            "type": "object",
            "properties": {
              "created": {
                "type": "string",
                "format": "date-time"
              },
              "updated": {
                "type": "string",
                "format": "date-time"
              },
              "published": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string",
                "enum": [
                  "draft",
                  "submitted",
                  "rejected",
                  "live",
                  "expired",
                  "scheduled"
                ]
              }
            },
            "required": [
              "created",
              "updated",
              "state"
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          },
          "content_meta": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          },
          "categories": {
            "type": "object",
            "properties": {
              "main": {
                "$ref": "#/components/schemas/category_simplified"
              },
              "additional": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/category_simplified"
                }
              }
            }
          },
          "video": {
            "$ref": "#/components/schemas/video"
          },
          "howto_videos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/video"
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/step"
            }
          },
          "utensils": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/recipe_utensil"
            }
          },
          "ingredients": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "list": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/recipe_ingredient"
                  }
                }
              },
              "required": [
                "list"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "content_id",
          "type",
          "publishing",
          "title",
          "steps",
          "slug",
          "url",
          "user_reactions",
          "author",
          "servings",
          "ingredients",
          "id"
        ]
      },
      "recipe_ingredient": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "object",
            "properties": {
              "rendered": {
                "type": "string"
              },
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "rendered"
            ],
            "additionalProperties": false
          },
          "measurement": {
            "type": "object",
            "properties": {
              "imperial": {
                "type": "object",
                "properties": {
                  "amount": {
                    "type": "number"
                  },
                  "unit": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/legacy_unit"
                      },
                      {
                        "$ref": "#/components/schemas/unit"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              },
              "metric": {
                "type": "object",
                "properties": {
                  "amount": {
                    "type": "number"
                  },
                  "unit": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/legacy_unit"
                      },
                      {
                        "$ref": "#/components/schemas/unit"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "characteristic": {
            "$ref": "#/components/schemas/characteristic"
          },
          "additional_information": {
            "$ref": "#/components/schemas/additional_information"
          },
          "is_divided": {
            "type": "boolean"
          },
          "is_partner": {
            "type": "boolean"
          },
          "is_searcheable": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "recipe_simplified": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "difficulty": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "duration": {
            "type": "object",
            "properties": {
              "preparation": {
                "type": "number"
              },
              "baking": {
                "type": "number"
              },
              "resting": {
                "type": "number"
              }
            },
            "required": [
              "preparation",
              "resting",
              "baking"
            ],
            "nullable": true
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "rating": {
                "type": "number"
              },
              "rating_count": {
                "type": "number"
              },
              "images": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/comment_image"
                },
                "maxItems": 4
              },
              "comments_count": {
                "type": "number"
              },
              "images_count": {
                "type": "number"
              },
              "like_count": {
                "type": "number"
              },
              "quality": {
                "type": "number"
              }
            },
            "required": [
              "comments_count",
              "images_count",
              "like_count",
              "quality"
            ]
          },
          "publishing": {
            "type": "object",
            "properties": {
              "created": {
                "type": "string",
                "format": "date-time"
              },
              "updated": {
                "type": "string",
                "format": "date-time"
              },
              "published": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string",
                "enum": [
                  "draft",
                  "submitted",
                  "rejected",
                  "live",
                  "expired",
                  "scheduled"
                ]
              }
            },
            "required": [
              "created",
              "updated",
              "state"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          }
        },
        "required": [
          "content_id",
          "type",
          "publishing",
          "title",
          "slug",
          "url",
          "user_reactions",
          "author",
          "id"
        ]
      },
      "recipe_reduced": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "duration": {
            "type": "object",
            "properties": {
              "preparation": {
                "type": "number"
              },
              "baking": {
                "type": "number"
              },
              "resting": {
                "type": "number"
              }
            },
            "required": [
              "preparation",
              "resting",
              "baking"
            ],
            "nullable": true
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          },
          "author": {
            "$ref": "#/components/schemas/user_public_reduced"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "like_count": {
                "type": "number"
              }
            },
            "required": [
              "like_count"
            ]
          },
          "publishing": {
            "type": "object",
            "properties": {
              "created": {
                "type": "string",
                "format": "date-time"
              },
              "updated": {
                "type": "string",
                "format": "date-time"
              },
              "published": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string",
                "enum": [
                  "draft",
                  "submitted",
                  "rejected",
                  "live",
                  "expired",
                  "scheduled"
                ]
              }
            },
            "required": [
              "created",
              "updated",
              "state"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          },
          "video": {
            "$ref": "#/components/schemas/video"
          }
        },
        "required": [
          "type",
          "publishing",
          "title",
          "url",
          "slug",
          "user_reactions",
          "author",
          "id"
        ]
      },
      "recipe_utensil": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "name": {
            "type": "object",
            "properties": {
              "rendered": {
                "type": "string"
              },
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "rendered"
            ],
            "additionalProperties": false
          },
          "characteristic": {
            "$ref": "#/components/schemas/characteristic"
          },
          "additional_information": {
            "$ref": "#/components/schemas/additional_information"
          },
          "size": {
            "$ref": "#/components/schemas/size"
          }
        },
        "required": [
          "name"
        ]
      },
      "size": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "metric": {
            "type": "string"
          },
          "imperial": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "step": {
        "type": "object",
        "properties": {
          "headline": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "tip": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "video": {
                "$ref": "#/components/schemas/video"
              }
            },
            "required": [
              "description",
              "title"
            ]
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "video": {
            "$ref": "#/components/schemas/video"
          },
          "utensils": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/recipe_utensil"
            }
          },
          "ingredients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/recipe_ingredient"
            }
          }
        },
        "required": [
          "text"
        ]
      },
      "tag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "is_hidden": {
            "type": "boolean"
          }
        }
      },
      "unit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "featured_order": {
            "type": "number"
          },
          "ingredient_pluralizable": {
            "type": "boolean"
          },
          "name": {
            "type": "object",
            "properties": {
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              },
              "rendered": {
                "type": "string"
              }
            },
            "required": [
              "rendered"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "name",
          "ingredient_pluralizable",
          "type"
        ]
      },
      "legacy_unit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "ingredient_pluralizable": {
            "type": "boolean"
          },
          "name": {
            "type": "object",
            "properties": {
              "rendered": {
                "type": "string"
              },
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "rendered"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "name"
        ]
      },
      "user_public": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "community",
              "contributor",
              "editor"
            ]
          },
          "new_type": {
            "type": "string",
            "enum": [
              "community",
              "contributor",
              "editor",
              "partner",
              "external"
            ]
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "occupation": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          },
          "banner_image": {
            "$ref": "#/components/schemas/image"
          },
          "wide_banner_image": {
            "$ref": "#/components/schemas/image"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "is_premium": {
            "type": "boolean"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "type",
          "new_type",
          "name",
          "id"
        ]
      },
      "user_public_reduced": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "new_type": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          }
        },
        "required": [
          "id",
          "name",
          "slug"
        ]
      },
      "wagtail_meta": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "hreflang": {
            "type": "object",
            "properties": {
              "en": {
                "type": "string",
                "format": "uri"
              },
              "de": {
                "type": "string",
                "format": "uri"
              },
              "zh": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "en"
            ]
          }
        },
        "required": [
          "hreflang"
        ],
        "additionalProperties": false
      },
      "search_category": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "icon": {
            "$ref": "#/components/schemas/image"
          },
          "description": {
            "type": "string"
          },
          "search": {
            "type": "object",
            "properties": {
              "query": {
                "type": "string"
              },
              "filters": {
                "type": "string"
              },
              "index": {
                "type": "string"
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "publishing": {
            "$ref": "#/components/schemas/publishing"
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          }
        },
        "required": [
          "content_id",
          "publishing",
          "title",
          "url",
          "slug",
          "meta",
          "description",
          "id",
          "image",
          "icon"
        ]
      },
      "collection_recipe": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "recipe": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/recipe_simplified"
              },
              {
                "$ref": "#/components/schemas/recipe"
              }
            ]
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "title",
          "recipe"
        ]
      },
      "collection_recipe_reduced": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "recipe": {
            "$ref": "#/components/schemas/recipe_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "title",
          "recipe"
        ]
      },
      "collection_article": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "article": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/article_simplified"
              },
              {
                "$ref": "#/components/schemas/article"
              }
            ]
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "title",
          "article",
          "subtitle"
        ]
      },
      "collection_article_reduced": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "article": {
            "$ref": "#/components/schemas/article_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "title",
          "article",
          "subtitle"
        ]
      },
      "collection_shopping_tip": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "shopping_tip": {
            "$ref": "#/components/schemas/article"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "shopping_tip",
          "title"
        ]
      },
      "collection_shopping_tip_reduced": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "shopping_tip": {
            "$ref": "#/components/schemas/article_reduced"
          },
          "hide_for_web": {
            "type": "boolean"
          },
          "hide_for_app": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "shopping_tip",
          "title"
        ]
      },
      "collection_category": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "featured_search": {
            "$ref": "#/components/schemas/search_category"
          }
        },
        "required": [
          "featured_search",
          "type",
          "title"
        ]
      },
      "feed_automated": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "automated": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "content": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/feed_article"
                    },
                    {
                      "$ref": "#/components/schemas/feed_recipe"
                    }
                  ]
                }
              },
              "tabs": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "search": {
                "type": "object",
                "properties": {
                  "filters": {
                    "type": "string"
                  },
                  "index": {
                    "type": "string"
                  },
                  "query": {
                    "type": "string"
                  }
                },
                "required": [
                  "filters",
                  "index"
                ],
                "additionalProperties": false
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "title",
              "content",
              "search"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "automated",
          "type"
        ]
      },
      "feed_automated_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "automated": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "content": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/feed_article_reduced"
                    },
                    {
                      "$ref": "#/components/schemas/feed_recipe_reduced"
                    }
                  ]
                }
              },
              "tabs": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "search": {
                "type": "object",
                "properties": {
                  "filters": {
                    "type": "string"
                  },
                  "index": {
                    "type": "string"
                  },
                  "query": {
                    "type": "string"
                  }
                },
                "required": [
                  "filters",
                  "index"
                ],
                "additionalProperties": false
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "title",
              "content",
              "search"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "automated",
          "type"
        ]
      },
      "feed_collection": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "collection": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "content": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/collection_article"
                    },
                    {
                      "$ref": "#/components/schemas/collection_recipe"
                    },
                    {
                      "$ref": "#/components/schemas/collection_category"
                    },
                    {
                      "$ref": "#/components/schemas/collection_shopping_tip"
                    }
                  ]
                }
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "title",
              "content"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "collection"
        ]
      },
      "feed_collection_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "collection": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "content": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/collection_article_reduced"
                    },
                    {
                      "$ref": "#/components/schemas/collection_recipe_reduced"
                    },
                    {
                      "$ref": "#/components/schemas/collection_shopping_tip_reduced"
                    },
                    {
                      "$ref": "#/components/schemas/collection_category"
                    }
                  ]
                }
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "title",
              "content"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "collection"
        ]
      },
      "feed_player": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "player": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "video_title": {
                "type": "string"
              },
              "video": {
                "$ref": "#/components/schemas/video"
              },
              "recipe": {
                "$ref": "#/components/schemas/recipe"
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "video_title",
              "video",
              "title"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "player",
          "type"
        ]
      },
      "feed_player_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "player": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "video_title": {
                "type": "string"
              },
              "video": {
                "$ref": "#/components/schemas/video"
              },
              "recipe": {
                "$ref": "#/components/schemas/recipe_reduced"
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "video_title",
              "video",
              "title"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "player",
          "type"
        ]
      },
      "feed_voting": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "voting": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "poll": {
                "$ref": "#/components/schemas/poll"
              }
            },
            "required": [
              "poll"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "voting"
        ]
      },
      "video": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "remote_id": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "recipe_url": {
            "type": "string",
            "format": "uri"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          },
          "publishing": {
            "type": "object",
            "properties": {
              "created": {
                "type": "string",
                "format": "date-time"
              },
              "updated": {
                "type": "string",
                "format": "date-time"
              },
              "published": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string"
              },
              "playback-state": {
                "type": "string",
                "enum": [
                  "not-playable",
                  "processing",
                  "ready"
                ]
              }
            },
            "required": [
              "created",
              "updated",
              "state",
              "playback-state"
            ]
          },
          "user_reactions": {
            "type": "object",
            "properties": {
              "view_count": {
                "type": "number"
              }
            },
            "required": [
              "view_count"
            ]
          }
        },
        "required": [
          "content_id",
          "duration",
          "title",
          "id",
          "slug",
          "meta"
        ]
      },
      "poll_vote": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "votes": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "votes",
          "text"
        ]
      },
      "poll": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "content_id": {
            "type": "string"
          },
          "question": {
            "type": "string"
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/poll_vote"
            }
          },
          "total_votes": {
            "type": "number"
          }
        },
        "required": [
          "total_votes",
          "content_id",
          "id",
          "options",
          "question"
        ]
      },
      "user_recipe_utensil": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "utensil_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "amount": {
            "type": "number",
            "nullable": true
          },
          "utensil_size_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "additional_information_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "characteristic_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          }
        }
      },
      "user_recipe_ingredient": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "ingredient_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "amount": {
            "type": "number",
            "nullable": true
          },
          "unit_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "additional_information_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "characteristic_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          }
        }
      },
      "user_recipe_step": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "image_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "video_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "selected_ingredient_indices": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "utensils": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/user_recipe_utensil"
            }
          }
        },
        "required": [
          "description"
        ]
      },
      "category": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/path_item"
            }
          },
          "content_id": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/child_item"
            }
          },
          "publishing": {
            "type": "object",
            "properties": {
              "created": {
                "type": "string",
                "format": "date-time"
              },
              "updated": {
                "type": "string",
                "format": "date-time"
              },
              "published": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string",
                "enum": [
                  "draft",
                  "submitted",
                  "rejected",
                  "live",
                  "expired",
                  "scheduled"
                ]
              }
            },
            "required": [
              "created",
              "updated",
              "state"
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/wagtail_meta"
          },
          "content_meta": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          }
        },
        "required": [
          "slug",
          "content_id",
          "publishing",
          "title",
          "id",
          "url",
          "meta"
        ]
      },
      "category_simplified": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/path_item"
            }
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/child_item"
            }
          }
        },
        "required": [
          "slug",
          "title",
          "id"
        ]
      },
      "child_item": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/path_item"
            }
          },
          "slug": {
            "type": "string"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/child_item"
            }
          }
        },
        "required": [
          "id",
          "slug",
          "title"
        ]
      },
      "path_item": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "title"
        ]
      },
      "author": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "author": {
            "$ref": "#/components/schemas/user_public"
          }
        },
        "required": [
          "author",
          "type"
        ]
      },
      "author_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "author": {
            "$ref": "#/components/schemas/user_public_reduced"
          }
        },
        "required": [
          "author",
          "type"
        ]
      },
      "author_carousel": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/author"
            }
          }
        },
        "required": [
          "title",
          "content"
        ]
      },
      "author_carousel_reduced": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/author_reduced"
            }
          }
        },
        "required": [
          "title",
          "content"
        ]
      },
      "feed_author_carousel": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "author_carousel": {
            "$ref": "#/components/schemas/author_carousel"
          }
        },
        "required": [
          "type",
          "author_carousel"
        ]
      },
      "feed_author_carousel_reduced": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "author_carousel": {
            "$ref": "#/components/schemas/author_carousel_reduced"
          }
        },
        "required": [
          "type",
          "author_carousel"
        ]
      },
      "feed_link": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "link_module": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "link": {
                "type": "string"
              },
              "image": {
                "$ref": "#/components/schemas/image"
              },
              "image_dark_mode": {
                "$ref": "#/components/schemas/image"
              },
              "hide_for_premium": {
                "type": "boolean"
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "image",
              "link",
              "title"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "link_module"
        ]
      },
      "youtube_player": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "youtube_video_player": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "subtitle": {
                "type": "string"
              },
              "remote_id": {
                "type": "string"
              },
              "remote_id_type": {
                "type": "string"
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "remote_id_type",
              "title",
              "remote_id"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "youtube_video_player"
        ]
      },
      "personalization": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "onboarding_completed": {
            "type": "boolean"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "personalization_preference": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "option": {
            "$ref": "#/components/schemas/personalization_option"
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_option_value"
            }
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "option",
          "values"
        ]
      },
      "personalization_option": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "key": {
            "type": "string"
          },
          "option_type": {
            "type": "string",
            "enum": [
              "inclusive",
              "exclusive"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "single",
              "multi"
            ]
          },
          "translation_status": {
            "type": "string",
            "enum": [
              "original",
              "fully_translated",
              "partially_translated",
              "auto_translated",
              "not_translated"
            ]
          },
          "native_language": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "zh"
            ]
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_option_value"
            }
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "value_type",
          "key",
          "option_type"
        ]
      },
      "personalization_option_translation_body": {
        "type": "object",
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "de",
              "en",
              "zh"
            ]
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "language",
          "description",
          "title"
        ]
      },
      "personalization_option_value": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "value": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "translation_status": {
            "type": "string",
            "enum": [
              "original",
              "fully_translated",
              "partially_translated",
              "auto_translated",
              "not_translated"
            ]
          },
          "native_language": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "zh"
            ]
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "value"
        ]
      },
      "personalization_option_value_simplified": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "value": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "translation_status": {
            "type": "string",
            "enum": [
              "original",
              "fully_translated",
              "partially_translated",
              "auto_translated",
              "not_translated"
            ]
          },
          "native_language": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "zh"
            ]
          }
        },
        "required": [
          "value"
        ]
      },
      "personalization_option_value_translation_body": {
        "type": "object",
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "de",
              "en",
              "zh"
            ]
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "language",
          "description",
          "title"
        ]
      },
      "content_collection": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          }
        },
        "required": [
          "uuid",
          "title"
        ]
      },
      "content_collection_detail": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          },
          "content": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/feed_article"
                },
                {
                  "$ref": "#/components/schemas/feed_recipe"
                }
              ]
            }
          }
        },
        "required": [
          "uuid",
          "title"
        ]
      },
      "content_collection_item": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "article",
              "recipe"
            ]
          },
          "collections": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/article"
              },
              {
                "$ref": "#/components/schemas/recipe"
              }
            ]
          }
        },
        "required": [
          "content_type",
          "uuid"
        ]
      },
      "content_meta_external_link": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "url"
        ]
      },
      "content_meta_external_product": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 37
          },
          "subtitle": {
            "type": "string",
            "maxLength": 25
          },
          "image": {
            "type": "string",
            "format": "uri"
          },
          "cta": {
            "type": "string",
            "maxLength": 20
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "image",
          "url",
          "title"
        ]
      },
      "content_meta_faq": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "answer": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000
          }
        },
        "required": [
          "answer",
          "question"
        ]
      },
      "content_meta_markdown": {
        "type": "object",
        "properties": {
          "markdown": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000
          }
        },
        "required": [
          "markdown"
        ]
      },
      "content_meta": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "value": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/content_meta_external_link"
              },
              {
                "$ref": "#/components/schemas/content_meta_external_product"
              },
              {
                "$ref": "#/components/schemas/content_meta_faq"
              },
              {
                "$ref": "#/components/schemas/content_meta_markdown"
              }
            ]
          },
          "campaign": {
            "type": "string"
          },
          "language": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "key",
          "uuid"
        ]
      },
      "content_meta_list": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "content_meta_carousel": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "content_meta_carousel": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_meta"
            }
          }
        },
        "required": [
          "type",
          "content_meta_carousel"
        ]
      },
      "categories_collection": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "categories_collection": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "content": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/collection_category"
                }
              }
            },
            "required": [
              "title",
              "content"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "categories_collection",
          "type"
        ]
      },
      "link_collection": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "link_collection": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "sponsored": {
                "type": "boolean"
              },
              "content": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/feed_link"
                }
              },
              "hide_for_web": {
                "type": "boolean"
              },
              "hide_for_app": {
                "type": "boolean"
              }
            },
            "required": [
              "sponsored",
              "title",
              "content"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "link_collection",
          "type"
        ]
      },
      "ingredient_promoted": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "object",
            "properties": {
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "one"
            ],
            "additionalProperties": false
          },
          "characteristics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/characteristic"
            }
          },
          "is_partner": {
            "type": "boolean"
          },
          "is_searcheable": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "is_partner"
        ]
      },
      "personalized_feed_collection": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "automated"
            ]
          },
          "automated": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "subtitle": {
                "type": "string"
              },
              "generated_at": {
                "type": "string",
                "format": "date-time"
              },
              "content_count": {
                "type": "number"
              },
              "content": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/personalized_feed_recipe"
                    }
                  ]
                }
              }
            },
            "required": [
              "title",
              "content"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "automated",
          "type"
        ]
      },
      "personalized_feed_recipe": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "recipe"
            ]
          },
          "recipe": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "recipe",
                  "community",
                  "how-to"
                ]
              },
              "title": {
                "type": "string"
              },
              "image": {
                "$ref": "#/components/schemas/image"
              },
              "content_id": {
                "type": "string"
              },
              "user_reactions": {
                "type": "object",
                "properties": {
                  "like_count": {
                    "type": "number"
                  }
                },
                "required": [
                  "like_count"
                ],
                "additionalProperties": false
              },
              "total_time": {
                "type": "number"
              },
              "author": {
                "$ref": "#/components/schemas/user_public"
              },
              "tags": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/tag"
                }
              },
              "n_inclusive_tag_matching": {
                "type": "number"
              }
            },
            "required": [
              "image",
              "description",
              "url",
              "title"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "type",
          "recipe"
        ]
      },
      "mealplan": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/mealplan_item"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "mealplan_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/mealplan_item"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "mealplan_add_json": {
        "type": "object",
        "properties": {
          "feed_item": {
            "type": "string"
          },
          "target_date": {
            "type": "string",
            "format": "date"
          },
          "year": {
            "type": "number"
          },
          "calendar_week": {
            "type": "number"
          },
          "day_of_week": {
            "type": "number"
          }
        },
        "required": [
          "feed_item"
        ]
      },
      "mealplan_update_json": {
        "type": "object",
        "properties": {
          "target_date": {
            "type": "string",
            "format": "date"
          },
          "year": {
            "type": "number"
          },
          "calendar_week": {
            "type": "number"
          },
          "day_of_week": {
            "type": "number"
          },
          "pinned": {
            "type": "boolean"
          }
        }
      },
      "mealplan_item": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "target_date": {
            "type": "string",
            "format": "date"
          },
          "year": {
            "type": "number"
          },
          "calendar_week": {
            "type": "number"
          },
          "day_of_week": {
            "type": "number"
          },
          "pinned": {
            "type": "boolean"
          },
          "feed_item": {
            "$ref": "#/components/schemas/feed_recipe"
          }
        },
        "required": [
          "year",
          "id",
          "feed_item",
          "calendar_week"
        ]
      },
      "article_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/article"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "content_meta_body": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "value": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/content_meta_external_link"
              },
              {
                "$ref": "#/components/schemas/content_meta_external_product"
              },
              {
                "$ref": "#/components/schemas/content_meta_faq"
              },
              {
                "$ref": "#/components/schemas/content_meta_markdown"
              }
            ]
          },
          "campaign": {
            "type": "string"
          },
          "language": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "key"
        ]
      },
      "recipe_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/recipe"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "cookbook_recipes_add_json": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "cookbook_externalrecipes_add_json": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "url"
        ]
      },
      "errors": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "errors"
        ]
      },
      "rating_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/rating"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "rating_add_json": {
        "type": "object",
        "properties": {
          "rating": {
            "type": "number"
          }
        },
        "required": [
          "rating"
        ]
      },
      "form_response": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "errors"
        ]
      },
      "report_abuse_json": {
        "type": "object",
        "properties": {
          "installation": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "user": {
            "type": "string"
          },
          "reason": {
            "type": "string",
            "enum": [
              "porn",
              "attacks",
              "violence",
              "hateful-speech",
              "self-harm",
              "spam",
              "other"
            ]
          }
        },
        "required": [
          "installation",
          "reason"
        ]
      },
      "feeditem_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/feed_article"
                },
                {
                  "$ref": "#/components/schemas/feed_recipe"
                },
                {
                  "$ref": "#/components/schemas/feed_shopping_tip"
                }
              ]
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "comment_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "user_likes_comment_json": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "user_public_upload_image": {
        "type": "object",
        "properties": {
          "image": {
            "$ref": "#/components/schemas/image"
          }
        }
      },
      "user_public_upload_video": {
        "type": "object",
        "properties": {
          "video": {
            "$ref": "#/components/schemas/video"
          }
        }
      },
      "mealplan_update": {
        "type": "object",
        "properties": {
          "target_date": {
            "type": "string",
            "format": "date"
          },
          "year": {
            "type": "number"
          },
          "calendar_week": {
            "type": "number"
          },
          "day_of_week": {
            "type": "number"
          },
          "pinned": {
            "type": "boolean"
          }
        }
      },
      "comment_add_json": {
        "type": "object",
        "properties": {
          "feed_item": {
            "type": "string"
          },
          "parent": {
            "type": "string"
          },
          "original_comment": {
            "type": "string"
          }
        }
      },
      "comment_image_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment_image"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "user_public_update_image": {
        "type": "object",
        "properties": {
          "image": {
            "$ref": "#/components/schemas/image"
          }
        }
      },
      "comment_image_create": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/comment_image"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "cookbook_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/cookbook"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "cookbook": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "recipes_count": {
            "type": "number"
          },
          "articles_count": {
            "type": "number"
          },
          "items_count": {
            "type": "number"
          },
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/image"
            }
          }
        },
        "required": [
          "recipes_count",
          "id",
          "title",
          "images"
        ]
      },
      "cookbook_add_json": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "feed_item_id": {
            "type": "string"
          },
          "external_url": {
            "type": "string"
          },
          "feed_items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "title"
        ]
      },
      "cookbook_change_title": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "image": {
            "type": "string"
          }
        },
        "required": [
          "title"
        ]
      },
      "cookbook_update_json": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "shopping_tips_list": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "path": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/path_item"
                  }
                },
                "children": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/child_item"
                  }
                },
                "shopping_tips": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/article"
                      },
                      {
                        "$ref": "#/components/schemas/article_simplified"
                      }
                    ]
                  }
                }
              },
              "required": [
                "slug",
                "title",
                "id",
                "shopping_tips"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "shopping_tips_category": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "path": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/path_item"
                }
              },
              "children": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/child_item"
                }
              },
              "shopping_tips": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/article"
                    },
                    {
                      "$ref": "#/components/schemas/article_simplified"
                    }
                  ]
                }
              }
            },
            "required": [
              "slug",
              "title",
              "id",
              "shopping_tips"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "personalization_body": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "onboarding_completed": {
            "type": "boolean"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "personalization_preference_paginated": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_preference"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "personalization_preference_body": {
        "type": "object",
        "properties": {
          "option": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "option",
          "values"
        ]
      },
      "personalization_option_paginated": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_option"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "personalization_option_body": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "option_type": {
            "type": "string",
            "enum": [
              "inclusive",
              "exclusive"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "single",
              "multi"
            ]
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_option_translation_body"
            }
          }
        },
        "required": [
          "value_type",
          "key",
          "option_type"
        ]
      },
      "personalization_option_value_paginated": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalization_option_value"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "personalization_option_value_body": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "value": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "translation_status": {
            "type": "string",
            "enum": [
              "original",
              "fully_translated",
              "partially_translated",
              "auto_translated",
              "not_translated"
            ]
          },
          "native_language": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "zh"
            ]
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "value"
        ]
      },
      "tag_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/tag"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "ingredient_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ingredient"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "ingredient": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "object",
            "properties": {
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "one"
            ],
            "additionalProperties": false
          },
          "characteristics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/characteristic"
            }
          },
          "is_partner": {
            "type": "boolean"
          },
          "is_searcheable": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "is_partner"
        ]
      },
      "ingredient_additionalinformation_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/additional_information"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "ingredient_unit_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/unit"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "ingredient_promoted_list": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ingredient_promoted"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "qa_user_update_json": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "gender": {
            "type": "string"
          },
          "birthday": {
            "type": "string"
          },
          "newsletter": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "occupation": {
            "type": "number"
          }
        }
      },
      "qa_user_public_update_image": {
        "type": "object",
        "properties": {
          "image": {
            "$ref": "#/components/schemas/image"
          },
          "banner_image": {
            "$ref": "#/components/schemas/image"
          }
        }
      },
      "user": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "community",
              "contributor",
              "editor"
            ]
          },
          "new_type": {
            "type": "string",
            "enum": [
              "community",
              "contributor",
              "editor",
              "partner",
              "external"
            ]
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "occupation": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/image",
            "nullable": true
          },
          "banner_image": {
            "$ref": "#/components/schemas/image"
          },
          "wide_banner_image": {
            "$ref": "#/components/schemas/image"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "gender": {
            "type": "string"
          },
          "birthday": {
            "type": "string",
            "format": "date-time"
          },
          "is_premium": {
            "type": "boolean"
          },
          "newsletter_opt_in": {
            "type": "string"
          },
          "preferences_set": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "onboarding_completed": {
            "type": "boolean"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "type",
          "newsletter_opt_in",
          "new_type",
          "name",
          "id",
          "email"
        ]
      },
      "qa_ugc_recipe_accept": {
        "type": "object",
        "properties": {
          "quality": {
            "type": "number"
          },
          "main_category": {
            "type": "number"
          },
          "additional_categories": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "personalization-feed": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/personalized_feed_collection"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "video_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/video"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "apple_auth": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "apple_token": {
            "type": "string"
          },
          "installation_id": {
            "type": "string"
          },
          "is_new": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "apple_token",
          "installation_id"
        ]
      },
      "google_auth": {
        "type": "object",
        "properties": {
          "google_token": {
            "type": "string"
          },
          "installation_id": {
            "type": "string"
          },
          "is_new": {
            "type": "boolean"
          }
        },
        "required": [
          "google_token",
          "installation_id"
        ]
      },
      "facebook_auth": {
        "type": "object",
        "properties": {
          "facebook_token": {
            "type": "string"
          },
          "installation_id": {
            "type": "string"
          },
          "is_new": {
            "type": "boolean"
          }
        },
        "required": [
          "facebook_token",
          "installation_id"
        ]
      },
      "email_auth": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "installation_id": {
            "type": "string"
          },
          "token_type": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ]
      },
      "user_token": {
        "type": "object",
        "properties": {
          "user_token": {
            "type": "string"
          },
          "is_new": {
            "type": "boolean"
          }
        },
        "required": [
          "is_new",
          "user_token"
        ]
      },
      "access_token": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          }
        },
        "required": [
          "access_token"
        ]
      },
      "email_registration": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "installation_id": {
            "type": "string"
          },
          "device": {
            "type": "string"
          },
          "newsletter": {
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "username",
          "password",
          "installation_id"
        ]
      },
      "forgot_password": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ]
      },
      "create_installation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "advertising_id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "amplitude_id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "app_version": {
            "type": "string"
          },
          "app_build": {
            "type": "number"
          },
          "device_type": {
            "type": "string"
          },
          "software_version": {
            "type": "string"
          },
          "hardware_version": {
            "type": "string"
          },
          "push_type": {
            "type": "string"
          },
          "push_token": {
            "type": "string"
          },
          "push_settings": {
            "type": "string"
          },
          "app_language": {
            "type": "string"
          },
          "device_language": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "push_settings_weekly_updates": {
            "type": "boolean"
          },
          "push_settings_replies_to_comments": {
            "type": "boolean"
          },
          "push_settings_replies_to_replies": {
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ]
      },
      "installation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "advertising_id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "amplitude_id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "app_version": {
            "type": "string"
          },
          "app_build": {
            "type": "number"
          },
          "device_type": {
            "type": "string"
          },
          "software_version": {
            "type": "string"
          },
          "hardware_version": {
            "type": "string"
          },
          "push_type": {
            "type": "string"
          },
          "push_token": {
            "type": "string"
          },
          "push_settings": {
            "type": "string"
          },
          "app_language": {
            "type": "string"
          },
          "device_language": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "push_settings_weekly_updates": {
            "type": "boolean"
          },
          "push_settings_replies_to_comments": {
            "type": "boolean"
          },
          "push_settings_replies_to_replies": {
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ]
      },
      "category_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/category"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "content_collections_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_collection"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "content_collection_body": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "title"
        ]
      },
      "content_collection_items_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/content_collection_item"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "content_collection_item_body": {
        "type": "object",
        "properties": {
          "content_page": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          }
        },
        "required": [
          "content_page"
        ]
      },
      "feed_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/feed_collection"
                },
                {
                  "$ref": "#/components/schemas/feed_automated"
                },
                {
                  "$ref": "#/components/schemas/feed_player"
                },
                {
                  "$ref": "#/components/schemas/feed_voting"
                },
                {
                  "$ref": "#/components/schemas/feed_author_carousel"
                },
                {
                  "$ref": "#/components/schemas/feed_link"
                },
                {
                  "$ref": "#/components/schemas/youtube_player"
                },
                {
                  "$ref": "#/components/schemas/categories_collection"
                },
                {
                  "$ref": "#/components/schemas/link_collection"
                }
              ]
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "feed_reduced_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/feed_collection_reduced"
                },
                {
                  "$ref": "#/components/schemas/feed_automated_reduced"
                },
                {
                  "$ref": "#/components/schemas/feed_player_reduced"
                },
                {
                  "$ref": "#/components/schemas/feed_voting"
                },
                {
                  "$ref": "#/components/schemas/feed_author_carousel_reduced"
                },
                {
                  "$ref": "#/components/schemas/feed_link"
                },
                {
                  "$ref": "#/components/schemas/youtube_player"
                },
                {
                  "$ref": "#/components/schemas/categories_collection"
                },
                {
                  "$ref": "#/components/schemas/link_collection"
                }
              ]
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "search_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/search_category"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "poll_vote_body": {
        "type": "object",
        "properties": {
          "installation_id": {
            "type": "string",
            "pattern": "[0-9a-f-]{36}"
          },
          "option_id": {
            "type": "string"
          }
        },
        "required": [
          "installation_id",
          "option_id"
        ]
      },
      "form_id_response": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "errors"
        ]
      },
      "stats": {
        "type": "object",
        "properties": {
          "community-stats": {
            "type": "object",
            "properties": {
              "created": {
                "type": "number"
              },
              "submitted": {
                "type": "number"
              },
              "rejected": {
                "type": "number"
              },
              "accepted": {
                "type": "number"
              },
              "accepted-video-steps": {
                "type": "number"
              },
              "accepted-quality": {
                "type": "object",
                "properties": {
                  "high": {
                    "type": "number"
                  },
                  "partner": {
                    "type": "number"
                  },
                  "low": {
                    "type": "number"
                  }
                },
                "required": [
                  "high",
                  "partner",
                  "low"
                ]
              }
            },
            "required": [
              "accepted-video-steps",
              "rejected",
              "accepted",
              "submitted",
              "created",
              "accepted-quality"
            ]
          }
        },
        "required": [
          "community-stats"
        ]
      },
      "user_public_update_json": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "gender": {
            "type": "string"
          },
          "birthday": {
            "type": "string"
          },
          "newsletter": {
            "type": "string"
          }
        }
      },
      "ingredient_favorite_add_json": {
        "type": "object",
        "properties": {
          "ingredients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "recipe_add_json": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "image_id": {
            "oneOf": [
              {
                "type": "string",
                "pattern": "[0-9a-f-]{36}"
              },
              {
                "type": "string",
                "pattern": "^$"
              },
              {
                "nullable": true
              }
            ]
          },
          "difficulty": {
            "type": "string",
            "enum": [
              "easy",
              "medium",
              "hard"
            ]
          },
          "preparation_time": {
            "type": "number",
            "nullable": true
          },
          "resting_time": {
            "type": "number",
            "nullable": true
          },
          "baking_time": {
            "type": "number",
            "nullable": true
          },
          "chefs_note": {
            "type": "string",
            "nullable": true
          },
          "ingredients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/user_recipe_ingredient"
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/user_recipe_step"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "servings": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number"
              },
              "type": {
                "type": "string",
                "enum": [
                  "portion",
                  "piece"
                ]
              }
            },
            "required": [
              "amount",
              "type"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "difficulty",
          "servings",
          "title"
        ]
      },
      "utensil_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/utensil"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      },
      "utensil": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "object",
            "properties": {
              "one": {
                "type": "string"
              },
              "many": {
                "type": "string"
              }
            },
            "required": [
              "one"
            ],
            "additionalProperties": false
          },
          "characteristics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/characteristic"
            }
          },
          "sizes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/size"
            }
          },
          "is_partner": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "is_partner"
        ]
      },
      "utensil_additionalinformation_pagination": {
        "type": "object",
        "properties": {
          "links": {
            "$ref": "#/components/schemas/links"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/additional_information"
            }
          }
        },
        "required": [
          "data",
          "links",
          "meta"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    },
    {
      "ApiKeyAuth": []
    }
  ]
}