Mealie Recipe: CRUD API

The Recipe: CRUD API from Mealie — 16 operation(s) for recipe: crud.

Operations 24

POST /api/recipes/test-scrape-url Test Parse Recipe Url #
POST /api/recipes/create/html-or-json Create Recipe From Html Or Json #
POST /api/recipes/create/html-or-json/stream Create Recipe From Html Or Json Stream #
POST /api/recipes/create/url Parse Recipe Url #
POST /api/recipes/create/url/stream Parse Recipe Url Stream #
POST /api/recipes/create/ai Create Recipe With Ai #
POST /api/recipes/create/ai/stream Create Recipe With Ai Stream #
POST /api/recipes/create/url/bulk Parse Recipe Url Bulk #
POST /api/recipes/create/zip Create Recipe From Zip #
GET /api/recipes Get All #
POST /api/recipes Create One #
PUT /api/recipes Update Many #
PATCH /api/recipes Patch Many #
GET /api/recipes/suggestions Suggest Recipes #
GET /api/recipes/{slug} Get One #
PUT /api/recipes/{slug} Update One #
PATCH /api/recipes/{slug} Patch One #
DELETE /api/recipes/{slug} Delete One #
POST /api/recipes/{slug}/duplicate Duplicate One #
PATCH /api/recipes/{slug}/last-made Update Last Made #
POST /api/recipes/{slug}/image Scrape Image Url #
PUT /api/recipes/{slug}/image Update Recipe Image #
DELETE /api/recipes/{slug}/image Delete Recipe Image #
POST /api/recipes/{slug}/assets Upload Recipe Asset #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/mealie-recipe-crud-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

