Recipe API Discovery API

Requires API key. No credit cost. Browse categories, cuisines, and dietary options.

Operations 5

GET /api/v1/categories List all categories #
GET /api/v1/cuisines List all cuisines #
GET /api/v1/dietary-flags List all dietary flags #
GET /api/v1/ingredients Browse ingredients #
GET /api/v1/ingredient-categories List all ingredient categories #

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/recipe-api-discovery-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

recipe-api-discovery-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Recipe Discovery API
  description: 'B2B Recipe API providing structured recipes with comprehensive nutrition data.


    **Quick Start** - Try it now (no API key needed):

    ```

    curl https://recipe-api.com/api/v1/dinner

    ```


    **Sample Responses** - All endpoints below show example responses so you can evaluate the data structure before signing up. Expand any endpoint to see what you''ll receive.


    **Authentication** - Protected endpoints require an `X-API-Key` header. Get your key at recipe-api.com.'
  version: 1.0.0
  contact:
    email: paul@recipe-api.com
servers:
- url: https://recipe-api.com
  description: Production
tags:
- name: Discovery
  description: Requires API key. No credit cost. Browse categories, cuisines, and dietary options.
paths:
  /api/v1/categories:
    get:
      tags:
      - Discovery
      summary: List all categories
      description: Returns all recipe categories with recipe counts. No credit cost.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: List of categories
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: Dinner
                        count:
                          type: integer
                          example: 245
              example:
                data:
                - name: Dinner
                  count: 847
                - name: Breakfast
                  count: 312
                - name: Lunch
                  count: 289
                - name: Dessert
                  count: 256
                - name: Appetizer
                  count: 198
                - name: Snack
                  count: 145
                - name: Brunch
                  count: 89
                - name: Side Dish
                  count: 76
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      operationId: getApiV1Categories
      x-operation-id-source: derived
  /api/v1/cuisines:
    get:
      tags:
      - Discovery
      summary: List all cuisines
      description: Returns all cuisines with recipe counts. No credit cost.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: List of cuisines
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: Italian
                        count:
                          type: integer
                          example: 89
              example:
                data:
                - name: Italian
                  count: 234
                - name: Mexican
                  count: 198
                - name: American
                  count: 187
                - name: Asian
                  count: 156
                - name: Mediterranean
                  count: 134
                - name: French
                  count: 98
                - name: Indian
                  count: 89
                - name: Japanese
                  count: 76
                - name: Thai
                  count: 65
                - name: Greek
                  count: 54
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      operationId: getApiV1Cuisines
      x-operation-id-source: derived
  /api/v1/dietary-flags:
    get:
      tags:
      - Discovery
      summary: List all dietary flags
      description: Returns all dietary flags with recipe counts. No credit cost.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: List of dietary flags
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: Vegetarian
                        count:
                          type: integer
                          example: 156
              example:
                data:
                - name: Gluten-Free
                  count: 456
                - name: Vegetarian
                  count: 387
                - name: Dairy-Free
                  count: 312
                - name: Vegan
                  count: 234
                - name: Nut-Free
                  count: 198
                - name: Low-Carb
                  count: 167
                - name: Egg-Free
                  count: 145
                - name: Soy-Free
                  count: 123
                - name: Paleo
                  count: 89
                - name: Keto
                  count: 67
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      operationId: getApiV1DietaryFlags
      x-operation-id-source: derived
  /api/v1/ingredients:
    get:
      tags:
      - Discovery
      summary: Browse ingredients
      description: Returns a paginated list of ingredients with optional filtering by name or category. No credit cost.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: q
        in: query
        description: Search by ingredient name
        schema:
          type: string
        example: chicken
      - name: category
        in: query
        description: Filter by category
        schema:
          type: string
        example: Legumes
      - name: page
        in: query
        description: Page number
        schema:
          type: integer
          default: 1
          minimum: 1
      - name: per_page
        in: query
        description: Results per page
        schema:
          type: integer
          default: 20
          minimum: 1
          maximum: 100
      responses:
        '200':
          description: Paginated ingredient list
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/IngredientItem'
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      per_page:
                        type: integer
              example:
                data:
                - id: 001764f3-4d44-4dbc-801b-0e4f094c756d
                  name: Chickpeas, canned, drained
                  category: Legumes
                  source: USDA
                - id: 0004d34a-afbe-4934-b94e-195e1602b23d
                  name: Spelt, cooked
                  category: Grains & Pasta
                  source: USDA
                - id: 0009da79-3cdb-4838-bdab-2e65ee0a9ccd
                  name: Nashi pear
                  category: Fruits
                  source: Aggregated Public Sources
                meta:
                  total: 10441
                  page: 1
                  per_page: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      operationId: getApiV1Ingredients
      x-operation-id-source: derived
  /api/v1/ingredient-categories:
    get:
      tags:
      - Discovery
      summary: List all ingredient categories
      description: Returns all ingredient categories with counts. No credit cost.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: List of ingredient categories
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: Vegetables
                        count:
                          type: integer
                          example: 1200
              example:
                data:
                - name: Vegetables
                  count: 1283
                - name: Beef
                  count: 995
                - name: Baked Goods
                  count: 617
                - name: Beverages
                  count: 555
                - name: Prepared Foods
                  count: 530
                - name: Sauces & Condiments
                  count: 512
                - name: Lamb & Game
                  count: 504
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      operationId: getApiV1IngredientCategories
      x-operation-id-source: derived
components:
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHORIZED
              message: Missing X-API-Key header
    Forbidden:
      description: API key lacks permission
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: FORBIDDEN
              message: This endpoint requires a paid API key.
    RateLimited:
      description: Rate limit or quota exceeded. RATE_LIMITED covers the per-minute rate limit as well as daily and monthly request quota exhaustion.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            rate_limited:
              summary: Per-minute rate limit exceeded
              value:
                error:
                  code: RATE_LIMITED
                  message: Per-minute rate limit exceeded. Retry in a moment.
            daily_limit:
              summary: Daily request quota exhausted
              value:
                error:
                  code: RATE_LIMITED
                  message: Daily limit reached (500 recipes). Try again tomorrow.
            monthly_limit:
              summary: Monthly request quota exhausted
              value:
                error:
                  code: RATE_LIMITED
                  message: Monthly limit reached (15,000 recipes). Upgrade your plan for more.
            unique_recipe_limit:
              summary: Monthly unique recipe limit exceeded
              value:
                error:
                  code: UNIQUE_RECIPE_LIMIT_EXCEEDED
                  message: Monthly unique recipe limit reached (100). You've accessed 100 different recipes this period. Re-requesting previously accessed recipes doesn't count against this limit. Upgrade for more.
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait before retrying (present when the per-minute rate limit triggered the 429)
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
    IngredientItem:
      type: object
      description: An ingredient from the master ingredients database
      properties:
        id:
          type: string
          format: uuid
          description: Unique ingredient identifier
        name:
          type: string
          example: Chickpeas, canned, drained
        category:
          type: string
          description: One of 23 canonical categories
          example: Legumes
        source:
          type: string
          description: 'Data source: USDA or Aggregated Public Sources'
          example: USDA
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key in format `rapi_<key>`