Skip to content
Jellypod
Esc
↑↓navigate↵open⌘Jpreview

Get an episode

GET/v1/episodes/{episode_id}
Authorization
AuthorizationBearer token · headerrequired

API key issued from /settings/api-keys in the Jellypod studio. Send as Authorization: Bearer <key>.

Path parameters
episode_idstring<uuid>required

Episode UUID

Responses
200

Episode with its progress. While progress.poll_after_seconds is above zero, the Retry-After header carries the same wait.

dataEpisodeDetailrequired

A podcast episode with publishing metadata, audio/video URLs when available, and its production progress.

Show properties
audio_urlstring | nullrequired
created_atstringrequired
descriptionstring | nullrequired
generationobject | nullrequired
Show properties
completed_atstring | nullrequired
error_messagestring
started_atstringrequired
statestringrequired
Allowed:generatingcompletedfailed
skipped_sourcesobject[]
Show properties
Array of object
idstringrequired
titlestring | nullrequired
urlstring | nullrequired
reasonstringrequired
host_idsstring[] | nullrequired
idstring<uuid>required
image_urlstring | nullrequired
podcast_idstring<uuid>required
published_atstring | nullrequired
scheduled_atstring | nullrequired
source_idsstring<uuid>[]required
statusEpisodeStatusrequired

Lifecycle state stored on the episode row. Generation progress is reported separately on the generation field, generating/completed/failed are not status values.

Allowed:draftpublishedscheduled
titlestring | nullrequired
updated_atstringrequired
urlstring | nullrequired
video_urlstring | nullrequired
outputsobjectrequired
Show properties
audioobjectrequired
Show properties
currentbooleanrequired
download_urlstring<uri> | nullrequired
errorstring | nullrequired
statusstringrequired
Allowed:not_requestedpreparingavailablefailed
videoobjectrequired
Show properties
currentbooleanrequired
download_urlstring<uri> | nullrequired
errorstring | nullrequired
statusstringrequired
Allowed:not_requestedpreparingavailablefailed
progressEpisodeProgressrequired

Where the episode stands across generation and rendering. MCP get_content reports the same progress.

Show properties
errorstring | nullrequired

Why generation or rendering failed, when it did.

needs_attentionobject | nullrequired

Gaps a usable episode still has, such as lines without audio or skipped sources. Fix them in Studio; null when there are none.

Show properties
missing_visualsintegerrequired
min 0
skipped_sourcesintegerrequired
min 0
unvoiced_linesintegerrequired
min 0
phasestring | nullrequired

The work still in flight, such as rendering or finalizing_outputs. Null once the episode is idle, completed, or failed.

poll_after_secondsnumberrequired

Seconds to wait before reading the episode again. Zero means it will not change on its own.

min 0
render_requiredbooleanrequired

True when the content is ready but has no playable or downloadable output and nothing is preparing one, as after a caption or watermark edit. Outputs stay unavailable until a new render or export is requested. Call POST /episodes/{episode_id}/export to produce one.

statusstringrequired

Whether the requested episode work is still running. completed means generation and all requested files finished. Individual output status reports each file before the request finishes.

Allowed:idlegeneratingcompletedfailed
400

Validation failed or malformed request.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
401

Missing or invalid API key.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
403

Authenticated, but this API key does not have access to this resource.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
404

Resource not found.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
429

Rate limit exceeded. Wait Retry-After seconds before retrying; RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset describe the window.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
500

Internal server error.

detailstring

Longer human-readable explanation when available.

errorsobject[]

Per-field validation failures. Present when type is validation_error.

Show properties
Array of object
fieldstringrequired
messagestringrequired
reasonstring

Script import failure when one or more Speakers have no saved Character match.

Allowed:unresolved_speakers
recoveryobject
Show properties
actionstringrequired
Allowed:correct_inputchoose_characterscheck_accountpoll_contentopen_studiocheck_contentreconnectretrycheck_result
idempotency_keystring
Allowed:reusenew
poll_after_secondsnumber
min 0
toolstring
Allowed:list_characterslist_contentget_contentsave_podcast
request_idstring

Correlation id, also returned in the X-Request-Id response header. Include in support requests.

speakersstring[]

Speaker labels needing a saved Character match when reason is unresolved_speakers.

statusintegerrequired

HTTP status code mirrored from the response.

titlestringrequired

Short human-readable summary.

typestringrequired

Machine-readable error class. Suitable for switch/match in client code.

Allowed:bad_requestvalidation_errorunauthorizedforbiddennot_foundconflictmethod_not_allowedunsupported_media_typeunprocessable_entityrate_limitedbad_gatewayinternal_error
Try it
Server
Authorization
Parameters
Request
curl -X GET 'https://api.jellypod.com/v1/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Accept: application/json'
Response
{
  "data": {
    "audio_url": "string",
    "created_at": "string",
    "description": "string",
    "generation": {
      "completed_at": "string",
      "error_message": "string",
      "started_at": "string",
      "state": "generating",
      "skipped_sources": [
        {
          "id": "string",
          "title": "string",
          "url": "string",
          "reason": "string"
        }
      ]
    },
    "host_ids": [
      "string"
    ],
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "image_url": "string",
    "podcast_id": "4c1cb0f8-818b-4f7a-9ddb-0d1ea990b35a",
    "published_at": "string",
    "scheduled_at": "string",
    "source_ids": [
      "497f6eca-6276-4993-bfeb-53cbbbba6f08"
    ],
    "status": "draft",
    "title": "string",
    "updated_at": "string",
    "url": "string",
    "video_url": "string",
    "outputs": {
      "audio": {
        "current": true,
        "download_url": "http://example.com",
        "error": "string",
        "status": "not_requested"
      },
      "video": {
        "current": true,
        "download_url": "http://example.com",
        "error": "string",
        "status": "not_requested"
      }
    },
    "progress": {
      "error": "string",
      "needs_attention": {
        "missing_visuals": 0,
        "skipped_sources": 0,
        "unvoiced_lines": 0
      },
      "phase": "string",
      "poll_after_seconds": 0,
      "render_required": true,
      "status": "idle"
    }
  }
}

Was this page helpful?