postreef
All schemas

Beauty Tutorial

vidextract.predefined.beauty.v1

A beauty tutorial extracted from a video — makeup looks, skincare routines, or haircare. Captures the ordered steps, the products used, and the techniques and tips. Optional fields are omitted when the creator does not state them — do not infer.

Fields

titlerequired
string

Title of the tutorial or look, e.g. 'Everyday natural glam', 'Morning skincare routine'.

summaryrequired
string

Two or three sentences describing the look or routine and who it is for.

category
enum

Primary beauty category. Pick the single best fit.

lookType
string

The style or occasion of the look/routine, e.g. 'natural', 'glam', 'smoky eye', 'morning routine', 'anti-aging'. Omit if unclear.

timeOfDay
enum

When the routine is intended to be done, mainly for skincare. Omit if not applicable.

skinType
string

Target skin type if stated, e.g. 'oily', 'dry', 'combination', 'sensitive', 'acne-prone'. Omit otherwise.

level
enum

Difficulty level if stated or clearly implied. Omit if unclear.

durationMinutes
integer

Approximate time the routine takes in whole minutes, if stated. Omit otherwise.

products
object[]

Products used or recommended across the tutorial.

tools
string[]

Applicators and tools used, lowercased, e.g. 'beauty blender', 'flat brush', 'gua sha', 'curling iron'.

stepsrequired
object[]

Ordered application steps in the order performed.

techniques
object[]

Named techniques or methods taught, e.g. 'baking', 'cut crease', 'double cleansing', each with a brief note.

tips
string[]

Pro tips, dos and don'ts, or general advice mentioned outside the per-step flow.

warnings
string[]

Cautions, ingredient conflicts, or things to avoid, e.g. 'don't mix retinol and vitamin C', 'always patch test'.

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "vidextract.predefined.beauty.v1",
  "title": "Beauty Tutorial",
  "description": "A beauty tutorial extracted from a video — makeup looks, skincare routines, or haircare. Captures the ordered steps, the products used, and the techniques and tips. Optional fields are omitted when the creator does not state them — do not infer.",
  "type": "object",
  "required": [
    "title",
    "summary",
    "steps"
  ],
  "additionalProperties": false,
  "properties": {
    "title": {
      "type": "string",
      "description": "Title of the tutorial or look, e.g. 'Everyday natural glam', 'Morning skincare routine'."
    },
    "summary": {
      "type": "string",
      "description": "Two or three sentences describing the look or routine and who it is for."
    },
    "category": {
      "type": "string",
      "enum": [
        "makeup",
        "skincare",
        "haircare",
        "nails",
        "fragrance",
        "grooming"
      ],
      "description": "Primary beauty category. Pick the single best fit."
    },
    "lookType": {
      "type": "string",
      "description": "The style or occasion of the look/routine, e.g. 'natural', 'glam', 'smoky eye', 'morning routine', 'anti-aging'. Omit if unclear."
    },
    "timeOfDay": {
      "type": "string",
      "enum": [
        "morning",
        "evening",
        "day",
        "night",
        "any"
      ],
      "description": "When the routine is intended to be done, mainly for skincare. Omit if not applicable."
    },
    "skinType": {
      "type": "string",
      "description": "Target skin type if stated, e.g. 'oily', 'dry', 'combination', 'sensitive', 'acne-prone'. Omit otherwise."
    },
    "level": {
      "type": "string",
      "enum": [
        "beginner",
        "intermediate",
        "advanced"
      ],
      "description": "Difficulty level if stated or clearly implied. Omit if unclear."
    },
    "durationMinutes": {
      "type": "integer",
      "description": "Approximate time the routine takes in whole minutes, if stated. Omit otherwise."
    },
    "products": {
      "type": "array",
      "description": "Products used or recommended across the tutorial.",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Product name as stated, e.g. 'CeraVe Hydrating Cleanser'. Use the most specific name given."
          },
          "brand": {
            "type": "string",
            "description": "Brand if separable from the name. Omit otherwise."
          },
          "productType": {
            "type": "string",
            "description": "Category of product, lowercased, e.g. 'cleanser', 'foundation', 'serum', 'mascara'. Omit if unclear."
          },
          "shadeOrVariant": {
            "type": "string",
            "description": "Shade, color, or variant used, e.g. 'shade 220', 'rose'. Omit if not stated."
          },
          "purpose": {
            "type": "string",
            "description": "Why this product is used / what it does, as described. Omit if not stated."
          }
        }
      }
    },
    "tools": {
      "type": "array",
      "description": "Applicators and tools used, lowercased, e.g. 'beauty blender', 'flat brush', 'gua sha', 'curling iron'.",
      "items": {
        "type": "string"
      }
    },
    "steps": {
      "type": "array",
      "description": "Ordered application steps in the order performed.",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "instruction"
        ],
        "additionalProperties": false,
        "properties": {
          "instruction": {
            "type": "string",
            "description": "What to do in this step, e.g. 'Apply moisturizer to damp skin in upward motions'."
          },
          "product": {
            "type": "string",
            "description": "The product used in this step, if named. Omit otherwise."
          },
          "technique": {
            "type": "string",
            "description": "Application technique or motion emphasized, e.g. 'pat, don't rub', 'stippling motion'. Omit if none."
          },
          "videoTimestamp": {
            "type": "string",
            "description": "Start timestamp of this step in the source video, 'mm:ss' or 'h:mm:ss'. Omit if unknown.",
            "pattern": "^(\\d{1,2}:)?\\d{1,2}:\\d{2}$"
          }
        }
      }
    },
    "techniques": {
      "type": "array",
      "description": "Named techniques or methods taught, e.g. 'baking', 'cut crease', 'double cleansing', each with a brief note.",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Technique name."
          },
          "explanation": {
            "type": "string",
            "description": "Brief explanation as given. Omit if only named."
          }
        }
      }
    },
    "tips": {
      "type": "array",
      "description": "Pro tips, dos and don'ts, or general advice mentioned outside the per-step flow.",
      "items": {
        "type": "string"
      }
    },
    "warnings": {
      "type": "array",
      "description": "Cautions, ingredient conflicts, or things to avoid, e.g. 'don't mix retinol and vitamin C', 'always patch test'.",
      "items": {
        "type": "string"
      }
    }
  }
}

Use it via the API

Pass schemaId: "vidextract.predefined.beauty.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.beauty.v1"}'

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

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