---
title: "Read scene-by-scene screenplay drafting progress."
method: GET
path: "/screenplay-drafts/{scriptUploadId}"
tags: ["Jobs"]
---

# Read scene-by-scene screenplay drafting progress.

`GET /screenplay-drafts/{scriptUploadId}`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/screenplay-drafts/{scriptUploadId}`
- Auth: HTTP bearer

Returns the drafting job for this draft (status, completed/total scenes, current act, saved screenplay content, and the screenplay coverage started when drafting completes), or `null` when drafting was never started. `nextStep` says the state in one plain sentence, the words the editor shows: show it rather than `status`. Once every scene is written and coverage is in, it names Finalize, the step a Table Read waits on. Read-only.

## Response `200`

Screenplay drafting status, or null.

- ScreenplayDraftStatus, nullable
  - `id` string, required
  - `status` string, required: queued, writing, interrupted (a writing lease expired), awaiting_continue (an act-first draft finished its act), paused (the screenplay changed under it), reviewing (every scene written), failed, or complete. For code: show people `nextStep`.
  - `nextStep` string, required: The draft's state in one plain sentence, the same words the editor shows, naming the writer's move when there is one: "Writing scene 4 of 12.", "Waiting to continue: Act 1 is written. Continue the episode to write Act 2.", "Draft saved. Coverage 8.2/10. Finalize the draft to cast it and start its Table Read."
  - `completedScenes` integer, required
  - `totalScenes` integer, required
  - `act` integer, required
  - `totalActs` integer, required
  - `error` string, nullable
  - `content` string, required: The saved Fountain screenplay so far.
  - `updatedAt` string, date-time, required
  - `coverage` object, nullable: Screenplay coverage started when drafting completed; null until then.
    - `id` string
    - `status` string
    - `progressDetail` string, nullable
    - `overallScore` number, nullable
    - `errorMessage` string, nullable

## Other responses

- `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.
- `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/64c1102ccb2f?raw)
