---
title: "Every ingredient on a recipe, with what still needs a decision"
method: GET
path: "/chefs/recipes/{recipe_id}/review"
tags: ["recipes"]
---

# Every ingredient on a recipe, with what still needs a decision

`GET /chefs/recipes/{recipe_id}/review`

Keyed on the ingredient rather than the scan line, so a CSV import, a photo scan, a URL import and a hand-entered recipe all review the same way. Unresolved lines are returned first. Where a line came from a scan its original text and the parser's reading are included as provenance; their absence simply means there is no extra context. Publishing is blocked while any line is unresolved, counted from the same ingredients this returns.

## Path parameters

- `recipe_id` integer, required

## Response `200`

successful operation

- RecipeReviewLineResponse[]
  - `child_recipe_id` integer, nullable
  - `description` string, nullable
  - `extracted_name` string, nullable — What the parser read the ingredient as.
  - `food_name` string, nullable
  - `group_id` integer, nullable — Ingredient group this line belongs to, or null when ungrouped.
  - `group_name` string, nullable — Display name of the line's ingredient group, for showing headings without a second lookup.
  - `ingredient_id` integer, nullable — Null for a rejected line, which no longer has an ingredient but stays visible so the curator can see what was discarded.
  - `mapping_confidence` number, nullable
  - `mapping_status` 'unmatched' | 'auto' | 'confirmed' | 'rejected', nullable — A rejected line is returned with resolved=true and no ingredient_id: it needs no further decision but is shown so the discard is visible.
  - `original_text` string, nullable — What the source said, for a scanned or imported line.
  - `resolved` boolean
  - `rxfood_id` string, nullable
  - `serving_unit_label` string, nullable
  - `servings` number, nullable
  - `sort_order` integer
  - `suggestions` object[], nullable — Catalogue candidates for an unresolved line, best first. Not exhaustive -- clients should also offer a catalogue search.
    - `confidence` number
    - `name` string
    - `name_display` string, nullable — CNF display name when populated. Null when the catalogue row has none.
    - `rxfood_id` string

## Changes

- **2026-09-24** `a61b77b30e63` — 1 info
  - added the optional property `items/suggestions/items/name_display` to the response with the `200` status
- **2026-09-19** `2991fb51502d` — 2 info
  - added the optional property `items/group_id` to the response with the `200` status
  - added the optional property `items/group_name` to the response with the `200` status
- **2026-09-15** `8d4f658e79b1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/changes/chefs/recipes/:recipe_id/review/get.md)

---

[API](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server.md) · [All operations](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/llms.txt) · [OpenAPI document](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/revisions/750cc0d96a93?raw)
