postreef
All schemas

Cocktail Recipe

vidextract.predefined.cocktail.v1

A cocktail or mixed-drink recipe extracted from a video. Ingredients are parsed into amount + unit + item; build steps are ordered. Optional fields are omitted when the creator does not state them — do not infer.

Fields

namerequired
string

Name of the cocktail, e.g. 'Mojito', 'White Russian'.

description
string

One or two sentences describing the drink's character, flavor, or occasion.

category
enum

Cocktail family or style. Pick the single best fit. Omit if unclear.

baseSpirit
string

Primary base spirit lowercased, e.g. 'vodka', 'gin', 'rum', 'tequila', 'whiskey'. Use 'none' for mocktails. Omit if unclear.

alcoholic
boolean

True if the drink contains alcohol, false for a mocktail. Omit if unclear.

servings
integer

Number of drinks the recipe yields if stated. Omit otherwise.

glassware
string

Glass the drink is served in, e.g. 'rocks glass', 'coupe', 'highball', 'martini glass'. Omit if not stated.

ice
string

Ice format used/served, e.g. 'cubed', 'crushed', 'large cube', 'none'. Omit if not stated.

garnish
string[]

Garnishes used to finish the drink, e.g. 'lime wheel', 'mint sprig', 'orange twist'.

ingredientsrequired
object[]

Ingredients in the drink, parsed into amount + unit + item.

instructionsrequired
object[]

Ordered build/mixing steps.

tools
string[]

Bar tools required, e.g. 'shaker', 'jigger', 'muddler', 'bar spoon', 'strainer'.

flavorProfile
string[]

Taste descriptors, lowercased, e.g. 'sweet', 'sour', 'bitter', 'refreshing', 'boozy', 'creamy'.

tips
string[]

Substitutions, variations, or pro tips mentioned outside the main build steps.

origin
string

Origin story or history of the cocktail if the creator mentions it. Omit otherwise.

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "vidextract.predefined.cocktail.v1",
  "title": "Cocktail Recipe",
  "description": "A cocktail or mixed-drink recipe extracted from a video. Ingredients are parsed into amount + unit + item; build steps are ordered. Optional fields are omitted when the creator does not state them — do not infer.",
  "type": "object",
  "required": [
    "name",
    "ingredients",
    "instructions"
  ],
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the cocktail, e.g. 'Mojito', 'White Russian'."
    },
    "description": {
      "type": "string",
      "description": "One or two sentences describing the drink's character, flavor, or occasion."
    },
    "category": {
      "type": "string",
      "enum": [
        "sour",
        "highball",
        "old-fashioned",
        "martini",
        "tiki",
        "punch",
        "spritz",
        "flip",
        "shot",
        "frozen",
        "hot",
        "non-alcoholic",
        "other"
      ],
      "description": "Cocktail family or style. Pick the single best fit. Omit if unclear."
    },
    "baseSpirit": {
      "type": "string",
      "description": "Primary base spirit lowercased, e.g. 'vodka', 'gin', 'rum', 'tequila', 'whiskey'. Use 'none' for mocktails. Omit if unclear."
    },
    "alcoholic": {
      "type": "boolean",
      "description": "True if the drink contains alcohol, false for a mocktail. Omit if unclear."
    },
    "servings": {
      "type": "integer",
      "description": "Number of drinks the recipe yields if stated. Omit otherwise."
    },
    "glassware": {
      "type": "string",
      "description": "Glass the drink is served in, e.g. 'rocks glass', 'coupe', 'highball', 'martini glass'. Omit if not stated."
    },
    "ice": {
      "type": "string",
      "description": "Ice format used/served, e.g. 'cubed', 'crushed', 'large cube', 'none'. Omit if not stated."
    },
    "garnish": {
      "type": "array",
      "description": "Garnishes used to finish the drink, e.g. 'lime wheel', 'mint sprig', 'orange twist'.",
      "items": {
        "type": "string"
      }
    },
    "ingredients": {
      "type": "array",
      "description": "Ingredients in the drink, parsed into amount + unit + item.",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "item"
        ],
        "additionalProperties": false,
        "properties": {
          "amount": {
            "type": "string",
            "description": "Quantity as a string so fractions ('1/2') and decimals round-trip, e.g. '2', '0.75'. Omit for 'to taste' / 'splash'."
          },
          "unit": {
            "type": "string",
            "description": "Unit of measure, e.g. 'oz', 'ml', 'cl', 'dash', 'tsp', 'part', 'splash'. Omit for whole items like '2 limes'."
          },
          "item": {
            "type": "string",
            "description": "The ingredient itself lowercased, e.g. 'white rum', 'lime juice', 'simple syrup', 'mint leaves'."
          },
          "garnish": {
            "type": "boolean",
            "description": "True if this ingredient is used as a garnish rather than mixed in.",
            "default": false
          }
        }
      }
    },
    "instructions": {
      "type": "array",
      "description": "Ordered build/mixing steps.",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "text"
        ],
        "additionalProperties": false,
        "properties": {
          "text": {
            "type": "string",
            "description": "Imperative build step, e.g. 'Muddle the mint with the sugar and lime juice.'"
          },
          "technique": {
            "type": "string",
            "enum": [
              "build",
              "shake",
              "stir",
              "muddle",
              "blend",
              "layer",
              "strain",
              "double-strain",
              "dry-shake",
              "float",
              "rim",
              "garnish"
            ],
            "description": "Primary bartending technique for this step. Omit if not applicable."
          },
          "videoTimestamp": {
            "type": "string",
            "description": "Start timestamp in source video, 'mm:ss' or 'h:mm:ss'. Omit if unknown.",
            "pattern": "^(\\d{1,2}:)?\\d{1,2}:\\d{2}$"
          }
        }
      }
    },
    "tools": {
      "type": "array",
      "description": "Bar tools required, e.g. 'shaker', 'jigger', 'muddler', 'bar spoon', 'strainer'.",
      "items": {
        "type": "string"
      }
    },
    "flavorProfile": {
      "type": "array",
      "description": "Taste descriptors, lowercased, e.g. 'sweet', 'sour', 'bitter', 'refreshing', 'boozy', 'creamy'.",
      "items": {
        "type": "string"
      }
    },
    "tips": {
      "type": "array",
      "description": "Substitutions, variations, or pro tips mentioned outside the main build steps.",
      "items": {
        "type": "string"
      }
    },
    "origin": {
      "type": "string",
      "description": "Origin story or history of the cocktail if the creator mentions it. Omit otherwise."
    }
  }
}

Use it via the API

Pass schemaId: "vidextract.predefined.cocktail.v1" when you submit an extraction. The call returns an id immediately. Poll GET /v1/extractions/{id}/result (or register a webhook) for the structured result.

curl -s -X POST https://postreef.com/v1/extractions \
  -H "x-api-key: $VIDEXTRACT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
       "inputs": ["transcript", "comments"],
       "schemaId": "vidextract.predefined.cocktail.v1"}'

Full request/response shape in the API reference; copy-paste poll loops in the API quickstart.

Pass schemaId: "vidextract.predefined.cocktail.v1" in your request to extract with this schema.