LogMeal Custom Recipes API

Create and assign custom recipes accessible by all the users in the company.⚡ Monitor plan or above ⚡

Operations 5

POST /v2/custom_recipe 🔵⚫ Create a custom recipe #
GET /v2/custom_recipe 🔵⚫🔴 Get some basic information about all the active custom recipes #
GET /v2/custom_recipe/{custom_recipe_id} 🔵⚫🔴 Get the complete information for a specific custom recipe #
DELETE /v2/custom_recipe/{custom_recipe_id} 🔵⚫ Deactivate an existing custom recipe #
PATCH /v2/custom_recipe/{custom_recipe_id} 🔵⚫ Edit an existing custom recipe #

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/logmeal:logmeal-custom-recipes-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

logmeal-custom-recipes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.1.0
  title: Food AI Engine API Documentation Custom Recipes API
  description: Please, refer to https://docs.logmeal.com to find the most up-to-date version of the Food AI Engine API documentation.
  contact:
    email: support@logmeal.com
servers:
- url: https://api.logmeal.com
  description: Production
tags:
- name: Custom Recipes
  description: 'Create and assign custom recipes accessible by all the users in the company.

    ⚡ Monitor plan or above ⚡'
  externalDocs:
    url: https://docs.logmeal.com/docs/guides-features-custom-recipes#/
