---
title: "Flag one table-read line for review."
method: POST
path: "/artifacts/{artifactId}/review-items"
tags: ["Artifacts"]
---

# Flag one table-read line for review.

`POST /artifacts/{artifactId}/review-items`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/artifacts/{artifactId}/review-items`
- Auth: HTTP bearer

Flags ONE line of a `table_read` artifact for the writer's review, with an optional `note`: pass the line's `entryIndex`, the `lineText` as it stands, and optionally `character` (null or omitted for narration) and `note`. One flag per line (keyed by `(jobId, entryIndex)`) — flagging a line again replaces its note rather than adding a second, so the same flag always lands and a retry is safe. An unknown field, a wrong-typed value or a missing `lineText` is refused with 400 `validation_failed` — the same validation MCP `flag_line_for_review` and `sleeperhit script review flag` go through. Answers the flag as it now stands. Free and naturally idempotent, so no `Idempotency-Key`: it renders nothing.

## Request body

- LineReviewFlag: One line to flag for review. One flag per line: flagging it again replaces its note.
  - `entryIndex` integer, required: Which line: its index in the read's parsed screenplay.
  - `lineText` string, required: The line's text as it stands.
  - `character` string, nullable: Who speaks the line; null or omitted for narration.
  - `note` string, nullable: The writer's note on why it needs review.

## Response `200`

The flag as it now stands.

- LineReviewFlagResult
  - `artifactId` string, required
  - `reviewItem` LineReviewItem, required
    - `id` string, required
    - `jobId` string, required
    - `entryIndex` integer, required: Which line: its index in the read's parsed screenplay.
    - `character` string, nullable, required: Who speaks the line; null for narration.
    - `lineText` string, required: The line as it stood when it was flagged.
    - `note` string, nullable, required: The writer's note on why it needs review.
    - `createdAt` string

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: The story artifact does not exist or is owned by another account.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/4534f5d25540?raw)
