preroll.io docs
Developer

API Reference

Authenticate and interact with the preroll.io REST API using API keys.

Open with AI:ClaudeChatGPT

Authentication

All API requests require a Bearer token in the Authorization header. API keys are created in Settings → Developer → API Keys.

Keys are prefixed with pr_ and are only shown once at creation. They are stored as SHA-256 hashes — preroll.io never stores your raw key.

curl -H "Authorization: Bearer pr_your_api_key_here" \
  https://api.preroll.io/api/v1/dashboard

Response Format

All endpoints return a consistent JSON envelope.

Success

{
  "data": { ... }
}

Error

{
  "error": {
    "message": "Human-readable error description",
    "code": "ERROR_CODE"
  }
}

HTTP status codes follow standard conventions: 200 for success, 400 for bad requests, 401 for unauthorized, 403 for forbidden, 404 for not found, and 500 for server errors.

Endpoints

MethodEndpointDescription
GET/api/v1/dashboardDashboard summary (stats, attention list, recent activity)
GET/api/v1/clientsList all clients in your organization
POST/api/v1/clientsCreate a new client
GET/api/v1/clients/{client_id}Get client details
PATCH/api/v1/clients/{client_id}Update a client
GET/api/v1/showsList all shows (optionally filter by ?client_id=)
POST/api/v1/clients/{client_id}/showsCreate a new show
GET/api/v1/episodesList episodes (filter with ?show_id=, ?status=, ?stage_id=)
POST/api/v1/shows/{show_id}/episodesCreate a new episode for a show
PATCH/api/v1/shows/{show_id}/episodes/{episode_id}Update an episode
GET/api/v1/deliverablesList deliverables (filter with ?episode_id=, ?status=)
POST/api/v1/episodes/{episode_id}/deliverablesCreate a deliverable
PATCH/api/v1/deliverables/{deliverable_id}Update a deliverable
POST/api/v1/episodes/{episode_id}/transcribeStart audio transcription (Deepgram)
POST/api/v1/episodes/{episode_id}/generateGenerate AI content from transcript
POST/api/v1/episodes/{episode_id}/pipelineRun full AI pipeline (transcribe + generate)
POST/api/v1/ai/chatStream AI chat response (SSE)
GET/api/v1/storageStorage usage summary and file list
DELETE/api/v1/storage/files/{file_id}Delete a stored file
GET/api/v1/tagsList all tags
POST/api/v1/tagsCreate a tag
GET/api/v1/webhook-endpointsList webhook endpoints
POST/api/v1/webhook-endpointsCreate a webhook endpoint

Query Parameters

GET /api/v1/episodes

ParameterTypeDescription
show_iduuidFilter episodes by show
statusstringFilter by status (draft, in_progress, published)
stage_iduuidFilter by pipeline stage

GET /api/v1/deliverables

ParameterTypeDescription
episode_iduuidFilter deliverables by episode
statusstringFilter by status (pending, approved, revision_requested)

Creating an Episode

curl -X POST \
  -H "Authorization: Bearer pr_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Episode 42: The Answer",
    "description": "In this episode we discuss...",
    "episode_number": 42
  }' \
  https://api.preroll.io/api/v1/shows/{show_id}/episodes

Updating an Episode

curl -X PATCH \
  -H "Authorization: Bearer pr_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Episode 42: The Updated Title",
    "status": "in_progress"
  }' \
  https://api.preroll.io/api/v1/shows/{show_id}/episodes/{episode_id}

Rate Limits

There are no enforced rate limits at this time. Please be respectful with your request volume. Rate limiting may be introduced in the future with standard 429 responses and Retry-After headers.

On this page