---
title: "GET /recipes/{id}"
method: GET
path: "/recipes/{id}"
tags: ["recipes"]
---

# GET /recipes/{id}

`GET /recipes/{id}`

## Request

- Base URL: `https://api.tinyplates.dev`
- URL: `https://api.tinyplates.dev/recipes/{id}`
- Auth: none required

Retrieve a single recipe by its id. `servings` rewrites every quantity for that many servings: ranges scale with them, an ingredient with no quantity is left alone, and `original` still holds the line the source published. Per-serving nutrition does not change, because more servings of the same food is the same plate. `units` rewrites the recipe in metric or imperial units, converting oven temperatures too and weighing a volume when the density of the ingredient is known; a volume it cannot weigh keeps the unit the source wrote it in and is named in `conversion.unweighed`. Amounts are rounded once, at the end, the way a cook would write them: grams and millilitres to a step a scale can read, spoons and cups to the fractions they are marked in, and countable things such as cloves to halves.

## Path parameters

- `id` string, required

## Query parameters

- `servings` string
- `units` string

## Response `200`

Success

- object
  - `conversion` object
    - `system` 'imperial' | 'metric', required
    - `unweighed` string[], required: Ingredients measured by volume that could not be weighed, because no density is known for them. Their lines keep the unit the source wrote them in.
  - `nutritionTotals` NutritionTotals: The same nutrition told twice: for one serving, which is what recipes are compared on, and for the whole recipe, which is what the cook is making. Present only when the recipe carries nutrition and says how many servings it makes. Scaling the recipe changes the whole-recipe figures and leaves the per-serving ones alone.
    - `basisServings` number, required: The serving count perRecipe was multiplied up from: the label's own basis when the recipe declares one — a recipe stored as serving 8 to 10 can carry a label worked out on 10, not the stored 8 — otherwise the serving count the recipe had before any scaling.
    - `perRecipe` Nutrition, required
      - `basis` object, required
        - `description` string: a non empty string
        - `servings` number: a positive number
        - `type` '100g' | 'recipe' | 'serving', required
      - `calories` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `carbohydrates` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `cholesterol` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fiber` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `micronutrients` object
      - `protein` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `saturatedFat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `sodium` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `source` 'calculated' | 'provided', required
      - `sugar` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
    - `perServing` Nutrition, required
      - `basis` object, required
        - `description` string: a non empty string
        - `servings` number: a positive number
        - `type` '100g' | 'recipe' | 'serving', required
      - `calories` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `carbohydrates` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `cholesterol` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fiber` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `micronutrients` object
      - `protein` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `saturatedFat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `sodium` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `source` 'calculated' | 'provided', required
      - `sugar` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
    - `servings` number, required
  - `recipe` Recipe, required: A recipe in the canonical model. Ingredients carry a canonical `ingredientId` once the recipe has been enriched, and a `display` line written in the recipe's own language. Times are in seconds. Regulated allergen features include a status for every supported allergen and an informational, not medical advice disclaimer.
    - `id` string, required
    - `author` Author
      - `name` string, required: a non empty string
      - `url` string: a string matching the pattern ^https?:\/\/\S+$
    - `description` string: a non empty string
    - `dietary` Dietary: Diet flags declared by the site or inferred from the required ingredients. A declared flag wins; a missing flag is unknown, and false is a known no.
      - `dairyFree` boolean
      - `glutenFree` boolean
      - `pescatarian` boolean
      - `vegan` boolean
      - `vegetarian` boolean
    - `instructions` RecipeInstruction[], required
      - `duration` Duration
        - `seconds` integer, required: an integer
      - `equipment` Slug[]
      - `group` string: a non empty string
      - `ingredients` string[]
      - `step` integer, required: a positive number
      - `techniques` Slug[]
      - `temperature` Temperature
        - `unit` 'C' | 'F', required
        - `value` number, required
      - `text` string, required: a non empty string
    - `language` string, required: a string matching the pattern ^[a-z]{2}$
    - `media` RecipeMedia[], required
      - union
        - ImageMedia
          - `alt` string: a non empty string
          - `caption` string: a non empty string
          - `id` string, required: a string with no leading or trailing whitespace
          - `license` string: a non empty string
          - `sourceUrl` string: a string matching the pattern ^https?:\/\/\S+$
          - `step` integer: a positive number
          - `height` integer: a positive number
          - `role` 'gallery' | 'hero' | 'step' | 'thumbnail', required
          - `type` 'image', required
          - `url` string, required: a string matching the pattern ^https?:\/\/\S+$
          - `variants` ImageVariant[]
            - `height` integer: a positive number
            - `url` string, required: a string matching the pattern ^https?:\/\/\S+$
            - `width` integer: a positive number
          - `width` integer: a positive number
        - VideoMedia
          - `alt` string: a non empty string
          - `caption` string: a non empty string
          - `id` string, required: a string with no leading or trailing whitespace
          - `license` string: a non empty string
          - `sourceUrl` string: a string matching the pattern ^https?:\/\/\S+$
          - `step` integer: a positive number
          - `duration` Duration
            - `seconds` integer, required: an integer
          - `embedUrl` string: a string matching the pattern ^https?:\/\/\S+$
          - `provider` string: a non empty string
          - `role` 'gallery' | 'step', required
          - `thumbnailUrl` string: a string matching the pattern ^https?:\/\/\S+$
          - `type` 'video', required
          - `url` string, required: a string matching the pattern ^https?:\/\/\S+$
          - `videoId` string: a non empty string
    - `notes` NonEmptyTrimmedString[]
    - `nutrition` Nutrition
      - `basis` object, required
        - `description` string: a non empty string
        - `servings` number: a positive number
        - `type` '100g' | 'recipe' | 'serving', required
      - `calories` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `carbohydrates` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `cholesterol` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `fiber` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `micronutrients` object
      - `protein` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `saturatedFat` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `sodium` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
      - `source` 'calculated' | 'provided', required
      - `sugar` NutrientValue
        - `unit` 'IU' | 'g' | 'kcal' | 'mg' | 'µg', required
        - `value` number, required: a non-negative number
    - `rating` Rating
      - `best` number: a positive number
      - `count` integer, required: an integer
      - `reviewCount` integer: an integer
      - `value` number, required: a non-negative number
      - `worst` number: a non-negative number
    - `servings` Servings
      - `max` number: a positive number
      - `original` string, required: a non empty string
      - `quantity` number: a positive number
      - `unit` string: a non empty string
    - `times` RecipeTimes, required
      - `cook` Duration
        - `seconds` integer, required: an integer
      - `inactive` Duration
        - `seconds` integer, required: an integer
      - `prep` Duration
        - `seconds` integer, required: an integer
      - `total` Duration
        - `seconds` integer, required: an integer
    - `title` string, required: a non empty string
    - `allergens` RecipeAllergens
      - `celery` boolean, required: Whether the recipe contains this regulated allergen.
      - `crustaceans` boolean, required: Whether the recipe contains this regulated allergen.
      - `eggs` boolean, required: Whether the recipe contains this regulated allergen.
      - `fish` boolean, required: Whether the recipe contains this regulated allergen.
      - `gluten-cereals` boolean, required: Whether the recipe contains this regulated allergen.
      - `lupin` boolean, required: Whether the recipe contains this regulated allergen.
      - `milk` boolean, required: Whether the recipe contains this regulated allergen.
      - `molluscs` boolean, required: Whether the recipe contains this regulated allergen.
      - `mustard` boolean, required: Whether the recipe contains this regulated allergen.
      - `nuts-eu` boolean, required: Whether the recipe contains this regulated allergen.
      - `peanuts` boolean, required: Whether the recipe contains this regulated allergen.
      - `sesame` boolean, required: Whether the recipe contains this regulated allergen.
      - `soy` boolean, required: Whether the recipe contains this regulated allergen.
      - `sulphites` boolean, required: Whether the recipe contains this regulated allergen.
      - `tree-nuts-us` boolean, required: Whether the recipe contains this regulated allergen.
      - `wheat` boolean, required: Whether the recipe contains this regulated allergen.
      - `disclaimer` 'Informational only; not medical advice. Verify ingredients and product labels before serving someone with an allergy.', required
    - `categories` string[], required
    - `courses` string[], required
    - `createdAt` string, required: a string to be decoded into a Date
    - `cuisines` string[], required
    - `equipment` string[]
    - `groups` string[], required: The distinct `group` values of the ingredients and then the steps, in the order they first appear. Empty when the recipe has no sections.
    - `ingredients` RecipeIngredient[], required
      - `display` string, required: a non empty string
      - `group` string: a non empty string
      - `localName` string: a non empty string
      - `localPreparation` string: a non empty string
      - `ingredientId` string: a string matching the pattern ^[a-z0-9]+(-[a-z0-9]+)*$
      - `name` string, required: a non empty string
      - `note` string: a non empty string
      - `optional` boolean, required
      - `original` string, required: a non empty string
      - `preparation` string: a non empty string
      - `quantity` Quantity
        - `max` number: a non-negative number
        - `unit` 'g' | 'kg' | 'lb' | 'oz' | 'cl' | 'cup' | 'dl' | 'fl-oz' | 'gallon' | 'l' | 'ml' | 'pint' | 'quart' | 'tbsp' | 'tsp' | 'bag' | 'bottle' | 'box' | 'bunch' | 'can' | 'clove' | 'cube' | 'dash' | 'drop' | 'ear' | 'handful' | 'head' | 'jar' | 'knob' | 'leaf' | 'package' | 'packet' | 'piece' | 'pinch' | 'portion' | 'pot' | 'scoop' | 'sheet' | 'shot' | 'slice' | 'sprig' | 'stalk' | 'stick' | 'tub' | 'cm' | 'inch'
        - `value` number, required: a non-negative number
      - `size` string: a non empty string
    - `tags` string[], required
    - `techniques` string[]
    - `text` RecipeText, required: The recipe as lines of text: each ingredient's `display` line and each step's `text`, in order. A convenience for rendering; everything here is also in the structured fields.
      - `ingredients` string[], required
      - `instructions` string[], required
    - `updatedAt` string, required: a string to be decoded into a Date
    - `url` string, required

## Other responses

- `400`: The request did not match the expected schema
- `401`: ApiKeyDisabledError
- `404`: RecipeNotFoundError
- `429`: DailyAllowanceExceededError
- `500`: InternalError

---

[API](https://skmtc.dev/tinyplates/apis/tiny-plates-api.md) · [All operations](https://skmtc.dev/tinyplates/apis/tiny-plates-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tinyplates/apis/tiny-plates-api/revisions/514440dcbb5d?raw)
