postreef
All schemas

Restaurant Review

vidextract.predefined.restaurant.v1

A restaurant or food-place review extracted from a video. Captures the venue, the dishes tasted with per-dish verdicts, ratings, and the reviewer's overall take. Optional fields are omitted when the creator does not state them — do not infer.

Fields

restaurantName
string

Name of the restaurant or food place reviewed. Omit if not named. If several places are reviewed, use the primary one or omit.

location
string

City, neighborhood, or address of the venue if stated. Omit otherwise.

cuisine
string

Cuisine or food type lowercased, e.g. 'italian', 'sushi', 'burgers', 'street food'. Omit if unclear.

priceRange
enum

Price tier of the venue if conveyed. Omit if unclear.

priceDetail
string

Concrete price info if stated, e.g. '$15 per plate', 'tasting menu £120'. Omit otherwise.

overallRating
string

Overall rating exactly as the reviewer states it, e.g. '8/10', '4 stars', 'A-'. Omit if no explicit rating is given.

overallVerdictrequired
string

Two or three sentences capturing the reviewer's overall conclusion and recommendation.

recommended
boolean

True if the reviewer would recommend the place, false if they advise against it. Omit if genuinely mixed/unclear.

dishesrequired
object[]

Each dish, drink, or item the reviewer tries, with their verdict on it. In the order tasted.

highlights
string[]

Standout positives the reviewer calls out — best dishes, great service, atmosphere.

criticisms
string[]

Negatives or complaints the reviewer raises — bad service, overpricing, poor quality.

atmosphere
string

Description of the ambiance, decor, or vibe if discussed. Omit otherwise.

service
string

Comments on the service or staff if discussed. Omit otherwise.

bestDish
string

The single dish the reviewer names as the best, if they pick one. Omit otherwise.

worstDish
string

The single dish the reviewer names as the worst, if they pick one. Omit otherwise.

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "vidextract.predefined.restaurant.v1",
  "title": "Restaurant Review",
  "description": "A restaurant or food-place review extracted from a video. Captures the venue, the dishes tasted with per-dish verdicts, ratings, and the reviewer's overall take. Optional fields are omitted when the creator does not state them — do not infer.",
  "type": "object",
  "required": [
    "overallVerdict",
    "dishes"
  ],
  "additionalProperties": false,
  "properties": {
    "restaurantName": {
      "type": "string",
      "description": "Name of the restaurant or food place reviewed. Omit if not named. If several places are reviewed, use the primary one or omit."
    },
    "location": {
      "type": "string",
      "description": "City, neighborhood, or address of the venue if stated. Omit otherwise."
    },
    "cuisine": {
      "type": "string",
      "description": "Cuisine or food type lowercased, e.g. 'italian', 'sushi', 'burgers', 'street food'. Omit if unclear."
    },
    "priceRange": {
      "type": "string",
      "enum": [
        "budget",
        "mid-range",
        "expensive",
        "luxury"
      ],
      "description": "Price tier of the venue if conveyed. Omit if unclear."
    },
    "priceDetail": {
      "type": "string",
      "description": "Concrete price info if stated, e.g. '$15 per plate', 'tasting menu £120'. Omit otherwise."
    },
    "overallRating": {
      "type": "string",
      "description": "Overall rating exactly as the reviewer states it, e.g. '8/10', '4 stars', 'A-'. Omit if no explicit rating is given."
    },
    "overallVerdict": {
      "type": "string",
      "description": "Two or three sentences capturing the reviewer's overall conclusion and recommendation."
    },
    "recommended": {
      "type": "boolean",
      "description": "True if the reviewer would recommend the place, false if they advise against it. Omit if genuinely mixed/unclear."
    },
    "dishes": {
      "type": "array",
      "description": "Each dish, drink, or item the reviewer tries, with their verdict on it. In the order tasted.",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "name",
          "verdict"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the dish or item, e.g. 'wagyu burger', 'tom yum soup'."
          },
          "verdict": {
            "type": "string",
            "description": "The reviewer's opinion of this specific dish in their own framing."
          },
          "sentiment": {
            "type": "string",
            "enum": [
              "loved",
              "liked",
              "mixed",
              "disliked",
              "hated"
            ],
            "description": "Overall sentiment toward this dish. Omit if genuinely unclear."
          },
          "rating": {
            "type": "string",
            "description": "Per-dish rating if given, e.g. '9/10'. Omit otherwise."
          },
          "price": {
            "type": "string",
            "description": "Price of this individual dish if stated. Omit otherwise."
          },
          "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}$"
          }
        }
      }
    },
    "highlights": {
      "type": "array",
      "description": "Standout positives the reviewer calls out — best dishes, great service, atmosphere.",
      "items": {
        "type": "string"
      }
    },
    "criticisms": {
      "type": "array",
      "description": "Negatives or complaints the reviewer raises — bad service, overpricing, poor quality.",
      "items": {
        "type": "string"
      }
    },
    "atmosphere": {
      "type": "string",
      "description": "Description of the ambiance, decor, or vibe if discussed. Omit otherwise."
    },
    "service": {
      "type": "string",
      "description": "Comments on the service or staff if discussed. Omit otherwise."
    },
    "bestDish": {
      "type": "string",
      "description": "The single dish the reviewer names as the best, if they pick one. Omit otherwise."
    },
    "worstDish": {
      "type": "string",
      "description": "The single dish the reviewer names as the worst, if they pick one. Omit otherwise."
    }
  }
}

Use it via the API

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

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

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