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

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

`GET /patients/{patient_id}/recipes/{recipe_id}/review`

Same review surface as the chef path, scoped to a recipe this patient owns. Public library recipes the patient can browse are not reviewable here. Unresolved lines are returned first. Corrections are written to the ledger with actor_type patient.

## Path parameters

- `patient_id` integer, required
- `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` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/changes/patients/:patient_id/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/a61b77b30e63?raw)
