History
Processing history and statistics
GET /history
Section titled “GET /history”Get processing history
Returns processing history with pagination and filtering
Parameters
Section titled “Parameters”status(query, string, one ofall,completed,failed): Filter by processing statuspodcast_slug(query, string): Filter by podcast sluglimit(query, integer): Maximum number of entries to returnoffset(query, integer): Number of entries to skippage(query, integer): Page number (1-based). Alternative to offset. If both provided, page takes precedence.sort_by(query, string, one ofprocessed_at,podcast_title,episode_title,processing_duration_seconds,ads_detected,reprocess_number,status,llm_cost): Column to sort bysort_dir(query, string, one ofasc,desc): Sort direction
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Processing history | object |
200 response body
Section titled “200 response body”history(array of ProcessingHistoryEntry)total(integer): Total number of history entries matching the filtertotalPages(integer): Total number of pages availablelimit(integer)offset(integer)page(integer): Current page number (1-based)
GET /history/stats
Section titled “GET /history/stats”Get processing statistics
Returns aggregate statistics from processing history
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Processing statistics | object |
200 response body
Section titled “200 response body”total_processed(integer)completed(integer)failed(integer)total_ads_detected(integer)avg_processing_time(number or null): Average processing time in secondstotalInputTokens(integer): Total LLM input tokens across all completed processing runstotalOutputTokens(integer): Total LLM output tokens across all completed processing runstotalLlmCost(number): Total estimated LLM cost in USD across all completed processing runspodcasts(array of object)podcasts[].id(integer)podcasts[].title(string)
GET /history/downloads
Section titled “GET /history/downloads”List episode downloads
Client downloads of episode audio, newest first by default. Range requests from one client within 15 minutes count as one row. Client IPs are stored and location is filled only when geo lookup is enabled.
Parameters
Section titled “Parameters”page(query, integer)limit(query, integer)sortBy(query, string, one oflast_seen_at,podcast,client_ip,location,subscriber)sortDir(query, string, one ofasc,desc)podcastSlug(query, string)subscriberKeyId(query, string)since(query, string): First day to include (YYYY-MM-DD, UTC).until(query, string): Last day to include (YYYY-MM-DD, UTC).search(query, string): Substring match on client IP or user agent.
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Page of downloads | object |
200 response body
Section titled “200 response body”downloads(array of DownloadHistoryEntry, required)total(integer, required)page(integer, required)limit(integer, required)
GET /history/export
Section titled “GET /history/export”Export processing history
Export processing history as CSV or JSON file
Parameters
Section titled “Parameters”format(query, string, one ofcsv,json): Export formatstatus(query, string, one ofall,completed,failed): Filter by processing statuspodcast_slug(query, string): Filter by podcast slug
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Exported history file | object |
200 response body
Section titled “200 response body”history(array of ProcessingHistoryEntry)