mealie-recipe-crud-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 'Mealie Recipe: CRUD API'
  description: '

    Mealie is a web application for managing your recipes, meal plans, and shopping lists. This is the Restful

    API interactive documentation that can be used to explore the API. If you''re justing getting started with

    the API and want to get started quickly, you can use the

    [API Usage | Mealie Docs](https://docs.mealie.io/documentation/getting-started/api-usage/)

    as a reference for how to get started.



    If you have any questions or comments about mealie, please use the discord server to talk to the developers or other

    community members. If you''d like to file an issue, please use the

    [GitHub Issue Tracker | Mealie](https://github.com/mealie-recipes/mealie/issues/new/choose)



    ## Helpful Links

    - [Home Page](https://mealie.io)

    - [Documentation](https://docs.mealie.io)

    - [Discord](https://discord.gg/QuStdQGSGK)

    - [Demo](https://demo.mealie.io)

    '
  version: nightly
tags:
- name: 'Recipe: CRUD'
paths:
  /api/recipes/test-scrape-url:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Test Parse Recipe Url
      operationId: test_parse_recipe_url_api_recipes_test_scrape_url_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipeTest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/html-or-json:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create Recipe From Html Or Json
      description: Takes in raw HTML or a https://schema.org/Recipe object as a JSON string and parses it like a URL
      operationId: create_recipe_from_html_or_json_api_recipes_create_html_or_json_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipeData'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: string
                title: Response Create Recipe From Html Or Json Api Recipes Create Html Or Json Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/html-or-json/stream:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create Recipe From Html Or Json Stream
      description: 'Takes in raw HTML or a https://schema.org/Recipe object as a JSON string and parses it like a URL,

        streaming progress via SSE'
      operationId: create_recipe_from_html_or_json_stream_api_recipes_create_html_or_json_stream_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipeData'
      responses:
        '200':
          description: Successful Response
          content:
            text/event-stream:
              itemSchema:
                type: object
                properties:
                  data:
                    type: string
                  event:
                    type: string
                  id:
                    type: string
                  retry:
                    type: integer
                    minimum: 0
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/url:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Parse Recipe Url
      description: Takes in a URL and attempts to scrape data and load it into the database
      operationId: parse_recipe_url_api_recipes_create_url_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipe'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: string
                title: Response Parse Recipe Url Api Recipes Create Url Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/url/stream:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Parse Recipe Url Stream
      description: 'Takes in a URL and attempts to scrape data and load it into the database,

        streaming progress via SSE'
      operationId: parse_recipe_url_stream_api_recipes_create_url_stream_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipe'
      responses:
        '200':
          description: Successful Response
          content:
            text/event-stream:
              itemSchema:
                type: object
                properties:
                  data:
                    type: string
                  event:
                    type: string
                  id:
                    type: string
                  retry:
                    type: integer
                    minimum: 0
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/ai:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create Recipe With Ai
      description: 'Create a recipe from any combination of content (HTML, JSON, or text), images, and a URL,

        using AI. Optionally specify a language for it to translate the recipe to.'
      operationId: create_recipe_with_ai_api_recipes_create_ai_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_recipe_with_ai_api_recipes_create_ai_post'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: string
                title: Response Create Recipe With Ai Api Recipes Create Ai Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/ai/stream:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create Recipe With Ai Stream
      description: 'Create a recipe from any combination of content (HTML, JSON, or text), images, and a URL,

        using AI, streaming progress via SSE'
      operationId: create_recipe_with_ai_stream_api_recipes_create_ai_stream_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_recipe_with_ai_stream_api_recipes_create_ai_stream_post'
      responses:
        '200':
          description: Successful Response
          content:
            text/event-stream:
              itemSchema:
                type: object
                properties:
                  data:
                    type: string
                  event:
                    type: string
                  id:
                    type: string
                  retry:
                    type: integer
                    minimum: 0
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/url/bulk:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Parse Recipe Url Bulk
      description: Takes in a URL and attempts to scrape data and load it into the database
      operationId: parse_recipe_url_bulk_api_recipes_create_url_bulk_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRecipeByUrlBulk'
      responses:
        '202':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/create/zip:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create Recipe From Zip
      description: Create recipe from archive
      operationId: create_recipe_from_zip_api_recipes_create_zip_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_recipe_from_zip_api_recipes_create_zip_post'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes:
    get:
      tags:
      - 'Recipe: CRUD'
      summary: Get All
      operationId: get_all_api_recipes_get
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: categories
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              anyOf:
              - type: string
                format: uuid4
              - type: string
          - type: 'null'
          title: Categories
      - name: tags
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              anyOf:
              - type: string
                format: uuid4
              - type: string
          - type: 'null'
          title: Tags
      - name: tools
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              anyOf:
              - type: string
                format: uuid4
              - type: string
          - type: 'null'
          title: Tools
      - name: foods
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              anyOf:
              - type: string
                format: uuid4
              - type: string
          - type: 'null'
          title: Foods
      - name: households
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              anyOf:
              - type: string
                format: uuid4
              - type: string
          - type: 'null'
          title: Households
      - name: orderBy
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Orderby
      - name: orderByNullPosition
        in: query
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/OrderByNullPosition'
          - type: 'null'
          title: Orderbynullposition
      - name: orderDirection
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/OrderDirection'
          default: desc
      - name: queryFilter
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Queryfilter
      - name: paginationSeed
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Paginationseed
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
          title: Page
      - name: perPage
        in: query
        required: false
        schema:
          type: integer
          default: 50
          title: Perpage
      - name: cookbook
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: uuid4
          - type: string
          - type: 'null'
          title: Cookbook
      - name: requireAllCategories
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Requireallcategories
      - name: requireAllTags
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Requirealltags
      - name: requireAllTools
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Requirealltools
      - name: requireAllFoods
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Requireallfoods
      - name: search
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Search
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginationBase_RecipeSummary_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Create One
      description: Takes in a JSON string and loads data into the database as a new entry
      operationId: create_one_api_recipes_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRecipe'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: string
                title: Response Create One Api Recipes Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
      - 'Recipe: CRUD'
      summary: Update Many
      operationId: update_many_api_recipes_put
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Recipe-Input'
              title: Data
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    patch:
      tags:
      - 'Recipe: CRUD'
      summary: Patch Many
      operationId: patch_many_api_recipes_patch
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Recipe-Input'
              title: Data
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/suggestions:
    get:
      tags:
      - 'Recipe: CRUD'
      summary: Suggest Recipes
      operationId: suggest_recipes_api_recipes_suggestions_get
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: foods
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              type: string
              format: uuid4
          - type: 'null'
          title: Foods
      - name: tools
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              type: string
              format: uuid4
          - type: 'null'
          title: Tools
      - name: orderBy
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Orderby
      - name: orderByNullPosition
        in: query
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/OrderByNullPosition'
          - type: 'null'
          title: Orderbynullposition
      - name: orderDirection
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/OrderDirection'
          default: desc
      - name: queryFilter
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Queryfilter
      - name: paginationSeed
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Paginationseed
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 10
          title: Limit
      - name: maxMissingFoods
        in: query
        required: false
        schema:
          type: integer
          default: 5
          title: Maxmissingfoods
      - name: maxMissingTools
        in: query
        required: false
        schema:
          type: integer
          default: 5
          title: Maxmissingtools
      - name: includeFoodsOnHand
        in: query
        required: false
        schema:
          type: boolean
          default: true
          title: Includefoodsonhand
      - name: includeToolsOnHand
        in: query
        required: false
        schema:
          type: boolean
          default: true
          title: Includetoolsonhand
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecipeSuggestionResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/{slug}:
    get:
      tags:
      - 'Recipe: CRUD'
      summary: Get One
      description: Takes in a recipe's slug or id and returns all data for a recipe
      operationId: get_one_api_recipes__slug__get
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          description: A recipe's slug or id
          title: Slug
        description: A recipe's slug or id
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Recipe-Output'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
      - 'Recipe: CRUD'
      summary: Update One
      description: Updates a recipe by existing slug and data.
      operationId: update_one_api_recipes__slug__put
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Recipe-Input'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    patch:
      tags:
      - 'Recipe: CRUD'
      summary: Patch One
      description: Updates a recipe by existing slug and data.
      operationId: patch_one_api_recipes__slug__patch
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Recipe-Input'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
      - 'Recipe: CRUD'
      summary: Delete One
      description: Deletes a recipe by slug
      operationId: delete_one_api_recipes__slug__delete
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/{slug}/duplicate:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Duplicate One
      description: Duplicates a recipe with a new custom name if given
      operationId: duplicate_one_api_recipes__slug__duplicate_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecipeDuplicate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Recipe-Output'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/{slug}/last-made:
    patch:
      tags:
      - 'Recipe: CRUD'
      summary: Update Last Made
      description: Update a recipe's last made timestamp
      operationId: update_last_made_api_recipes__slug__last_made_patch
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecipeLastMade'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/{slug}/image:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Scrape Image Url
      operationId: scrape_image_url_api_recipes__slug__image_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRecipe'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateImageResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
      - 'Recipe: CRUD'
      summary: Update Recipe Image
      operationId: update_recipe_image_api_recipes__slug__image_put
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_update_recipe_image_api_recipes__slug__image_put'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateImageResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
      - 'Recipe: CRUD'
      summary: Delete Recipe Image
      operationId: delete_recipe_image_api_recipes__slug__image_delete
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Accept-Language
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/recipes/{slug}/assets:
    post:
      tags:
      - 'Recipe: CRUD'
      summary: Upload Recipe Asset
      description: Upload a file to store as a recipe asset
      operationId: upload_recipe_asset_api_recipes__slug__assets_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: accept-language
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          -

# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mealie/refs/heads/main/openapi/mealie-recipe-crud-api-openapi.yml