---
search:
  tags:
    - Episodes
    - POST
seo:
  description: >-
    Inserts an episode row with only the metadata you provide. No script, audio,
    or video is… Reference for the POST /v1/episodes endpoint in the Jellypod
    API.
sidebar:
  label: Create an empty episode
  badge: POST
title: Create an empty episode
type: openapi-operation
---
Inserts an episode row with only the metadata you provide. No script, audio, or video is generated. Use `POST /v1/episodes/generate` to create an episode and trigger generation in one call.

`POST /v1/episodes`

**Request body** (`application/json`, required)

- `description` (string)
- `host_ids` (string[])
- `image` (string<uri>)
- `podcast_id` (string<uuid>, required) — Podcast that will own the new episode.
- `title` (string)

Request body example:

```json
{
  "description": "string",
  "host_ids": [
    "string"
  ],
  "image": "http://example.com",
  "podcast_id": "4c1cb0f8-818b-4f7a-9ddb-0d1ea990b35a",
  "title": "string"
}
```

**Responses**

- `201` — Episode created
- `400` — Validation failed or malformed request.
- `401` — Missing or invalid API key.
- `403` — Authenticated, but this API key does not have access to this resource.
- `404` — Resource not found.
- `415` — Request \`Content-Type\` is not supported for this endpoint.
- `429` — Rate limit exceeded. Wait \`Retry-After\` seconds before retrying; \`RateLimit-Limit\`, \`RateLimit-Remaining\`, and \`RateLimit-Reset\` describe the window.
- `500` — Internal server error.

Response example, 201:

```json
{
  "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"
  }
}
```
