Shows
List, create, update, and delete shows for your station.
List shows
GET /v1/shows
Returns all shows for your station, sorted alphabetically by title.
Response
[
{
"id": 15,
"title": "Morning Show",
"description": "The best way to start your day",
"image": "https://cdn.example.com/shows/morning.png",
"published": true,
"presenter": "Jane Smith"
},
{
"id": 16,
"title": "Afternoon Drive",
"description": "Your afternoon soundtrack",
"image": "https://cdn.example.com/shows/afternoon.png",
"published": true,
"presenter": "John Doe"
}
]
Show fields
| Field | Type | Description |
|---|---|---|
id | integer | Unique show ID |
title | string | Show name |
description | string | Show description |
image | string | Show artwork URL (empty string if none) |
published | boolean | Whether the show is visible in the player and widgets |
presenter | string | Presenter name (empty string if not set) |
Both published and unpublished shows are returned. Use the published field to filter if needed.
Example
curl -H "X-API-Key: your-key" \
https://api.autopod.xyz/v1/shows
Get a single show
GET /v1/shows/{id}
Returns a single show by ID.
Response
Returns the same show object format as the list endpoint.
Errors
404 Not Found— Show doesn't exist or doesn't belong to your stream
Example
curl -H "X-API-Key: your-key" \
https://api.autopod.xyz/v1/shows/15
Create a show
POST /v1/shows
Creates a new show. Requires the shows:write scope.
Request body
{
"title": "Morning Show",
"description": "The best way to start your day",
"image_url": "https://example.com/shows/morning.png",
"published": false,
"presenter": "Jane Smith"
}
| Field | Type | Required | Max length | Description |
|---|---|---|---|---|
title | string | Yes | 200 | Show name |
description | string | No | 5000 | Show description |
image_url | string | No | 2000 | Show artwork URL (HTTP/HTTPS) |
published | boolean | No | — | Whether to show in player/widgets (default: false) |
presenter | string | No | 200 | Presenter name |
Response
HTTP 201 Created
Returns the created show object.
What happens behind the scenes
When you create a show via the API, AutoPod also creates a default series for it. Series are used internally to link shows to episodes and the schedule — you don't need to manage them directly.
Errors
400 Bad Request— Missing title, title too long, invalid URL403 Forbidden— Missing required scope
Example
curl -X POST \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"title": "Evening Jazz", "description": "Smooth jazz every evening", "published": true}' \
https://api.autopod.xyz/v1/shows
Update a show
PUT /v1/shows/{id}
Updates an existing show. Only include the fields you want to change. Requires the shows:write scope.
Request body
All fields are optional:
{
"title": "Updated Show Name",
"description": "New description",
"published": true,
"presenter": "New Presenter"
}
| Field | Type | Max length | Description |
|---|---|---|---|
title | string | 200 | Show name |
description | string | 5000 | Show description |
published | boolean | — | Visibility in player/widgets |
presenter | string | 200 | Presenter name |
Response
Returns the updated show object.
Errors
400 Bad Request— Validation error403 Forbidden— Missing required scope404 Not Found— Show doesn't exist or doesn't belong to your stream
Sending an empty update (no fields) returns the show unchanged.
Example
curl -X PUT \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"published": true, "presenter": "Jane & John"}' \
https://api.autopod.xyz/v1/shows/15
Delete a show
DELETE /v1/shows/{id}
Permanently deletes a show. The show must have no active episodes. Requires the shows:write scope.
Response
HTTP 204 No Content
No response body.
Requirements
The show must have no active (non-archived) episodes. If the show still has episodes, you'll get a 409 Conflict error:
{
"message": "Cannot delete show with existing episodes. Archive the episodes first."
}
Archive all the show's episodes first (via the API or dashboard), then retry the delete.
What gets deleted
- The show record
- Associated series records
- Associated metadata (presenter, etc.)
Episodes are not deleted — they must be archived separately before the show can be deleted.
Errors
403 Forbidden— Missing required scope404 Not Found— Show doesn't exist or doesn't belong to your stream409 Conflict— Show still has active episodes
Example
curl -X DELETE \
-H "X-API-Key: your-key" \
https://api.autopod.xyz/v1/shows/15