paths:
  /v2/custom_recipe:
    post:
      tags:
      - Custom Recipes
      summary: 🔵⚫ Create a custom recipe
      description: 'Allows creating a custom recipe that will only be visible by your company. You can create recipes that will be consumed exclusively by your users. You can provide a default dish name, ingredient_list and nutritional_indicators for each custom recipe. Note that all ingredients and nutrients quantities must be introduced for the standard serving size of the recipe.


        Furthermore, you can optionally provide a set of translations for your dish to all the available languages (see endpoint /v2/info/languages to know which is the set of valid languages). The users will visualize the translation corresponding to his/her language. If a language''s value is set to null, the stored translation for that language will be deleted. **IMPORTANT: note that at least the language ''eng'' MUST be provided if you want the recognition algorithms to automatically detect the custom recipes.**


        To identify an ingredient it can be done in two different ways. Either passing an ''ingredientId'' (it must be a valid ingredient id from the LogMeal system) or an ''ingredientName''. When passing a Name, the ingredient, will be present in the recipe and will be usable but it will not have some functionalities since it is not in the system and there is no data associated to it. It could be anything.


        Refer to GET ''/v2/info/nutrients'' to see a list of valid nutrient codes. Where you can find the ''indicatorCode'' and unit for the ''indicatorAmount'' for all the available nutrients. Refer to GET ''/v2/dataset/ingredients'', it will return all the valid ingredients names and their ids. All values for ''ingredientAmount'' must be reported in grams and all values for ''indicatorAmount'' must be reported in the indicator-specific unit reported in ''/v2/info/nutrients''.


        If a list of ingredients is provided but not a list of nutrients, the nutritional information will be automatically calculated based on the list of ingredients stored in the system. It''s important to note that only ingredients with a valid, existing and associated ID will be considered.


        Alternatively, it is also possible to provide only the nutritional indicators without specifying any ingredients. In this case, the system will use the provided nutritional data as-is, without performing any automatic calculation or ingredient validation. This option can be useful when the exact composition of the recipe is unknown or when you only need to register the nutritional profile directly.


        The request must be sent as `multipart/form-data` because an image is required when creating a custom recipe. Recipe fields are provided as form fields. Complex fields such as `ingredient_list`, `nutritional_indicators` and `translations` must contain JSON-serialized values.'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - image
              - dish_name
              anyOf:
              - required:
                - ingredient_list
              - required:
                - nutritional_indicators
              properties:
                image:
                  type: string
                  format: binary
                  description: Required image for the custom recipe.
                dish_name:
                  type: string
                  example: Salad with tomato and seeds
                sugar_modulation:
                  type: boolean
                  example: true
                  default: false
                  description: Whether added sugar modulation can be applied to the recipe.
                auto_computed_nutritional_indicators:
                  type: boolean
                  example: false
                  default: false
                ingredient_list:
                  type: string
                  description: 'JSON-serialized array of ingredients.


                    Each ingredient must contain `ingredientAmount` and exactly one of `ingredientId` or `ingredientName`.

                    '
                  example: '[{"ingredientId":14,"ingredientAmount":3.0},{"ingredientId":59,"ingredientAmount":4.5}]'
                nutritional_indicators:
                  type: string
                  description: 'JSON-serialized array of nutritional indicators.


                    If omitted while `ingredient_list` is provided, nutritional information is calculated automatically from valid LogMeal ingredients.

                    '
                  example: '[{"indicatorCode":"FE","indicatorAmount":6.7},{"indicatorCode":"CA","indicatorAmount":2.8}]'
                translations:
                  type: string
                  description: 'JSON-serialized object whose keys are valid 3-letter language codes.

                    '
                  example: '{"eng":"Salad with tomato and seeds","spa":"Ensalada con tomate y semillas"}'
      responses:
        '200':
          description: Custom recipe successfully created!
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Custom recipe successfully created!
                  custom_recipe_id:
                    type: integer
                    example: 1
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  message:
                    type: string
        '401':
          description: Unauthorized, invalid token.
        '403':
          description: Forbidden
        '404':
          description: Not found
      security:
      - Bearer: []
      operationId: postV2CustomRecipe
      x-operation-id-source: derived
    get:
      tags:
      - Custom Recipes
      summary: 🔵⚫🔴 Get some basic information about all the active custom recipes
      description: This endpoint is used to get all active custom recipes.
      parameters:
      - in: query
        name: language
        schema:
          type: string
          enum:
          - spa
          - cat
          - eng
          - ita
          - nld
          - fre
          - ger
          - tur
          - gre
          - heb
        description: Desired language for the response. It must be a three-letter ISO 639-2/T code. Defaults to the APIUser's assigned language or english.
        required: false
      responses:
        '200':
          description: Custom recipes retrieved successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  custom_recipes:
                    type: array
                    items:
                      type: object
                      properties:
                        custom_recipe_id:
                          type: integer
                          example: 1
                          description: ID of a custom recipe.
                        dish:
                          type: string
                          example: spaghetti bolognese
                          description: Name of the dish.
                        image_url:
                          type: string
                          description: URL to access the reference image.
                          example: https://storage.logmeal.com/apiImages/123.jpg
                  result:
                    type: string
                    example: Custom recipes retrieved successfully.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  message:
                    type: string
        '401':
          description: Unauthorized, invalid token.
        '403':
          description: Forbidden
        '404':
          description: Not found
      security:
      - Bearer: []
      operationId: getV2CustomRecipe
      x-operation-id-source: derived
  /v2/custom_recipe/{custom_recipe_id}:
    get:
      tags:
      - Custom Recipes
      summary: 🔵⚫🔴 Get the complete information for a specific custom recipe
      description: This endpoint is used to get a single custom recipe referred by the provided 'custom_recipe_id' parameter. It returns all the information associated to that specific recipe (dish name, image url, ingredients list, nutritional indicators, etc.).
      parameters:
      - in: path
        name: custom_recipe_id
        schema:
          type: integer
        required: true
        description: ID of the custom recipe to get the information from.
      - in: query
        name: language
        schema:
          type: string
          enum:
          - spa
          - cat
          - eng
          - ita
          - nld
          - fre
          - ger
          - tur
          - gre
          - heb
        description: Desired language for the response. It must be a three-letter ISO 639-2/T code. Defaults to the APIUser's assigned language or english.
        required: false
      responses:
        '200':
          description: Custom recipe retrieved successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  custom_recipe:
                    type: object
                    properties:
                      custom_recipe_id:
                        type: integer
                        example: 1
                        description: ID of a custom recipe.
                      dish:
                        type: string
                        example: spaghetti bolognese
                        description: Name of the dish.
                      sugar_modulation:
                        type: boolean
                        example: 'true'
                        enum:
                        - 'true'
                        - 'false'
                        description: Whether the user could possibly choose to include added sugar to the recipe (e.g. coffees, yogurts, etc.).
                      image_url:
                        type: string
                        description: URL to access the image.
                        example: https://storage.logmeal.com/apiImages/123.jpg
                      ingredient_list:
                        type: array
                        items:
                          type: object
                          properties:
                            ingredientId:
                              type: integer
                              example: 12
                            ingredientName:
                              type: string
                              example: oil
                            ingredientAmount:
                              type: number
                              format: float
                              example: 5
                      nutritional_indicators:
                        type: array
                        items:
                          type: object
                          properties:
                            indicatorCode:
                              type: string
                              example: FE
                            indicatorAmount:
                              type: number
                              format: float
                              example: 6.7
                      translations:
                        type: object
                        properties:
                          default:
                            type: string
                            example: spaghetti bolognese
                          eng:
                            type: string
                            example: spaghetti bolognese
                          spa:
                            type: string
                            example: espagueti a la boloñesa
                  result:
                    type: string
                    example: Custom recipe retrieved successfully.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  message:
                    type: string
        '401':
          description: Unauthorized, invalid token.
        '403':
          description: Forbidden
        '404':
          description: Not found
      security:
      - Bearer: []
      operationId: getV2CustomRecipeByCustomRecipeId
      x-operation-id-source: derived
    delete:
      tags:
      - Custom Recipes
      summary: 🔵⚫ Deactivate an existing custom recipe
      description: This endpoint is used to deactivate an existing custom recipe created by APICompany and APIUserManager. This means that all the food intakes attached to this custom recipe will remain untouched but the recipe will not be available anymore for future intake assignments.
      parameters:
      - in: path
        name: custom_recipe_id
        schema:
          type: integer
        required: true
        description: Custom recipe ID to delete an existing custom recipe.
      responses:
        '200':
          description: Custom recipe deleted successfully.
        '400':
          description: Bad request
        '401':
          description: Unauthorized, invalid token.
        '403':
          description: Forbidden
        '404':
          description: Not found
      security:
      - Bearer: []
      operationId: deleteV2CustomRecipeByCustomRecipeId
      x-operation-id-source: derived
    patch:
      tags:
      - Custom Recipes
      summary: 🔵⚫ Edit an existing custom recipe
      description: 'Updates the details of an existing custom recipe identified by `custom_recipe_id`.


        All recipe fields are optional and only the provided fields are updated.


        If an ingredient list is provided without nutritional indicators, the nutritional information is automatically calculated from the valid LogMeal ingredients included in the recipe.


        For `translations`, each language code maps to the translated dish name. A string value adds or updates the translation.

        A null value deletes the stored translation for that language.


        The request can be sent in two formats:


        - `application/json`: use this format when updating recipe data without uploading an image.

        - `multipart/form-data`: use the `data` field containing the JSON-serialized recipe payload and optionally provide the image in the `image` field.


        The `data` object follows the same structure as the `application/json` payload.


        Legacy multipart requests that provide recipe fields directly as form fields remain supported for backwards compatibility, but new integrations should use the `data` field.'
      parameters:
      - in: path
        name: custom_recipe_id
        schema:
          type: integer
          example: 123
        required: true
        description: ID of the custom recipe.
      requestBody:
        description: 'Custom recipe fields to update.


          Use `application/json` when no image needs to be uploaded.


          When using `multipart/form-data`, serialize the same JSON object in the `data` field and optionally attach the new recipe image in the `image` field.

          '
        content:
          application/json:
            schema:
              type: object
              properties:
                dish_name:
                  type: string
                  example: Salad with tomato and seeds
                sugar_modulation:
                  type: boolean
                  example: true
                  default: false
                  description: Whether added sugar modulation can be applied to the recipe. (e.g. coffees, yogurts, etc.).
                ingredient_list:
                  type: array
                  description: Ingredient can only be identified by ingredientId or by ingredientName. Not both. Provide only one.
                  items:
                    type: object
                    properties:
                      ingredientId:
                        type: integer
                        example: 15
                      ingredientName:
                        type: string
                        example: Spirulina
                      ingredientAmount:
                        type: number
                        format: float
                        example: 5
                  example:
                  - ingredientId: 14
                    ingredientAmount: 3
                  - ingredientId: 59
                    ingredientAmount: 4.5
                nutritional_indicators:
                  type: array
                  items:
                    type: object
                    properties:
                      indicatorCode:
                        type: string
                        example: FE
                      indicatorAmount:
                        type: number
                        format: float
                        example: 6.7
                  example:
                  - indicatorCode: FE
                    indicatorAmount: 6.7
                  - indicatorCode: CA
                    indicatorAmount: 2.8
                auto_computed_nutritional_indicators:
                  type: boolean
                  example: false
                  description: Indicates whether the nutritional information was automatically calculated.
                translations:
                  type: object
                  properties:
                    eng:
                      type: string
                      example: Salad with tomato and seeds
                    spa:
                      type:
                      - string
                      - 'null'
                      example: Ensalada con tomate y semillas
                    cat:
                      type:
                      - string
                      - 'null'
                      example: null
            example:
              dish_name: Updated salad
              ingredient_list:
              - ingredientId: 14
                ingredientAmount: 30
              translations:
                eng: Updated salad
          multipart/form-data:
            schema:
              type: object
              properties:
                data:
                  type: string
                  description: 'JSON-serialized object matching `EditCustomRecipes`.

                    '
                  example: '{"dish_name":"Updated salad","ingredient_list":[{"ingredientId":14,"ingredientAmount":30}],"translations":{"eng":"Updated salad"}}'
                image:
                  type: string
                  format: binary
                  description: Optional new image for the custom recipe.
      responses:
        '200':
          description: Custom recipe edited successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - result
                properties:
                  result:
                    type: string
                    example: Custom recipe edited successfully.
        '400':
          description: Bad request
        '401':
          description: Unauthorized, invalid token.
        '403':
          description: Forbidden
        '404':
          description: Not found
      security:
      - Bearer: []
      operationId: patchV2CustomRecipeByCustomRecipeId
      x-operation-id-source: derived
components:
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
x-build:
  time: '2026-10-19T02:02:11.433999Z'
x-provenance:
  method: harvested
  publisher: LogMeal
  source: https://docs.logmeal.com/openapi/logmeal_openapi.yaml
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)