{
  "openapi": "3.0.1",
  "info": {
    "title": "Video to Recipe API: YouTube Recipe Extractor & Nutrition",
    "description": "Turn cooking videos into structured recipes: ingredients with quantities, steps, servings scaling, metric or imperial units, USDA nutrition per serving and an aisle-grouped shopping list. Works with YouTube links, audio or video file URLs and pasted TikTok or Instagram Reels captions.",
    "version": "0.1",
    "x-build-id": "KujOXmi8NxFN4ijAX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/messnomore~video-to-recipe/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-messnomore-video-to-recipe",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/messnomore~video-to-recipe/runs": {
      "post": {
        "operationId": "runs-sync-messnomore-video-to-recipe",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/messnomore~video-to-recipe/run-sync": {
      "post": {
        "operationId": "run-sync-messnomore-video-to-recipe",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "title": "Captions and mixed items",
            "type": "array",
            "description": "One entry per recipe. An entry is an object with any of \"youtubeUrl\", \"mediaFileUrl\", \"captionText\" and \"sourceUrl\" (a link kept for your reference, never opened), or a plain string: a YouTube link, a media file link or the caption text itself. Paste TikTok or Instagram Reels captions as \"captionText\"; links to TikTok or Instagram pages are not read. AI assistants using MCP: send objects such as {\"captionText\": \"...\"}, not plain strings."
          },
          "youtubeUrls": {
            "title": "YouTube video links",
            "type": "array",
            "description": "YouTube videos, Shorts or live links. The title and description are read with the official YouTube Data API, so add your own API key below.",
            "items": {
              "type": "string"
            }
          },
          "mediaFileUrls": {
            "title": "Audio or video file links",
            "type": "array",
            "description": "Direct links to audio or video files (mp4, webm, mov, mp3, m4a, wav...) that you have the right to process. The speech is transcribed. Links to web pages, YouTube, TikTok or Instagram are refused.",
            "items": {
              "type": "string"
            }
          },
          "youtubeApiKey": {
            "title": "YouTube Data API key",
            "type": "string",
            "description": "Your own free key from Google Cloud Console (APIs & Services → enable \"YouTube Data API v3\" → Credentials → Create API key). Needed only for YouTube links. Each video uses 1 unit of your free 10,000 daily units."
          },
          "servings": {
            "title": "Scale to servings",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Scale every recipe to this many servings. Leave empty to keep the servings stated in the video."
          },
          "unitSystem": {
            "title": "Units",
            "enum": [
              "metric",
              "imperial"
            ],
            "type": "string",
            "description": "Unit system of the normalized amounts and the shopping list. Spoons stay spoons in both.",
            "default": "metric"
          },
          "outputLanguage": {
            "title": "Output language",
            "enum": [
              "en",
              "zh",
              "ms",
              "id",
              "th",
              "vi",
              "ja",
              "ko",
              "es",
              "fr",
              "de",
              "pt"
            ],
            "type": "string",
            "description": "Language of titles, ingredient names, steps and shopping-list labels, whatever the video's language.",
            "default": "en"
          },
          "includeNutrition": {
            "title": "Estimate nutrition",
            "type": "boolean",
            "description": "Estimate calories, protein, fat and carbs per serving from USDA FoodData Central. Switch off to skip the matching.",
            "default": true
          },
          "maxRecipes": {
            "title": "Maximum recipes",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop after this many recipes. Failed items are not charged and do not count.",
            "default": 100
          },
          "maxMediaMinutes": {
            "title": "Maximum media length (minutes)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Longer audio or video files are skipped without charge. The first 3 minutes of every file are included in the recipe price.",
            "default": 20
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}