---
title: "Read a table read's share link."
method: GET
path: "/scripts/{scriptUploadId}/share"
tags: ["Scripts"]
---

# Read a table read's share link.

`GET /scripts/{scriptUploadId}/share`

## Request

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

Returns ONE screenplay version's (`scriptUploadId`) table-read share state: the active public link if the read is shared — its `shareUrl`, `audience`, playback `descriptor` (mode, scope, scene/entries), `expiresAt`, `includeOnProfile` flag and the render status of its MP4 (theater) or scoped MP3 (audio) — or `share: null` when it is not shared. `jobId` names the table read the share resolves to (the script's latest read), null when there is none. A script that is not yours is 404, the same as one that does not exist. The same read the Writers Lab's share dialog, MCP `get_script_share` and `sleeperhit script share get` make. Read-only; costs no credits.

## Response `200`

The script's table-read share state.

- ScriptShareState: A script version's table-read share state: the active link if the read is shared, else null.
  - `scriptUploadId` string, required
  - `jobId` string, nullable, required: The table read the share resolves to (the script's latest read), null when there is none.
  - `shareUrl` string, nullable, required: The public, signed watch/listen URL, or null when there is no active share.
  - `share` ScriptShareLink, required
    - `id` string, required: The share link id.
    - `audience` 'public' | 'private_review' | 'team', required
    - `descriptor` ScriptShareDescriptor, required: The playback a share describes. Every field is optional; a create with none is the whole-read theater share the dialog's default is.
      - `mode` 'theater' | 'audio': `theater`: an MP4 link that plays the read. `audio`: a scoped full-mix MP3. Default `theater`.
      - `source` 'recording' | 'adhoc': Where the recording comes from: the job's recording, or an ad-hoc performance. Default `recording`.
      - `scope` 'whole' | 'scene' | 'entries' | 'conversation': What the share plays: the whole read, one scene, a band of entries, or one conversation. Default `whole`.
      - `sceneIndex` integer: For `scope: scene`: which scene.
      - `conversationId` string: For `scope: conversation`: which conversation.
      - `startEntry` integer: For `scope: entries`: the first entry index.
      - `endEntry` integer: For `scope: entries`: the last entry index.
      - `withCredits` boolean: Bake the opening title + closing credits into a whole-episode theater MP4.
    - `mode` 'theater' | 'audio', required
    - `active` boolean, required
    - `includeOnProfile` boolean, required
    - `expiresAt` string, nullable, required: When the link stops working, or null for no expiry.
    - `renderedVideoStatus` string, required: The theater MP4's render state: idle, needs_recording, queued, rendering, complete, stale or failed. A render that stopped with no job behind it reads `failed` (or `stale` over an earlier MP4) with `renderedVideoError` saying so: ask for it again.
    - `renderedVideoUrl` string, nullable, required
    - `renderedVideoDurationMs` integer, nullable, required
    - `renderedVideoError` string, nullable, required
    - `renderedAudioStatus` string, required: The scoped MP3's render state. A render that stopped with no job behind it reads `failed` (or `stale` over an earlier MP3 — or when the earlier MP3 could not be confirmed) with `renderedAudioError` saying so: share the read again to render it.
    - `renderedAudioUrl` string, nullable, required
    - `renderedAudioDurationMs` integer, nullable, required
    - `renderedAudioError` string, nullable, required

## 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.
- `404`: The named project or source 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)
