---
title: "Continue over screenplay coverage scored under the bar (the writer's acknowledged override)."
method: POST
path: "/scripts/{scriptUploadId}/coverage/acknowledge"
tags: ["Scripts"]
---

# Continue over screenplay coverage scored under the bar (the writer's acknowledged override).

`POST /scripts/{scriptUploadId}/coverage/acknowledge`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/scripts/{scriptUploadId}/coverage/acknowledge`
- Auth: HTTP bearer

Only on the writer's explicit choice, after they have seen the scores and the reasons, with their own reason: continue over a finalized version's screenplay coverage that scored under the bar. It opens casting, voices and the table read for that version, which still quote and wait for confirmation as they always do: nothing is cheaper or free. It acknowledges the judge's verdict only (the newest complete report on the version), never a draft, a version with no report, a report still scoring or failed, or one with no readable score. It holds for that exact version: a new version, a newer report or a change to the version's text needs coverage (or an acknowledgement) of its own. It is recorded on the report (who, when, which version, why). Free. Read the gate first (GET on this path): show the writer its score, bar and reasons, and send the `reportId` they read and their `reason` (3–500 characters). Refused with 409 `script_state_invalid` (`details.overridable: false`) when `gate.override.allowed` is false, or when `reportId` is not the newest complete report (`details.latestReportId`). A version held for its coverage is then prepared as a passing score would prepare it. Answers with the record, the line to show and the gate it left. Scope: `story:write`.

## Request body

- ScreenplayCoverageAcknowledgeRequest
  - `reportId` string, required: The report the writer read: `gate.reportId`.
  - `reason` string, required: Why the writer continues anyway, in their own words.

## Response `200`

The acknowledgement, and the gate it left.

- ScreenplayCoverageAcknowledgeResult
  - `acknowledgement` ScreenplayCoverageAcknowledgement, required: The writer's choice to continue over this version's screenplay coverage, recorded on the report it acknowledges.
    - `scriptUploadId` string, required
    - `versionNumber` integer, required
    - `reportId` string, required
    - `contentHash` string, required: The fingerprint of the version's text when acknowledged: a change to the text voids it.
    - `overallScore` number, required
    - `gateThreshold` number, required
    - `reasons` string[], required: What the report said, as the writer was shown it.
    - `reason` string, required: The writer's own reason.
    - `at` string, date-time, required
    - `by` object, required
      - `userId` string, required
      - `surface` 'app' | 'slug' | 'api', required
      - `keyId` string, nullable, required
  - `notice` string, required: The one line every surface shows for it.
  - `gate` ScreenplayCoverageGate, required: Where the version's screenplay coverage gate stands. `open`: casting (and so voices and the table read) may start, each still quoted.
    - `scriptUploadId` string, required
    - `versionNumber` integer, required
    - `open` boolean, required
    - `status` 'not_in_project' | 'story_film' | 'draft' | 'no_report' | 'scoring' | 'below_bar' | 'passed' | 'acknowledged', required: `passed` and `acknowledged` are open; `not_in_project` has no gate; `story_film` is a story film's script, open on the story film judge's pass instead of the screenplay coverage bar (its table read, cast and voices never wait on screenplay coverage).
    - `reportId` string, nullable, required: The newest complete screenplay report on the version: the one an acknowledgement names.
    - `overallScore` number, nullable, required
    - `gateThreshold` number, required
    - `reasons` string[], required
    - `acknowledgement` ScreenplayCoverageAcknowledgement, required: The writer's choice to continue over this version's screenplay coverage, recorded on the report it acknowledges.
      - `scriptUploadId` string, required
      - `versionNumber` integer, required
      - `reportId` string, required
      - `contentHash` string, required: The fingerprint of the version's text when acknowledged: a change to the text voids it.
      - `overallScore` number, required
      - `gateThreshold` number, required
      - `reasons` string[], required: What the report said, as the writer was shown it.
      - `reason` string, required: The writer's own reason.
      - `at` string, date-time, required
      - `by` object, required
        - `userId` string, required
        - `surface` 'app' | 'slug' | 'api', required
        - `keyId` string, nullable, required
    - `override` object, required
      - `allowed` boolean, required
      - `why` string, required

## 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 named project or source does not exist or is owned by another account.
- `409`: The report cannot be acknowledged, or is not the newest one (`script_state_invalid`, `details.overridable: false`).
- `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)
