Skip to content
ThemeNord

Same themes as the MinusPod app

Default

Catppuccin

Dracula

Nord

Gruvbox

Solarized

Rose Pine

Kanagawa

Ayu

Other

Schemas

Objects referenced from the endpoint pages. Field names link back here.

  • set (boolean)
  • lines (integer)
  • updatedAt (string or null)
  • enabled (boolean)
  • apiKeyConfigured (boolean)
  • sbSubmitEnabled (boolean)
  • sbUserIdConfigured (boolean): Whether a SponsorBlock user ID is stored. Read it with GET /settings/youtube/sb-user-id.
  • sbUserIdGenerated (boolean): Whether the stored ID was generated by MinusPod. A generated ID cannot be cleared or replaced.
  • processDelayMinutes (integer)
  • sbProbeAttempts (integer)
  • sbProbeIntervalMinutes (integer)
  • sbWatchIntervalHours (integer)
  • sbWatchMaxDays (integer)
  • llmFallback (boolean)
  • captionsAsTranscript (boolean)
  • hidePrivate (boolean)
  • transcribeFallback (boolean)
  • proxyUrl (string): Proxy for yt-dlp and YouTube Data API requests. http, https, socks4, socks5 and socks5h schemes.
  • ytdlpExtraArgs (string): Extra command line arguments added before the app’s own options on every yt-dlp call. Options that run or load other programs, change where files are written, read local files, alter the JSON output, update the binary or carry passwords are rejected; use long option names.
  • ytdlp (object)
  • ytdlp.autoUpdate (boolean)
  • ytdlp.version (string or null)
  • ytdlp.lastUpdateAt (string or null)
  • ytdlp.lastCheckAt (string or null)
  • ytdlp.lastError (string or null)
  • ytdlp.bakedVersion (string or null)
  • cookies (object)
  • cookies.set (boolean)
  • cookies.lines (integer)
  • cookies.updatedAt (string or null)
  • bounds (map of array of integer)
  • maxConcurrentOperations (integer): Whole native operations per process. Profiles with the same endpoint and credential share the strictest active or queued limit; queue waits consume the operation deadline. Default 4.
  • retryAfterMaxSeconds (number): Maximum first-retry upstream hint wait in seconds, including jitter. Zero permits no hint wait; the operation deadline also bounds waits. Default 5.
  • detectionEnter (number): Default 0.95.
  • detectionStay (number): Must not exceed detectionEnter. Default 0.4.
  • categoryPass (boolean): Default true.
  • categoryContext (integer): Transcript segments on each side of a classified span. Default 2.
  • defaultCategory (string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap): Default sponsor.
  • refineBoundaries (boolean): Default false.
  • reviewEvidenceEnter (number or null): Null selects the model evidence threshold. Default null.
  • reviewChoiceEnter (number or null): Null selects the model choice threshold. Default null.
  • reviewProgrammeVeto (number): Default 0.85.
  • reviewBoundaryCapSeconds (number): Maximum boundary movement in seconds. Default 60.
  • reviewContextSeconds (number): Focused review context window in seconds. Default 30.
  • requestDeadlineSeconds (number): Absolute logical-operation deadline in seconds, shared by requests and retry waits. Default 75.
  • maxQuestionsPerRequest (integer or null): Null disables the configured question-count cap. Default null.
  • maxRequestBytes (integer or null): Serialized UTF-8 request byte cap; null disables the configured byte cap. This is not a token limit. Default null.
  • maxChoiceOptions (integer or null): Compatible backend Choice option cap, or null. TypeSafe uses a fixed cap of 255 options.
  • maxPromptTokens (integer or null): Estimated request token budget (4 characters per token). A detection window above it is split into equal parts before sending; null sends each window whole. Default null.

Includes every field of SystemOneTuning.

  • maxChoiceOptions (constant 255)
  • primary (object)
  • primary.typesafe (boolean)
  • primary.systemone-compatible (boolean)
  • secondary (object)
  • secondary.typesafe (boolean)
  • secondary.systemone-compatible (boolean)

Partial nested merge by credential slot and provider type. Unspecified slots, providers, and fields retain saved values. Null resets one complete profile to shipped defaults. Values survive provider type switches. TypeSafe and compatible profiles are independent for both slots. Unsupported keys and invalid cross-field combinations return 400. Bulk ad-detection reset restores all profiles.

  • requests (integer, required)
  • inputTokens (integer, required)
  • outputTokens (integer, required)
  • knownCostUsd (string, required): Exact decimal USD sum of known attempt costs; partial known spend remains visible.
  • unknownUsageRequestCount (integer, required)
  • unknownCostRequestCount (integer, required)
  • proposed (integer, required): Distinct run/pattern/kind proposal count, including superseded records.
  • accepted (integer, required): Approved or undone actions.
  • applied (integer, required): Approved actions not undone; includes deleted patterns.
  • reverted (integer, required): Undone actions.
  • calls (integer, required)
  • requests (integer, required)
  • dispatchLatencyMsTotal (integer, required)
  • dispatchLatencyMsAverage (integer or null, required): Mean dispatch latency per HTTP request in milliseconds, null without requests
  • logicalLatencyMsTotal (integer, required)
  • logicalLatencyMsAverage (number or null, required): Mean of measured logical-call durations in milliseconds; null when no duration is available.
  • tokens (object, required)
  • tokens.input (integer)
  • tokens.output (integer)
  • tokens.unknownRequestCount (integer)
  • costUsd (string, required): Exact decimal sum in USD, including reported or provider-scoped estimated costs.
  • unknownCostRequestCount (integer, required)
  • outcomes (object, required)
  • outcomes.completed (integer)
  • outcomes.failed (integer)
  • outcomes.inconclusive (integer)
  • reviewReasons (map of integer, required)
  • refinements (object, required)
  • refinements.attempted (integer)
  • refinements.completed (integer)
  • refinements.skipped (integer)
  • refinements.inconclusive (integer)
  • refinements.upstream_error (integer)
  • refinementSkipReasons (map of integer, required)
  • calls (integer, required)
  • requests (integer, required)
  • outcomes (object, required)
  • outcomes.success (integer, required)
  • outcomes.failure (integer, required)
  • outcomes.inconclusive (integer, required)
  • outcomes.inFlight (integer, required)
  • callLatencyMsAverage (integer or null, required): Mean measured call duration in milliseconds, null when no duration is available
  • dispatchLatencyMsAverage (integer or null, required): Mean dispatch latency per HTTP request in milliseconds, null without requests
  • tokens (object, required)
  • tokens.input (integer, required)
  • tokens.output (integer, required)
  • tokens.cacheRead (integer, required)
  • tokens.cacheWrite (integer, required)
  • tokens.reasoning (integer, required)
  • tokens.unknownRequestCount (integer, required)
  • costUsd (string, required): Exact decimal sum in USD of known call costs.
  • unknownCostRequestCount (integer, required)
  • byPhase (map of object, required): Calls and known cost per pipeline phase, ordered by calls descending.
  • runs (object, required)
  • runs.total (integer)
  • runs.running (integer)
  • runs.completed (integer)
  • runs.failed (integer)
  • runs.exactAccounting (integer)
  • runs.legacy (integer)
  • patterns (object, required): checked is one attempt per pattern per run; distinctChecked/proposed/changed count distinct pattern IDs. modelReviewed includes completed and stale reviews. legacyReportedReviews preserves old run counters without claiming exact checks.
  • patterns.checked (integer)
  • patterns.distinctChecked (integer)
  • patterns.modelReviewed (integer)
  • patterns.proposed (integer)
  • patterns.changed (integer)
  • patterns.legacyReportedReviews (integer)
  • actions (object, required): Stored action kinds. Rename means a sponsor rename. Composite trim/split/flag actions may also change sponsors or categories; these are counted once under their actual kind.
  • actions.trim (CleanupActionCounts)
  • actions.split (CleanupActionCounts)
  • actions.rename (CleanupActionCounts)
  • actions.retire (CleanupActionCounts)
  • actions.flag (CleanupActionCounts)
  • actions.category (CleanupActionCounts)
  • usage (CleanupUsage, required)
  • unattributedUsage (one of CleanupUsage, null, required)
  • coverage (object, required)
  • coverage.historicalRunCountWithUnknownSpend (integer)
  • coverage.unattributedProposalCount (integer)
  • coverage.proposalHistoryCompleteSince (string or null (date-time)): Start of durable proposal tracking; older deleted proposals cannot be reconstructed.
  • format (constant minuspod-runtime-config, required)
  • formatVersion (constant 1, required)
  • appVersion (string)
  • exportedAt (string (date-time))
  • containsSecrets (boolean)
  • settings (object, required): Portable runtime setting names and values. Null is allowed only for credentials, supported nullable overrides, and pattern_cleanup_model.
  • feeds (array of object, required)
  • feeds[].slug (string, required)
  • feeds[].feedType (string, one of subscribed, local, recents, youtube, required)
  • feeds[].settings (object, required): Feed configuration only; no episodes or history.
  • document (RuntimeConfigDocument, required)
  • scope (string, one of everything, global, feeds, required): Everything means global and feed configuration only.
  • selectedFeeds (array of string): Feed slugs for feeds scope; omission selects all feeds in the document.
  • previewToken (string)
  • scope (string, one of everything, global, feeds)
  • settings (array of string)
  • changedSettings (array of object)
  • changedSettings[].kind (constant setting)
  • changedSettings[].key (string)
  • changedSettings[].secret (boolean)
  • addedFeeds (array of string)
  • updatedFeeds (array of string)
  • skippedUnknownSettings (array of string)
  • preservesTargetOnlyFeeds (boolean)
  • warning (string)
  • warnings (array of string)
  • selectedFeedSlugs (array of string)
  • reviews (integer)
  • confirmed (integer)
  • adjusted (integer)
  • rejected (integer)
  • resurrected (integer)
  • inconclusive (integer)
  • failed (integer)
  • avgBoundaryShiftSeconds (number or null): Mean absolute boundary shift over adjust verdicts, in seconds; null when the mode has none
  • heldRate (number or null): Share of this mode’s corrections filed against a held marker
  • approveRate (number or null): Share of this mode’s corrections that confirmed or adjusted
  • rejectRate (number or null): Share of this mode’s corrections that rejected
  • avgSnapDistance (number or null): Mean of |start - llm_start| + |end - llm_end| in seconds between the model’s raw bounds and the stored marker

Compliance aggregate for one addressing mode (from addressing_log)

  • runs (integer): Number of detection/verification passes recorded for this effective mode
  • windowsJudged (integer): Windows with an LLM response usable enough to judge contract compliance (excludes windows whose LLM call failed outright)
  • windowsCompliant (integer): Of windowsJudged, how many honored the addressing contract for this mode
  • compliancePct (number): 100 * windowsCompliant / windowsJudged, rounded to 1 decimal. 0.0 when windowsJudged is 0.
  • yieldRuns (integer): Passes that recorded yield data. Rows from before 2.92.0 carry none and are excluded from every yield number below, so this denominator can lag runs.
  • adsProposed (integer): Ads the model returned across judged windows, before any filtering. Yield rows only.
  • adsKept (integer): Proposed ads that survived reference resolution and the window/duration filter into the pipeline.
  • adsDroppedInvalidRef (integer): Ads dropped for referencing a segment id that does not exist. Structurally zero for timestamps mode; an invented timestamp is not detectable at this stage.
  • adsDroppedOutOfWindow (integer): Ads dropped for starting outside their detection window.
  • adsDroppedTooLong (integer): Ads dropped for exceeding the per-window maximum ad duration.
  • keptPct (number): 100 * adsKept / adsProposed over yield rows, 0.0 when nothing was proposed.

Current failover state of one target (#806).

  • active (boolean): True while this target is running on its failover configuration.
  • source (string or null, one of auto, manual, probe, null): What last changed the active state; null while inactive.
  • since (string or null (date-time)): When the current state began; null while inactive.
  • reason (string or null): Free-text reason recorded with the last trigger; null while inactive.
  • configured (boolean): Whether this target has a failover configuration to switch to.
  • enabled (boolean): Whether the original target is in use. Always true for llm-a and transcriber; llm-b is true only while Provider B is enabled with a provider type.

Most recent health probe of one failover-related endpoint (#806).

  • reachable (boolean or null): Null before the first probe.
  • status (integer or null): HTTP status code of the last probe, when a response was received.
  • detail (string): Human-readable outcome of the last probe.
  • checkedAt (string or null (date-time)): When the last probe ran; null before the first probe.
  • healthyStreak (integer): Consecutive healthy probes; resets to 0 on any unhealthy probe.
  • failedStreak (integer): Consecutive unhealthy probes; resets to 0 on any healthy probe.

One manual, automatic, or probe-driven failover state change (#806).

  • id (integer)
  • target (string, one of llm-a, llm-b, transcriber)
  • action (string, one of trigger, cancel)
  • source (string, one of auto, manual, probe)
  • reason (string or null)
  • createdAt (string (date-time))

GET /failover response body (#806).

  • targets (map of FailoverTargetState): Keyed by target name (llm-a, llm-b, transcriber).
  • probes (map of FailoverProbe): Keyed by probe name (llm-a, llm-b, llm-failover, transcriber, transcriber-failover).
  • policy (object)
  • policy.probeIntervalMinutes (integer)
  • policy.recoveryProbes (integer): Consecutive healthy probes needed before an automatic failover recovers.
  • events (array of FailoverEvent)
  • ok (boolean): The endpoint accepted the probe
  • reachable (boolean): The server returned any HTTP response
  • status (integer): HTTP status code, when a response was received
  • detail (string): Human-readable outcome
  • validation (string, one of model_catalog): Native System One checks validate model discovery only
  • inferenceChecked (boolean): False for native model-catalog checks
  • health (WhisperHealthProbe): whisper only, present when ok is true: result of sampling the backend’s optional /health endpoint

Result of sampling a self-hosted Whisper backend’s optional /health endpoint. Behind a load balancer, repeated calls round-robin across replicas, so sampling reveals the replica count and total concurrency. Not necessarily live: a result is cached for 120 seconds, and a request arriving while a probe for that backend is already running is answered from the last successful probe, which may be up to 6 minutes old.

  • available (boolean): The backend exposes a working /health endpoint
  • instances (array of object)
  • instances[].instance (string)
  • instances[].model (string)
  • instances[].device (string)
  • instances[].compute_type (string)
  • instances[].batch_size (integer)
  • instances[].max_concurrent (integer)
  • instances[].vad_filter (boolean)
  • suggested_max_requests (integer): Sum of each distinct instance’s max_concurrent, floored at 1 per instance
  • mismatch (array of string): Fields (model, compute_type, device) whose values differ across instances
  • sampled_floor (boolean): Sampling ran out before any instance repeated three times in a row, so it never demonstrably wrapped the replica set. The instance count and suggested_max_requests are lower bounds, not confirmed totals.

One cue match within an episode

  • start (number)
  • end (number)
  • confidence (number)
  • score (number)

A learned per-podcast audio-cue template (metadata; blobs omitted)

  • id (integer)
  • podcastId (integer)
  • label (string): Canonical phrase derived from cueType (shown to the LLM and UI)
  • cueType (string, one of ad_break_boundary, ad_break_start, ad_break_end, show_intro, show_outro, content_transition): Default ad_break_boundary.
  • sourceEpisodeId (string or null)
  • sourceOffsetS (number)
  • durationS (number)
  • sampleRate (integer)
  • nCoeffs (integer)
  • scope (string, one of podcast, network): Default podcast.
  • networkId (string or null)
  • removeWithAd (boolean): Include matched ad-break cues in cuts. Existing templates and imports without this field default to true. Programme cues retain their audio. Default true.
  • cutMatches (boolean or null): Cut every match of this cue on its own. null inherits the feed or global setting. Included in exports; imports without it default to null.
  • enabled (boolean)
  • createdAt (string)
  • createdBy (string or null)
  • owned (boolean): Listing only. False for a network template shared from another feed in this network (read-only here, managed on the feed that created it).
  • hasAudio (boolean): True when the template has a stored PCM blob (play button is shown only when true or absent for older server rows). Present on both listing and create responses.
  • selfMatchCount (integer): Create-response only. How many times the captured cue recurs in its source episode (counted via audio fingerprint). 0 means the fingerprint failed or returned no matches (treated as unknown, no warn). Absent on list rows.
  • weakCue (boolean): Create-response only. True when selfMatchCount is exactly 1: the cue appears only once in its source episode and therefore cannot bracket an ad break reliably. The UI warns the user and requires a second Save to proceed. Absent on list rows.
  • longCapture (boolean): Create-response only. True when the captured duration exceeds captureWarnSeconds for ad-break-role cue types (ad_break_boundary, ad_break_start, ad_break_end). A capture near 10 s matches far worse than a 1.5-2.5 s clip of the same cue. Non-ad types (show_intro, show_outro, content_transition) are always false. Absent on list rows.
  • captureWarnSeconds (number): Create-response only. The threshold used for longCapture. Present whenever the create route returns so the UI can display a consistent hint without a separate config fetch. Absent on list rows.
  • scoreThreshold (number or null): Optional per-template match-score threshold. When set, overrides the per-feed and global thresholds for this template only. Null means fall back to the per-feed override or global setting. Minimum 0.30 (noise floor; sub-floor values pass noise as matches).
  • lastMatchAt (string or null): Timestamp of this template’s most recent above-threshold match. Null when it has never matched.
  • matchedEpisodes (integer): Distinct episodes with an above-threshold match for this template.
  • quiet (boolean): True when the template has matched before but had zero above-threshold matches across the feed’s last 5 telemetry-recorded episodes. Drives the “quiet” badge and the Cue Template Quiet notification.
  • ids (array of integer)
  • source (string, one of local, community, imported)
  • confirm (boolean, required)
  • expected_count (integer, required)
  • enabled (boolean)
  • cron (string)
  • lastRun (string or null)
  • lastError (string or null)
  • manifestVersion (string or null)
  • lastSummary (string or null): JSON-encoded summary of the last sync (counts + manifest version)
  • categories (array of string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap): Segment categories this install accepts from community sync (community_sync_categories setting). Default is every category.
  • categoryBreakdown (map of integer): Count of currently-active (synced) community patterns per category.
  • inserted (integer)
  • updated (integer)
  • deleted (integer)
  • skipped (integer)
  • errors (integer)
  • filtered (integer): Entries not inserted/updated because their category is not in community_sync_categories.
  • manifest_version (string)
  • fetched_at (string)
  • source (string, one of default, uploaded)
  • canRevert (boolean): True when an uploaded file is in use and can be removed.
  • exists (boolean): False when no file is on disk, in which case cuts render as silence.
  • sizeBytes (integer or null)
  • updatedAt (integer or null): Unix mtime, used by the UI to bust the preview cache.
  • durationSeconds (number or null): Every cut becomes this long.
  • channels (integer or null)
  • sampleRateHz (integer or null)
  • enabled (boolean)
  • cron (string)
  • dest (string): Configured backup directory path. Empty string means default is used.
  • effectiveDest (string): Resolved absolute path that will be written to (empty on validation error).
  • destWritable (boolean): Whether the effective destination directory is currently writable.
  • keepCount (integer): Number of backup files to keep (1 = overwrite mode, >1 = rotate mode).
  • lastRun (string or null): ISO 8601 timestamp of the last completed backup run, or null.
  • lastError (string or null): Error message from the most recent failed backup run, or null.
  • lastSummary (string or null): JSON-encoded DatabaseBackupRunSummary from the last successful run, or null.
  • path (string): Absolute path of the backup file written.
  • sizeBytes (integer): Size of the written backup file in bytes.
  • durationMs (integer): Wall-clock duration of the backup operation in milliseconds.
  • mode (string, one of overwrite, rotate): Backup mode used (overwrite when keepCount is 1, rotate otherwise).
  • keepCount (integer): Retention limit in effect at the time of the run.
  • prunedCount (integer): Number of old backup files removed during this run.
  • finishedAt (string): ISO 8601 UTC timestamp when the backup completed.

array of string (uri)

  • enabled (boolean)
  • cron (string): Five-field cron expression in UTC.
  • batchSize (integer)
  • unusedDays (integer)
  • provider (string): Credential slot (‘primary’, ‘secondary’, or ‘same_as_detection’), or blank to inherit detection’s slot. ‘a’/‘b’ are accepted as aliases for primary/secondary on write.
  • model (string): Blank inherits the detection model.

Includes every field of PatternCleanupSettings.

  • modelMissing (boolean): True when cleanup has an explicitly cleared model and needs a selection before a run. If false and model is blank, cleanup inherits from detection.
  • inProgress (boolean): Whether another run currently holds the cleanup lock.
  • lastRun (string or null): ISO 8601 UTC start of the newest run row, including one still running. Enabling the schedule does not change it.
  • lastError (string or null): Error of the newest finished run, if it failed.
  • lastSummary (one of PatternCleanupRun, null): The newest finished run (completed or failed).
  • pending (object)
  • pending.total (integer)
  • pending.byKind (map of integer)
  • id (integer)
  • startedAt (string)
  • finishedAt (string or null)
  • status (string, one of running, completed, failed)
  • forced (boolean)
  • trigger (string, one of schedule, manual)
  • model (string or null): Configured cleanup model captured at run start, before failover overrides.
  • provider (string or null): Configured cleanup provider captured at run start, not actual request usage.
  • credentialSlot (string or null): Configured credential slot captured at run start, before failover overrides.
  • reviewedCount (integer)
  • suggestedCount (integer)
  • skippedCount (integer)
  • errorCount (integer): Number of patterns whose review or storage failed. Repeated call failures can stop the run.
  • error (string or null): Set only when the whole run failed (e.g. rate limited).
  • id (integer)
  • runId (integer or null)
  • patternId (integer)
  • kind (string, one of trim, split, rename, retire, flag, category)
  • status (string, one of pending, approved, rejected, undone)
  • confidence (number or null)
  • reasons (array of string)
  • payload (object): Shape depends on kind: trim {text, sponsor?, category?}; split {pieces: [{text, sponsor, category?}]}; rename {sponsor, category?}; category {category}; retire {unusedDays, lastMatchedAt, confirmationCount}; flag {falsePositiveCount, confirmationCount, contaminated, contaminationReason, recommended, trimText?, sponsor?, category?}. Combined text, sponsor, and category edits apply in one approval. Categories are sponsor, cross_promo, self_promo, interaction, intro, outro, and recap.
  • before (object or null): Snapshot of the pattern at suggestion time, used to undo an approval.
  • before.textTemplate (string or null)
  • before.category (string or null, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap, null): Original category; absent in older suggestions.
  • before.sponsor (string or null)
  • before.sponsorId (integer or null)
  • before.isActive (boolean)
  • before.introVariants (array of string)
  • before.outroVariants (array of string)
  • before.sourceContext (string): Optional retained source transcript around the reviewed pattern, with its span marked by double brackets. Absent when unavailable.
  • applied (object or null): Saved approval result, including the post-approval state used to refuse undo after later edits. Older approvals may lack snapshots.
  • applied.newPatternIds (array of integer)
  • applied.disabledPatternId (integer or null)
  • applied.appliedAt (string (date-time))
  • applied.appliedSeq (integer (int64)): Orders approvals on one pattern for undo conflict checks.
  • applied.text (string)
  • applied.sponsorId (integer)
  • applied.after (object): Post-approval values of fields owned by this change.
  • applied.after.isActive (boolean)
  • applied.newPatternStates (array of object): Post-approval snapshots of split children.
  • applied.newPatternStates[].id (integer)
  • applied.newPatternStates[].fields (object)
  • applied.newPatternStates[].fields.isActive (boolean)
  • createdAt (string)
  • reviewedAt (string or null)
  • pattern (object): Present on the suggestions list; omitted on approve/reject/undo responses.
  • pattern.id (integer)
  • pattern.sponsor (string or null)
  • pattern.scope (string)
  • pattern.networkId (string or null)
  • pattern.podcastTitle (string or null)
  • pattern.isActive (boolean)
  • pattern.confirmationCount (integer)
  • pattern.falsePositiveCount (integer)
  • pattern.lastMatchedAt (string or null)
  • pattern.createdAt (string)

A feed’s historical ad-cut position distribution (issue 360)

  • slug (string)
  • episodesConsidered (integer): Episodes with usable cut history that fed the distribution
  • medianDurationSeconds (number): Median original episode duration across those episodes
  • bucketCount (integer): Number of normalized-position histogram bins
  • buckets (array of integer): Cut-start counts per bin, ordered start to end of episode
  • totalEvents (integer): Total cut starts counted (equals the sum of buckets)
  • zones (array of object): Learned prior zones (empty below 5 episodes / 60% support)
  • zones[].center (number): Median normalized position of the zone (0.0-1.0)
  • zones[].low (number)
  • zones[].high (number)
  • zones[].support (integer): Distinct episodes with a cut in this zone
  • zones[].boost (number): Confidence boost applied to cuts in this zone

Podcasting 2.0 channel-level extras for a local feed. Sending null clears the six list tags (funding/person/license/location/txt/ podroll) and any stored locked_owner, but leaves guid/medium/locked alone. guid is minted once at feed creation from the feed URL and can never be set through this field, at create or PATCH.

  • funding (array of object)
  • funding[].text (string)
  • funding[].url (string (uri), required)
  • person (array of object)
  • person[].text (string, required): Person’s name
  • person[].role (string)
  • person[].group (string)
  • person[].img (string (uri))
  • person[].href (string (uri))
  • license (array of object)
  • license[].text (string)
  • license[].url (string (uri))
  • location (array of object)
  • location[].text (string)
  • location[].geo (string): geo: URI, e.g. geo:41.0,-71.0
  • location[].osm (string): OpenStreetMap feature id
  • txt (array of object)
  • txt[].text (string)
  • txt[].purpose (string)
  • podroll (array of object): Other shows to recommend, rendered as a podcast:podroll container of remoteItem children. Max 50 entries.
  • podroll[].feedGuid (string (uuid), required): UUID of the recommended feed.
  • podroll[].feedUrl (string (uri))
  • podroll[].itemGuid (string)
  • podroll[].medium (string, one of podcast, music, video, film, audiobook, newsletter, blog)
  • medium (string, one of podcast, music, video, film, audiobook, newsletter, blog): Default podcast.
  • locked (string, one of yes, no): Default yes.
  • locked_owner (string or null): Contact email for podcast:locked. Blank or null clears the stored owner.
  • guid (string): podcast:guid, a UUIDv5 minted from the feed URL at creation. Read-only; rejected with 400 if sent on a write.

Podcasting 2.0 item-level extras for a local feed episode. Sending null clears both tags.

  • person (array of object)
  • person[].text (string, required)
  • person[].role (string)
  • person[].group (string)
  • person[].img (string (uri))
  • person[].href (string (uri))
  • location (array of object)
  • location[].text (string)
  • location[].geo (string)
  • location[].osm (string)
  • slug (string): URL-safe identifier for the feed
  • feedType (string, one of subscribed, local, recents, youtube): “subscribed” (default) mirrors an upstream RSS feed; “local” is an archive-import feed MinusPod builds and serves itself, with no upstream; “recents” is the single combined feed of every processed episode published on or after its creation, which accepts only title and description on PATCH. Several fields and actions (refresh, Podping, differential fetch, sourceUrl) are meaningless for local and recents feeds; see the Local Feeds guide.
  • title (string): Podcast title. Mirrors the upstream RSS <title> for a subscribed feed (overwritten on refresh); user-set and PATCHable for a local feed.
  • sourceUrl (string (uri)): Original RSS feed URL. For a local feed this is the internal local://<slug> sentinel, never a real URL; never surfaced as the feed’s subscribe URL.
  • feedUrl (string (uri)): Modified RSS feed URL served by this server
  • artworkUrl (string or null): URL to cached artwork image
  • hasArtwork (boolean): Whether MinusPod currently holds an artwork file for this feed, regardless of what artworkUrl falls back to when it does not (issue
  • author (string or null): itunes:author. Local and YouTube feeds; always null for a subscribed feed (taken from the upstream RSS at render time, not stored per-feed).
  • explicit (boolean or null): itunes:explicit. Local feeds only; null means unset.
  • categories (array of string): itunes:category list. Local feeds only; null when unset.
  • p20 (LocalFeedP20)
  • episodeCount (integer): Total number of episodes
  • processedCount (integer): Number of processed episodes
  • statusCounts (object): Per-status episode counts for this feed. The database status ‘processed’ is exposed under its API alias ‘completed’, matching episode responses. ‘deferred’ counts episodes waiting in the offline queue for the LLM or Whisper endpoint to come back.
  • statusCounts.discovered (integer)
  • statusCounts.pending (integer)
  • statusCounts.processing (integer)
  • statusCounts.completed (integer)
  • statusCounts.failed (integer)
  • statusCounts.permanently_failed (integer)
  • statusCounts.deferred (integer)
  • lastRefreshed (string or null (date-time)): Last RSS refresh timestamp
  • lastRefreshError (string or null): Error from the current run of consecutive refresh failures. Only set once the run reaches the alert threshold (3 counted failures); null while the feed refreshes cleanly or during a short blip.
  • lastRefreshErrorAt (string or null (date-time)): When the current run of refresh failures started. Cleared on the next successful refresh.
  • lastPodpingAt (string or null (date-time)): Stamped when a Podping publish notification matches this feed; null if the feed has never been matched by the Podping listener. See podpingEnabled in Settings.
  • podpingCoverage (string or null, one of received, declared, host_active, unseen, declined, null): Why this feed is or is not covered by Podping, most specific first. declined means the feed’s own podcast:podping tag carries usesPodping=“false”, so MinusPod polls it and ignores pings for it. received means a podping arrived for this feed and lastPodpingAt carries the time. declared means the feed’s tag opts in but no ping has arrived yet. host_active means the feed host has been seen sending podpings in the last 30 days but not for this feed. unseen means none of the above. Null when the Podping listener is disabled instance-wide, which is a global setting rather than a fact about this feed. The MinusPod UI collapses everything except received into a single “none”, so consumers wanting the detail should read this field rather than mirror the UI.
  • podpingUses (boolean or null): The upstream podcast:podping usesPodping value. Null when the feed carries no such tag.
  • podpingHiveAccounts (array of string): Hive accounts the feed declares as allowed to podping it, from podcast:hiveAccount. Empty when the feed names none, in which case any sender is accepted.
  • podpingCheckedAt (string or null (date-time)): When the podcast:podping declaration was last read from the upstream feed body. Null means never, which makes a feed with no tag distinguishable from one whose body has not been read yet.
  • createdAt (string (date-time))
  • autoProcessOverride (boolean or null): Override auto-process setting for this feed (null uses global setting)
  • autoProcessMaxAgeHoursOverride (integer or null): Per-feed auto-process window in hours (null uses the global autoProcessMaxAgeHours)
  • downloadUserAgentOverride (string or null): Audio, artwork, chapters, and transcript User-Agent for this feed. Printable ASCII only. Null or blank inherits downloadUserAgent. Cross-fetch uses a different podcast client.
  • feedUserAgentOverride (string or null): RSS fetch User-Agent for this feed. Printable ASCII only. Null or blank inherits feedUserAgent.
  • languageOverride (string or null): Per-feed transcription language (‘auto’ or a language code like ‘en’/‘de’); null uses the global whisperLanguage setting.
  • titleOverride (string or null): Per-feed display title shown to subscribers in the generated RSS feed (issue 375); null falls back to the source feed title.
  • descriptionOverride (string or null): Per-feed description shown to subscribers in the generated RSS feed; null falls back to the source feed description.
  • detectionNotes (string or null): Operator hints about this show appended to the LLM ad-detection and review prompts (issue 709); null when unset.
  • chapterNotes (string or null): Per-feed notes sent with every chapter generation request; null when unset.
  • detectionMode (string or null, one of blacklist, keep_content, null): Per-feed ad-detection mode. ‘keep_content’ (experimental) labels show content and removes everything else; null or ‘blacklist’ is the default ad-removal behavior. Prefer processingMode; kept for per-field compatibility.
  • chaptersMode (string or null, one of auto, generate, off, null): Per-feed chapters mode. ‘auto’ preserves publisher-embedded chapters when enough survive the cut, otherwise generates them; ‘generate’ always generates new chapters; ‘off’ skips the chapter step entirely; null follows the global chaptersMode setting.
  • differentialFetchMode (string, one of inherit, auto, on, off): Configured per-feed cross-fetch mode. ‘inherit’ follows the global default; other values select auto, on, or off.
  • chaptersInNotes (string or null, one of on, off, null): Per-feed override for listing generated chapters in served episode descriptions. null follows the global chaptersInNotes setting.
  • reviewLinksInNotes (string or null, one of on, off, null): Per-feed override for review and rate links in served episode descriptions. null follows the global reviewLinksInNotes setting.
  • adChaptersEnabled (boolean): Deprecated. Derived from the feed’s resolved segment actions; true when any category resolves to mark.
  • adChapterCategories (map of boolean): Deprecated. Derived from the feed’s resolved segment actions; true for each category that resolves to mark.
  • queuePriority (string, one of high, normal, low): Per-feed auto-process queue priority (issue 625), always resolved to one of the three values (‘normal’ covers both an explicit normal setting and no override). ‘high’ processes this feed’s episodes before other queued episodes; ‘low’ runs only when nothing else is waiting.
  • lowAdYieldAction (string or null, one of nothing, redetect, reprocess, full, null): Per-feed override of the global lowAdYieldAction setting; null means the global value applies.
  • episodeLogs (string or null, one of on, off, null): Per-feed run log storage (issue 660); null follows the global setting.
  • titleSkipPatterns (array of string): Per-feed episode title blacklist, always an array (empty when unset). Each pattern is matched against the whole episode title, case-insensitively (fnmatch glob); use ‘*’ as a wildcard, e.g. ‘Bonus Episode ’ matches any title starting with ‘Bonus Episode’. Without a wildcard the whole title must match, so a plain substring needs surrounding ‘’ wildcards. A matching episode is never queued or JIT-processed.
  • descriptionSkipPatterns (array of string): Per-feed episode description blacklist (issue 835), always an array (empty when unset). Each pattern is matched against the plain-text description (HTML tags removed, whitespace collapsed), case-insensitively (fnmatch glob); use ‘*’ as a wildcard, e.g. ‘This is a preview. To hear the entire episode’. A matching episode is never queued or JIT-processed.
  • descriptionTrimPattern (string or null): Chapter title glob for the description chapter trim, or null when unset.
  • descriptionTrimMode (string, one of to_end, to_next): Where a description chapter cut ends. Defaults to to_end.
  • minDurationSeconds (number or null): Inclusive minimum publisher RSS duration in seconds. Null means no minimum; unknown durations remain eligible.
  • maxDurationSeconds (number or null): Inclusive maximum publisher RSS duration in seconds. Null means no maximum. Uses RSS duration before ad removal.
  • titleSkipAction (string, one of serve_original, hide): Served-RSS handling for episodes skipped by title, description, or duration. Always resolves to serve_original or hide; serve_original is the default.
  • processingMode (string, one of passthrough, skip_detection, keep_content, standard, cue_only): Effective processing mode resolved from the per-feed flags, with precedence passthrough > skip_detection > keep_content > cue_only > standard. Writable. PATCHing it sets the underlying flags canonically. Cannot be combined with passthroughEnabled, skipAdDetection, or detectionMode in one request. cue_only requires at least one enabled ad_break_start and one enabled ad_break_end template on the feed.
  • cueTemplateScoreOverride (number or null): Per-feed ZNCC match threshold override for audio cue template matching. null means the global audioCueTemplateScore setting applies.
  • cueCreateFromPairsOverride (boolean or null): Per-feed override for cue-pair ad synthesis. true/false override the global setting; null inherits.
  • cueCutMatchesOverride (boolean or null): Per-feed override for cutting matched cue audio. true/false override the global setting; null inherits.
  • cuePairMinBreakOverride (number or null): Per-feed minimum break duration (seconds) for cue-pair synthesis. null inherits the global setting.
  • cuePairMaxBreakOverride (number or null): Per-feed maximum break duration (seconds) for cue-pair synthesis. null inherits the global setting.
  • cuePairMaxBreakFractionOverride (number or null): Per-feed maximum break fraction of episode duration for cue-pair synthesis. null inherits the global setting.
  • cueSnapConfidenceOverride (number or null): Per-feed minimum cue confidence to snap an ad edge. null inherits the global audio_cue_snap_confidence setting.
  • cueSnapLeadOverride (number or null): Per-feed snap lead window (seconds) before an ad edge. null inherits the global audio_cue_snap_lead_seconds setting.
  • cueSnapLagOverride (number or null): Per-feed snap lag window (seconds) after an ad edge. null inherits the global audio_cue_snap_lag_seconds setting.
  • silenceSnapEnabled (boolean or null): Per-feed opt-in for snapping cut boundaries to nearby silence. null and false both read as off.
  • transitionSnapEnabled (boolean or null): Per-feed opt-in for snapping cut boundaries to content-transition cues. null and false both read as off.
  • spliceVetoEnabled (boolean or null): Per-feed splice check. null inherits the global spliceVetoEnabled setting, true forces the check on, false lets long cuts through without splice evidence.
  • maxAdDurationOverride (number or null): Per-feed max ad duration cap in seconds. Ads longer than this are held for review instead of cut. null means no cap. Also raises the longest single detection the model may report for this feed (the global Longest single LLM detection, default 7 minutes).
  • adDetectionExcludeStartOverride (number or null): Per-feed opening window in seconds during which ad markers are ignored. null inherits adDetectionExcludeStartSeconds, 0 disables it for the feed, 1 to 600 sets the feed’s own window.
  • maxAdDurationRejectOverride (number or null): Per-feed length past which an ad must name a recognized sponsor to be cut. Must not exceed the global maxAdDurationConfirmedSeconds. null falls back to the global maxAdDurationSeconds setting. Also raises the longest single detection the model may report for this feed (the global maxLlmWindowAdSeconds, default 7 minutes), so set it to the length of the show’s longest continuous ad block.
  • cueGatedApproval (boolean or null): Per-feed cue-gated approval. When true, only ads with audio cue evidence auto-cut; others are held for review. null and false both read as off.
  • differentialFetchEnabled (boolean or null): Legacy per-feed cross-fetch flag. Use differentialFetchMode for new clients; null selects automatic DAI detection.
  • ratingAverage (number or null): Average episode quality rating for the feed. Null when no episode is rated. Feed detail only.
  • ratingCount (integer): Number of rated episodes in the feed. Feed detail only.
  • daiLikely (boolean): Hint that this feed likely uses dynamic ad insertion, based on recent enclosure URLs matching known DAI or prefix domains. Returned on the feed detail response.
  • differentialFetchEffective (boolean): Whether the cross-fetch differential stage will run for this feed, resolved from the per-feed mode, global default, and DAI signals. Feed detail only.
  • websiteUrl (string or null): The show’s website from the channel-level RSS link element. Feed detail only; null when the feed does not declare one.
  • passthroughEnabled (boolean or null): When true, episodes are downloaded and served exactly as published, with no transcription, detection, or cutting. Null and false both mean normal processing. Prefer processingMode; kept for per-field compatibility.
  • skipAdDetection (boolean or null): When true, episodes are transcribed and get chapters and a transcript, but ad detection is skipped and nothing is cut. Null and false both mean normal processing. Prefer processingMode; kept for per-field compatibility.
  • cueOnlySafety (string or null, one of hold_new, auto_cut, null): Per-feed safety policy for cue_only mode. ‘hold_new’ (default) holds a template’s synthesized cuts for review until it has matched a paired start/end cue on 3 episodes. ‘auto_cut’ cuts immediately but still holds any pair scoring below 0.90 confidence. null means the default ‘hold_new’ behavior. Ignored outside cue_only mode.
  • skipTranscription (boolean or null): Per-feed opt-out from transcription. Only valid on a feed in cue_only mode. Generated chapters stop, and transcript search and VTT subtitles become unavailable for those episodes, but publisher chapters (embedded ID3 or linked Podcasting 2.0 JSON) still get remapped onto the cut audio. Null and false both mean transcription still runs.
  • maxEpisodes (integer or null): Per-feed cap on episodes served via the feed’s RSS. Subscribed feeds: 10-500; null means use the global maxFeedEpisodes setting (default 300). Local feeds: 0 or null serves every episode (the default); a positive value up to 10000 serves only the newest N.
  • onlyExposeProcessedEpisodes (boolean or null): Per-feed override for hiding upstream episodes whose status is not ‘processed’ from the served RSS feed. Null means use the global onlyExposeProcessedDefault setting. true/false override the global for this feed (issue
  • requireManualApproval (boolean or null): Per-feed override for holding newly processed episodes out of the served feed until approved. Null means use the global requireManualApprovalDefault setting.
  • awaitingApprovalCount (integer): Number of this feed’s episodes waiting for manual approval.
  • retentionDaysOverride (integer or null): Per-feed retention override. Null falls back to the global retentionDays setting; 0 archives the feed so processed audio is never deleted, including by the force-all cleanup; 1-3650 keeps it for that many days.
  • audioReplacementSoundOverride (boolean or null): Override replacement sound for this feed; null inherits the global choice.
  • audioMp3StreamCopyOverride (boolean or null): Override MP3 stream copy for this feed; null inherits the global choice.
  • keepOriginalAudioOverride (boolean or null): Per-feed override for retaining the pre-cut original audio. Null falls back to the global keepOriginalAudio setting; true always keeps it; false never does. Applies from the next episode processed.
  • ytProcessDelayMinutesOverride (integer or null): YouTube feeds only. Minutes to wait after a video is published before processing. Null follows the global setting.
  • ytProbeAttemptsOverride (integer or null): YouTube feeds only. SponsorBlock lookup attempts. Null follows the global setting.
  • ytProbeIntervalMinutesOverride (integer or null): YouTube feeds only. Minutes between SponsorBlock lookup attempts. Null follows the global setting.
  • ytLlmFallbackOverride (boolean or null): YouTube feeds only. Run LLM detection when SponsorBlock has no data. Null follows the global setting.
  • ytLlmOnTopOverride (boolean or null): YouTube feeds only. Run LLM detection on top of SponsorBlock segments. Null follows the global setting.
  • ytCaptionsOverride (boolean or null): YouTube feeds only. Use YouTube captions as the transcript. Null follows the global setting.
  • ytHidePrivateOverride (boolean or null): YouTube feeds only. Hide private and deleted episodes from the listing. Null follows the global setting.
  • ytTranscribeOverride (boolean or null): YouTube feeds only. Transcribe with the configured transcriber when captions are missing. Null follows the global setting.
  • youtubeIncludeShorts (boolean or null): YouTube feeds only. Whether videos of 180 seconds or less are listed. Null follows the default.
  • youtubeSourceKind (string or null, one of playlist, channel, null): YouTube feeds only. Kind of the source.
  • youtubeSourceId (string or null): YouTube feeds only. Playlist id or channel id.
  • youtubeSourceUrl (string or null (uri)): YouTube feeds only. Public YouTube page of the source.
  • segmentCategoryActions (map of string, one of remove, beep, keep, mark): Per-feed segment-category action overrides (issue
  • detectShowSegments (boolean or null): Whether this feed detects intro, outro, and recap/housekeeping segments in addition to the always-detected ad-side categories. Null means use the global detectShowSegments setting. true/false override the global for this feed.
  • ownEpisodeGuids (boolean or null): Whether the served RSS uses MinusPod episode ids as item GUIDs (issue 598). Null and false both mean upstream GUIDs pass through. New feeds are created with true.
  • skipSecondPass (boolean or null): Whether the pass-2 verification scan of the cut audio is skipped for this feed. Null follows the global skipSecondPass setting.
  • transcriptDifferential (boolean or null): Per-feed override for upstream-transcript differential. True enables and false disables it for this feed; null follows the global transcriptDifferentialEnabled setting.
  • latestEpisodes (array of FeedLatestEpisode): Present only when the request set includeLatestEpisodes=true. Up to episodesPerFeed episodes for this feed, newest first.

Bounded per-feed episode projection returned by GET /feeds when includeLatestEpisodes=true, for rendering a grouped episodes view without a separate request per feed.

  • id (string): Episode id.
  • title (string)
  • published (string (date-time)): publishedAt if the feed declared one, else the episode’s createdAt.
  • createdAt (string (date-time))
  • processedAt (string or null (date-time))
  • duration (number or null): Original duration in seconds.
  • status (string, one of discovered, pending, processing, completed, failed, permanently_failed, deferred)
  • jobState (string, one of idle, queued, processing): Authoritative queue/run state, derived from live queue rows rather than the stored status.
  • hasBeenProcessed (boolean): Same meaning as EpisodeSummary.hasBeenProcessed, so a grouped dashboard row can label its action button without a second request.
  • artworkUrl (string or null): Same fallback rules as EpisodeSummary.artworkUrl.
  • error (string or null): Failure reason from the most recent processing attempt, present when status is failed or permanently_failed.
  • pendingReviewCount (integer): Ads held for human review on this episode, so a dashboard row can show the hold chip.
  • awaitingApproval (boolean): True while the processed episode is held out of the served feed and audio until approved.
  • approvalPendingAt (string or null): When the episode began waiting for manual approval.
  • approvedAt (string or null): When a person or a recut approved the episode. Null for episodes that never needed approval.
  • titleSkipped (boolean): Whether the episode title matches this feed’s title-skip patterns and is ineligible for the bulk Process action.
  • descriptionSkipped (boolean): Whether the episode description matches this feed’s description-skip patterns (issue 835) and is ineligible for the bulk Process action.
  • durationSkipped (boolean): Publisher RSS duration is outside the feed’s inclusive limits, making the episode ineligible for the bulk Process action. Unknown or zero durations return false.
  • passthroughEnabled (boolean): Per-episode pass-through override, same meaning as EpisodeSummary.passthroughEnabled.
  • description (string or null): Episode description, truncated to 200 characters.

Lightweight action state returned for every matching episode when selection=true.

  • id (string, required)
  • status (string, one of discovered, pending, processing, completed, failed, permanently_failed, deferred, required)
  • jobState (string, one of idle, queued, processing, required)
  • titleSkipped (boolean, required)
  • descriptionSkipped (boolean, required)
  • durationSkipped (boolean, required)
  • feedSlug (string): Set on rows of the recents feed; the feed the episode belongs to.
  • feedTitle (string): Set on rows of the recents feed; the source feed’s title.
  • episodeId (string)
  • title (string)
  • sponsorBlock (object or null): SponsorBlock lookup progress for a YouTube episode. Null on other feed types.
  • sponsorBlock.state (string)
  • sponsorBlock.attempts (integer)
  • sponsorBlock.nextCheckAt (string or null)
  • sponsorBlock.segmentCount (integer or null)
  • sponsorBlock.note (string or null)
  • sponsorBlock.lastError (string or null)
  • sponsorBlock.submitAllowed (boolean): True when the episode detail may offer manual SponsorBlock submission. Absent in list payloads.
  • sponsorBlock.submissions (array of SponsorBlockSubmission): Outcomes of segments a person submitted to SponsorBlock for this episode.
  • rating (object or null): The person’s quality rating for the episode. Null when unrated.
  • rating.value (integer)
  • rating.notes (string or null)
  • rating.ratedAt (string (date-time))
  • status (string, one of discovered, pending, processing, completed, failed, permanently_failed, deferred)
  • jobState (string, one of idle, submitting, queued, processing): Authoritative queue/run state, derived from live queue rows rather than the stored status. A pending episode with no queue row reports idle, not queued. The server never returns submitting; that value is a client-only placeholder used right after a request is sent, before the server confirms queued or processing.
  • createdAt (string (date-time))
  • processedAt (string or null (date-time))
  • originalDuration (number or null): Original duration in seconds
  • newDuration (number or null): Duration after ad removal in seconds
  • adsRemoved (integer): Rendered cuts in the output audio. Markers merged into one cut count once.
  • timeSaved (number): Seconds saved by removing ads
  • pendingReviewCount (integer): Number of ads held for human review (not yet approved or dismissed)
  • awaitingApproval (boolean): True while the processed episode is held out of the served feed and audio until approved.
  • approvalPendingAt (string or null): When the episode began waiting for manual approval.
  • approvedAt (string or null): When a person or a recut approved the episode. Null for episodes that never needed approval.
  • titleSkipped (boolean): Whether the episode title matches this feed’s title-skip patterns and is ineligible for the bulk Process action.
  • descriptionSkipped (boolean): Whether the episode description matches this feed’s description-skip patterns (issue 835) and is ineligible for the bulk Process action.
  • durationSkipped (boolean): Publisher RSS duration is outside the feed’s inclusive limits, making the episode ineligible for the bulk Process action. Unknown or zero durations return false.
  • passthroughEnabled (boolean): Per-episode pass-through override (issue
  • hasBeenProcessed (boolean): True when this episode has a processed output on record, independent of its current status. A completed episode queued again reverts to status pending, so clients use this rather than status to choose between a Process and a Reprocess label.
  • artworkUrl (string or null): Episode cover declared by the publisher. Null when the episode declares none, or when the URL is not https and would be blocked as mixed content; clients fall back to the feed artwork. A local feed has no publisher, so this instead falls back to /api/v1/feeds/{slug}/episodes/{episode_id}/artwork whenever the episode has a cached cover (an upload or embedded-artwork extraction), and stays null only when it has none.
  • error (string or null): Failure reason from the most recent processing attempt, present when status is failed or permanently_failed

Includes every field of EpisodeSummary.

  • originalUrl (string (uri))
  • processedUrl (string (uri-reference)): Relative, same-origin path to the processed audio for the in-app player, carrying the feed auth key as a query param when authenticated feeds is enabled. Not the public feed-domain enclosure URL.
  • navigation (object): Adjacent episodes in the same feed, newest-first order. previous is the newer episode, next the older; either is null at a feed boundary (issue
  • navigation.previous (object or null)
  • navigation.previous.id (string)
  • navigation.previous.title (string)
  • navigation.next (object or null)
  • navigation.next.id (string)
  • navigation.next.title (string)
  • adMarkers (array of AdMarker): Ads that were cut and not held for review (was_cut=true, held_for_review not set)
  • rejectedAdMarkers (array of AdMarker): Ads flagged but kept in audio (REJECT decision or not was_cut, not held)
  • pendingReviewMarkers (array of AdMarker): Ads held for human review (held_for_review=true, not yet cut or dismissed)
  • keptMarkers (array of AdMarker): Segments deliberately left in the audio by a Keep or Mark action, not held for review. actionApplied distinguishes keep from mark; rejectedAdMarkers contains detections rejected by the pipeline.
  • cueDetections (array of CueDetection): Template cue detections for this episode (advisory telemetry; never changes the cut)
  • corrections (array of EpisodeCorrection): Corrections recorded for this episode, newest first.
  • daiDifferential (object or null): Cross-fetch differential result for this episode. null when the feed is not opted in or the episode predates the feature. status no_differential means no differential was found, not proof the feed has no DAI. status unreliable_reencode means alignment failed wholesale (the CDN re-encoded the whole file on the refetch), so the differential was discarded and no regions are reported.
  • daiDifferential.status (string, one of ok, no_differential, unreliable_reencode, error)
  • daiDifferential.regions (array of object)
  • daiDifferential.regions[].start_s (number)
  • daiDifferential.regions[].end_s (number)
  • daiDifferential.regions[].kind (string, one of differential, identical, unknown)
  • daiDifferential.regions[].corr (number or null)
  • daiDifferential.refetch_meta (object)
  • daiDifferential.error (string or null)
  • upstreamTranscript (object or null): Diff of this episode’s transcript against the publisher’s podcast:transcript. null until the stage has stored a result. status none means the stage did not run (no transcript link, or the feed or global toggle is off); unreliable means the two transcripts matched too little to trust, so no spans are reported. Each span is speech the publisher transcript omits.
  • upstreamTranscript.status (string, one of ok, none, unreliable, empty, error)
  • upstreamTranscript.coverage (number or null): Fraction of transcript words matched in the publisher transcript.
  • upstreamTranscript.sourceType (string or null): MIME type of the publisher transcript that was compared.
  • upstreamTranscript.spans (array of object)
  • upstreamTranscript.spans[].start (number)
  • upstreamTranscript.spans[].end (number)
  • upstreamTranscript.spans[].offsetConfirmed (boolean): The publisher transcript’s timestamps jump by the span’s length across it.
  • spliceCalibration (object or null): The feed’s splice calibration when this episode’s audio was analyzed, or null when no audio analysis is stored. status host_read means most of the feed’s recent long transcript-only cuts showed no edit point in the audio, so the splice check does not hold them. long_cut_corroboration counts those cuts over recent episodes.
  • spliceCalibration.status (string, one of cold_start, calibrated, host_read)
  • spliceCalibration.episodes_considered (integer)
  • spliceCalibration.long_cut_corroboration (object)
  • spliceCalibration.long_cut_corroboration.episodes (integer)
  • spliceCalibration.long_cut_corroboration.cuts (integer)
  • spliceCalibration.long_cut_corroboration.corroborated (integer)
  • spliceCalibration.long_cut_corroboration.fraction (number or null)
  • transcriptAvailable (boolean)
  • transcriptSource (string or null, one of whisper, upstream, null): Where the transcript came from; null when there is none
  • chaptersRegenerating (boolean): A chapter regeneration started by regenerate-chapters is still running
  • chaptersRegenError (string or null): Why the last chapter regeneration failed; null after a successful one
  • originalTranscriptAvailable (boolean): Whether an original (pre-cut) transcript is available
  • adsRemovedFirstPass (integer): Number of ads detected by first pass (includes merged)
  • adsRemovedVerification (integer): Rendered cuts in the output audio that hold a verification-pass marker
  • inputTokens (integer): Total LLM input tokens used to process this episode
  • outputTokens (integer): Total LLM output tokens used to process this episode
  • llmCost (number): Estimated LLM cost in USD for processing this episode
  • rssDuration (number or null): Duration the feed declares for this episode (itunes:duration), in seconds. Null when the feed omits it or the episode was discovered before 2.53.0.
  • processingRuns (array of EpisodeProcessingRun): One entry per processing run, oldest first.
  • activeRunSpend (one of EpisodeRunSpend, null): Live ledger spend of the run that currently owns this episode, read straight from the ledger while the run is still in flight. Null when no run owns the episode, so a client can use its presence as the “a run is spending right now” signal.
  • latestRunSpend (one of EpisodeRunSpend, null): Spend of the latest attempted run, which is a different question from activeRunSpend: failures and runs that made no LLM call are included, and the run need not be the one that produced the served audio. Null when the episode has no processing history.
  • cumulativeSpend (EpisodeCumulativeSpend)
  • lowAdYield (object or null): Set when this episode removed far less ad time than the feed’s recent average. Either the downloaded copy arrived with unfilled ad slots, or ads were missed.
  • lowAdYield.removedSeconds (number)
  • lowAdYield.feedAverageSeconds (number)
  • lowAdYield.sampleSize (integer)
  • incompleteCoverage (object or null): Windows the latest completed run lost, per pass. Null when both passes answered every window. Set independently of partialDetection: a run that answers most windows still completes, so the skipped stretches were never examined for ads. A pass key is present only when that pass lost at least one window.
  • incompleteCoverage.detection (IncompleteCoveragePass)
  • incompleteCoverage.verification (IncompleteCoveragePass)

Windows one pass of the latest completed run lost, with the causes recorded.

  • failed (integer)
  • total (integer or null)
  • failureClasses (map of integer): Lost windows by cause: rate_limit, server_error, connectivity, reasoning_exhausted, output_truncated, empty_completion, other. Absent on runs recorded before the classes were tracked.

Shared editable fields for a local episode, used by both the single-episode PATCH and each entry of the bulk PATCH.

  • title (string or null)
  • description (string or null)
  • season (integer): Changes only the display season_number; the episode_id minted at upload/import time never changes.
  • episode (integer): Changes only the display episode_number; the episode_id minted at upload/import time never changes.
  • publishedAt (string or null (date-time)): ISO 8601, timezone required. Sending null clears the stored publish date.
  • p20 (LocalEpisodeP20)

Shared body for import/scan and import/commit.

  • source (string, one of staging, directory, both): Which source(s) to scan: the upload staging area, the user-managed import directory, or both. Default both.
  • overwrite (boolean): When true, a file whose sNNeNN id matches an existing episode replaces it (full reset: new audio and metadata, prior transcripts/chapters/processing state discarded) instead of erroring as a collision. Default false.

One matched file in an import plan.

  • episodeId (string): sNNeNN id, from the filename token or a sidecar override.
  • season (integer)
  • episode (integer)
  • title (string)
  • audioFile (string): Basename of the matched audio file.
  • descriptionFile (string or null)
  • artworkFile (string or null)
  • sidecarFile (string or null): Basename of the matched .json sidecar, if any.
  • publishedAt (string (date-time))
  • publishedAtSource (string, one of explicit, synthesized): explicit: from a sidecar or already-set value. synthesized: filled in from episode order (see the Local Feeds guide’s Publish dates section).
  • bytes (integer): Audio file size at scan time; commit re-checks this and mtimeNs against the live file and errors the entry if either changed (TOCTOU guard).
  • mtimeNs (integer)
  • warnings (array of string)
  • errors (array of string): Non-empty means this entry will not be committed (e.g. duplicate id in the batch, collision with an existing episode without overwrite, invalid sidecar, out-of-order explicit date).
  • replacesExisting (boolean): True whenever episodeId already exists in the feed, regardless of overwrite. A collision marker, not an outcome; whether it errors or cleanly overwrites depends on the overwrite flag and whether errors is empty.
  • replacesExistingId (string or null): The actual existing row’s episode_id when replacesExisting is true, else null. Usually identical to episodeId, but can be the row’s original wide-zero-padded id (e.g. s01e0006) for an episode imported before id canonicalization, which an overwrite replaces rather than duplicates.

The dry-run result from import/scan, and the shape import/commit re-derives server-side to check against the client-echoed planHash. Entries carrying server filesystem paths are stripped from the client-facing response; only basenames are exposed.

  • slug (string)
  • overwrite (boolean)
  • source (string, one of staging, directory, both): Echoes the source this plan was scanned with; commit re-derives from this same value and gates the post-commit staging sweep on it.
  • planHash (string): sha256 over the sorted (name, size, mtime) of every scanned source file, plus overwrite. Echo this back to import/commit; a mismatch there means the source directory changed since this scan, or overwrite was flipped after scanning.
  • entries (array of LocalImportEntry)
  • rejected (array of object): Files that did not match the naming scheme at all (or are hidden/incomplete/empty/a non-mp3 audio format), never imported.
  • rejected[].file (string)
  • rejected[].reason (string)
  • batchErrors (array of string): Errors that block the whole batch rather than one entry (currently just an out-of-order explicit-publish-date pair). Commit refuses the plan while this is non-empty, even though only the two offending entries carry the message in their own errors.
  • totals (object)
  • totals.importable (integer)
  • totals.rejected (integer)
  • totals.errors (integer)
  • totals.bytes (integer)

Background progress/result of the most recent import/commit for a feed.

  • state (string, one of idle, running, done, error): idle means no import has ever been started for this feed. State is file-backed and shared across worker processes, so it survives a worker restart; a worker that crashed mid-commit self-heals to error with an “import interrupted” report the next time this is polled.
  • processed (integer)
  • total (integer)
  • startedAt (string or null (date-time))
  • report (object or null): Present once state is done or error.
  • report.committed (array of object)
  • report.committed[].episodeId (string)
  • report.committed[].audioFile (string)
  • report.committed[].warnings (array of string)
  • report.skipped (array of object)
  • report.skipped[].episodeId (string)
  • report.skipped[].audioFile (string)
  • report.skipped[].errors (array of string)
  • report.failed (array of object)
  • report.failed[].episodeId (string)
  • report.failed[].audioFile (string)
  • report.failed[].error (string)
  • report.queued (array of string): episodeIds queued for auto-process (only possible when the feed already had episodes before this commit).
  • report.error (string): Present only when state is error. Either an exception escaped the whole batch (a per-file failure lands in failed above instead), or the value “import interrupted”, meaning a worker crashed mid-commit and this state was self-healed from a stuck running job whose lock nobody still holds.

LLM spend attributed to one processing run. Used for both activeRunSpend (in-flight, read live from the ledger) and latestRunSpend (the latest attempted run).

  • runId (string or null, required): Ledger run identifier. Null on a run recorded before the usage ledger existed and on recuts, which have no ledger rows; those runs report only their stored processing-history total.
  • inputTokens (integer, required)
  • outputTokens (integer, required)
  • costUsd (string, required): Decimal string, not a number, so no precision is lost in JSON. Sums only the calls whose cost could be resolved, so it understates the true figure whenever hasUnknownCost is true.
  • breakdownAvailable (boolean, required): True when this run has ledger rows, which is also when processingRuns[].phases carries its per-phase breakdown. False for a pre-ledger run or a recut, whose figures come from the stored processing-history total instead.
  • hasUnknownCost (boolean, required): True when at least one billable call in this run has no resolved cost, usually an unpriced or custom model. Clients should label costUsd as a partial figure rather than a total.

Lifetime LLM spend for this episode, summed over every processing attempt rather than one run. Always present; an episode with no ledger rows reports zeros.

  • inputTokens (integer, required)
  • outputTokens (integer, required)
  • costUsd (string, required): Decimal string. Sums only calls with a resolved cost.
  • hasUnknownCost (boolean, required): True when any contributing call has no resolved cost, so costUsd is a floor rather than the real total.

One pipeline phase’s ledger usage inside a run, grouped by phase, invoking pass, provider and configured model. A phase that retried onto a different model contributes more than one entry.

  • phaseKey (string, one of detection, verification, review, chapters, probe)
  • invokingPass (integer or null): 1 or 2 for a pass-scoped call, null otherwise.
  • provider (string): Provider the call routed to. Endpoint URLs are never stored here.
  • configuredModel (string)
  • returnedModel (string or null): Model id the provider reported serving, when it differs from the configured one.
  • inputTokens (integer): Total input tokens, including Anthropic cache reads and writes.
  • outputTokens (integer)
  • cacheReadTokens (integer): Input tokens read from a provider prompt cache. Included in Anthropic inputTokens.
  • cacheWriteTokens (integer): Input tokens written to a provider prompt cache. Included in Anthropic inputTokens.
  • reasoningTokens (integer)
  • costUsd (string or null): Decimal string, or null when any call in the group has no resolved cost. Null is the signal to render this phase as unpriced rather than as zero.
  • costSource (string, one of provider_reported, estimated, explicit_zero, mixed, unknown): How the cost was arrived at. mixed means the grouped calls did not agree on one source; unknown pairs with a null costUsd.
  • id (integer)
  • correction_type (string, one of false_positive, boundary_adjustment, confirm, promotion, auto_promotion, create)
  • original_bounds (object or null): Bounds of the marker the correction applies to; null for create.
  • original_bounds.start (number)
  • original_bounds.end (number)
  • corrected_bounds (object or null): User-set bounds for create, boundary_adjustment and trimmed confirms.
  • corrected_bounds.start (number)
  • corrected_bounds.end (number)
  • created_at (string (date-time))
  • origin (string, one of user, auto_pass2): user for a decision made in the UI or API; auto_pass2 for a confirm the verification pass filed when it re-detected a held ad.
  • paused (boolean)
  • activeRuns (integer): Runs currently holding a processing slot
  • queuedEpisodes (integer): Episodes waiting in the auto-process queue
  • value (integer)
  • notes (string or null)
  • ratedAt (string (date-time))

Recorded outcome of one segment sent to SponsorBlock.

  • start (number)
  • end (number)
  • category (string, one of sponsor, selfpromo)
  • status (string, one of submitted, duplicate, rejected, rate_limited, error)
  • at (string (date-time))
  • uuid (string or null)
  • detail (string)

One processing run of an episode, with its pipeline stats.

  • runNumber (integer)
  • runId (string or null): Ledger run identifier. Null for a pre-ledger run or a recut.
  • processedAt (string (date-time))
  • status (string, one of completed, failed)
  • adsDetected (integer)
  • processingDurationSeconds (number or null): Total run wall-clock seconds; null when no duration was recorded.
  • errorMessage (string or null)
  • inputTokens (integer)
  • outputTokens (integer)
  • cacheReadTokens (integer): Run total from the ledger; 0 for a run without ledger rows.
  • cacheWriteTokens (integer): Run total from the ledger; 0 for a run without ledger rows.
  • llmCost (number)
  • hasLog (boolean): True when this run stored a pipeline log the run-log endpoint can serve.
  • breakdownAvailable (boolean): True when this run has usage-ledger rows, which is when phases is non-empty.
  • phases (array of EpisodeRunPhaseUsage): Per-phase provider, model, token and cost breakdown from the usage ledger. Empty for a pre-ledger run or a recut, whose figures come from the stored run total instead.
  • stats (object or null): Per-run pipeline stats. Null for runs recorded before 2.53.0 and for recuts; a failed run keeps whatever was gathered before the failure.
  • stats.mode (string): auto, reprocess, full, or llm for processing runs; chapters for chapter-only regeneration
  • stats.detectionSkipped (boolean or null): True when the run skipped ad detection because the feed has skipAdDetection set
  • stats.chaptersDegraded (boolean): Chapter generation used a fallback; absent on runs without this diagnostic.
  • stats.chaptersDegradedReason (string): Reason chapter generation used a fallback.
  • stats.verificationSkipped (boolean or null): True when the verification pass was skipped by the per-feed setting or by cue-only mode. Absent when detection was skipped outright, which already implies no verification.
  • stats.cueOnly (boolean or null): True when the run cut only from cue and learned-pattern evidence with no LLM call.
  • stats.transcriptionSkipped (boolean or null): True when the run skipped transcription; no transcript, generated chapters, or subtitles.
  • stats.normalizationSkipped (boolean or null): True when the run did not apply the optional loudness normalization pass.
  • stats.downloadedDuration (number): ffprobe duration of the downloaded copy, in seconds
  • stats.transcriptSegments (integer)
  • stats.windows (object or null): Null when the run failed before detection or the detection mode does not report window counts
  • stats.windows.total (integer)
  • stats.windows.failed (integer)
  • stats.windows.failureClasses (map of integer): Lost windows by cause: rate_limit, server_error, connectivity, reasoning_exhausted, output_truncated, empty_completion, other. Absent when no window was lost.
  • stats.verificationWindows (object or null): Verification-pass window counts. Null when the verification pass was skipped or ended before its detection call.
  • stats.verificationWindows.total (integer)
  • stats.verificationWindows.failed (integer)
  • stats.verificationWindows.failureClasses (map of integer): Lost verification windows by cause; same classes as windows.failureClasses. Absent when no window was lost.
  • stats.stageHits (object or null): Detections per stage before validation. Null when the run failed before detection.
  • stats.stageHits.fingerprint (integer)
  • stats.stageHits.textPattern (integer)
  • stats.stageHits.differential (integer)
  • stats.stageHits.transcriptDifferential (integer)
  • stats.stageHits.llm (integer)
  • stats.detected (integer): First-pass detections after dedup
  • stats.markers (object or null): Final marker buckets after validation and review. Null when the run failed before validation.
  • stats.markers.cut (integer)
  • stats.markers.held (integer)
  • stats.markers.notCut (integer)
  • stats.verificationAdsCut (integer or null): Rendered cuts holding an ad the second scan of the output audio found. 0 means the scan ran and came back clean. Absent or null means the scan did not run, either because it was skipped (see verificationSkipped and detectionSkipped) or because it failed.
  • stats.secondsRemoved (number): Net seconds removed, original duration minus output duration. Replacement beeps count against it. When the output duration cannot be measured this is estimated as sourceSecondsRemoved minus replacementSecondsAdded.
  • stats.sourceSecondsRemoved (number or null): Seconds of source audio inside the rendered cuts. Absent on runs recorded before this field existed.
  • stats.replacementSecondsAdded (number or null): Seconds of replacement audio (beeps) inserted in place of the rendered cuts. secondsRemoved is about sourceSecondsRemoved minus this value.
  • stats.timings (object or null): Wall-clock seconds by stage. Concurrent stages and FFmpeg can overlap, so fields do not sum to processingDurationSeconds. ffmpegSeconds includes every FFmpeg task and retry. finalizeSeconds stops before history persistence and notifications. Null means no measurement was recorded for the object or field.
  • stats.timings.downloadSeconds (number or null)
  • stats.timings.transcriptionSeconds (number or null)
  • stats.timings.transcriptDiffSeconds (number or null)
  • stats.timings.differentialSeconds (number or null)
  • stats.timings.audioAnalysisSeconds (number or null)
  • stats.timings.detectionSeconds (number or null)
  • stats.timings.refineValidateSeconds (number or null)
  • stats.timings.cutSeconds (number or null)
  • stats.timings.verificationSeconds (number or null)
  • stats.timings.normalizationSeconds (number or null)
  • stats.timings.assetsSeconds (number or null)
  • stats.timings.chaptersSeconds (number or null): Chapter generation. Included in assetsSeconds.
  • stats.timings.finalizeSeconds (number or null): Finalization work before history persistence and notifications.
  • stats.timings.ffmpegSeconds (number or null): Wall-clock seconds across FFmpeg tasks and retries; zero means none were observed.
  • stats.transcription (object): Local transcription outcome for this run. The whole block is absent when the run did not transcribe locally, so a run on the remote API backend or one that skipped transcription has no entry at all.
  • stats.transcription.outcome (string, one of success, failed)
  • stats.transcription.batchSize (integer): Batch size the run finished on, lower than the configured tier after a GPU-memory downshift.
  • stats.transcription.retryCount (integer): Retries the run consumed, each one halving the batch size after an out-of-memory error.
  • stats.transcription.retrySucceeded (boolean): True when the run retried and then completed. Always false on a failed outcome.
  • stats.transcription.device (string, one of cpu, cuda)
  • stats.transcription.gpuDeviceName (string or null): Reported GPU name. Null whenever device is cpu.
  • stats.transcription.model (string): Local model the run loaded.
  • stats.transcription.error (string or null): Failure reason, truncated to 500 characters. Null on a successful outcome.
  • stats.transcriptDiff (object): Upstream transcript diff outcome for this run. Absent on runs that did not reach the stage.
  • stats.transcriptDiff.status (string, one of ok, none, unreliable, empty, error)
  • stats.transcriptDiff.coverage (number or null)
  • stats.transcriptDiff.spans (integer): Number of spans the publisher transcript omits.
  • stats.thinkingNotices (array of ThinkingCompatibilityNotice): Reasoning and thinking compatibility notices recorded by this run. Present only when a provider rejected a requested setting and the client retried with pass defaults. Provider error text is never stored.
  • stats.failover (object): Present only when this run actually sent requests to a failover configuration. llm lists the original targets whose calls ran on the failover LLM provider; whisper is true when transcription ran on the failover transcriber.
  • stats.failover.llm (array of string, one of llm-a, llm-b, required)
  • stats.failover.whisper (boolean, required)
  • pass (string, one of ad_detection_pass_1, reviewer_pass_1, ad_detection_pass_2, reviewer_pass_2, chapter_generation, required): Pipeline pass that made the rejected request.
  • provider (string, one of anthropic, openrouter, openai-compatible, ollama, unknown, required): Configured provider identifier. Endpoint URLs are not stored.
  • model (string, required): Model identifier, or redacted when the value was not safe to retain.
  • requested (one of integer, string, one of none, low, medium, high, required): Requested reasoning effort or Anthropic thinking token budget.
  • compatibility (string, one of required, unsupported, incompatible, required): What the provider response proved. incompatible means the response identified the setting but did not reliably say whether thinking is required or unsupported.
  • fallback (object, required): Pass defaults used for the retry.
  • fallback.maxTokens (integer, required)
  • fallback.temperature (number, required)
  • fallback.reasoningEffort (integer or string or null, required): Null means the retry omitted the reasoning setting.

One template cue the matcher surfaced for an episode (advisory telemetry).

  • id (integer)
  • template_id (integer or null)
  • label (string or null)
  • cue_type (string or null, one of ad_break_boundary, ad_break_start, ad_break_end, show_intro, show_outro, content_transition, null)
  • role (string or null)
  • source (string): Always ‘template’; spectral cues are not recorded
  • start_s (number)
  • end_s (number)
  • match_score (number or null)
  • confidence (number or null)
  • outcome (string, one of snap, pair, none, below_threshold): How detection used the cue. ‘below_threshold’ is an advisory near-miss the matcher scored just under the feed threshold; it was never a signal and never affected a cut.
  • verdict (string, one of pending, confirmed, rejected)
  • edge_distance_s (number or null): Signed distance (edge - cue) from an above-threshold cue to the nearest pre-snap LLM ad edge on its eligible side. NULL for advisory (non_ad) cues and for below_threshold rows.
  • unused_reason (string or null, one of covered, out_of_reach, below_snap_confidence, advisory_role, unpaired, below_pair_confidence, covered_by_existing_ad, no_partner_in_band, phase_mismatch, null): For an outcome=‘none’ cue, why it did nothing. NULL for snap / pair / below_threshold outcomes.

Aggregate cue telemetry for a feed (or globally). Totals, score range, and confirmRate count above-threshold cues only; below_threshold near-misses are reported separately (see the aggregate endpoint’s nearMissTotal / nearMissHistogram).

  • total (integer)
  • snapped (integer)
  • paired (integer)
  • unused (integer)
  • confirmed (integer)
  • rejected (integer)
  • pending (integer)
  • avgScore (number or null)
  • minScore (number or null)
  • maxScore (number or null)
  • confirmRate (number or null): confirmed / (confirmed + rejected), or null if none reviewed
  • start (number): Start time in seconds
  • end (number): End time in seconds
  • confidence (number): Detection confidence (0.0 to 1.0)
  • reason (string): Reason for marking as ad
  • sponsor (string or null): Sponsor or advertiser name extracted from the ad
  • detection_stage (string, one of first_pass, claude, fingerprint, text_pattern, language, audio_enforced, verification, dai_differential, transcript_differential, vad_gap, cue_pair, heuristic_preroll, heuristic_postroll, keep_content, manual, description_chapter): Which detection stage found this ad
  • corroborated_by (string, one of transition_pair, template_cue, volume_anomaly, splice_evidence, dai_differential, transcript_differential): Independent evidence the validator found for this ad. transcript_differential means the publisher’s transcript omits most of the span. Absent when none was found.
  • category (string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap): What kind of content this span is. LLM detection stages emit it directly; fingerprint, text-pattern, and differential stages default to sponsor. An unknown or missing value falls back to sponsor at marker-save time.
  • actionApplied (string or null, one of remove, beep, keep, mark, null): The action resolved for this marker’s category (per-feed override, else global default, else remove). Stored Keep/Mark values reflect current switches between Keep and Mark without recutting; changes involving remove or beep require a recut. Null before action resolution.
  • approved (boolean): Set on a held-for-review marker once its confirm correction is recorded; the approval is applied by the next recut.
  • held_for_review (boolean): True when this marker remains in the audio pending a human decision.
  • carved_from (object): Set on a fragment of a marker the render removed only in part; names the detected span.
  • carved_from.start (number)
  • carved_from.end (number)
  • silent_absorbed_spans (array of object): Measured silence cut with this accepted ad; excluded from its duration checks.
  • silent_absorbed_spans[].start (number)
  • silent_absorbed_spans[].end (number)
  • hold_reason (string or null, one of max_duration, no_cue_evidence, uncorroborated_tail, reviewer_contradiction, reviewer_boundary_conflict, reviewer_inconclusive_bounds, estimated_pattern_bounds, reviewer_reject_conflict, reviewer_failed, no_splice_evidence, verification_miss, verification_kept_conflict, differential_uncorroborated, large_vad_gap_extension, cue_template_unproven, cue_low_confidence, no_transcript_evidence, transcript_differential_unreviewed, null): Why the marker requires review. reviewer_boundary_conflict means a reviewer proposal crossed protected merged-ad evidence; reviewer_reject_conflict means the reviewer rejected a span backed by measured evidence or a confirmed sponsor; reviewer_failed means the review call failed and no independent evidence backs the bounds.
  • reviewer_reasoning (string or null): Reviewer explanation when the reviewer evaluated this marker.
  • reviewer_verdict (string, one of confirmed, adjust, reject, resurrect, inconclusive, failure): Ad reviewer verdict on this marker; absent when the reviewer did not review it.
  • reviewer_locked_start (number): Start the reviewer validated; later steps may move the start inward but not before it.
  • reviewer_locked_end (number): End the reviewer validated; later steps may move the end inward but not past it.
  • hold_id (string): Identity a held marker gets when first held. Copies, carved fragments and recuts keep it, and pass-2 auto-approval confirms record it so releases of one hold stay grouped.
  • pass2_corroborated (boolean): Set on a held marker when pass 2 independently detected an ad inside it.
  • pass2_corroborated_span (object): Part of the hold pass 2 attested as ad; the auto-approval confirm is trimmed to it.
  • pass2_corroborated_span.start (number)
  • pass2_corroborated_span.end (number)
  • pass2_reviewed_release (object): First pass-2 span inside the hold that review released.
  • pass2_reviewed_release.start (number)
  • pass2_reviewed_release.end (number)
  • pass2_released_spans (array of object): Every pass-2 span inside the hold that review released, in start order. Filed as separate confirms when there are several; a single release files the hold’s own confirm span; spans overlapping a standing reviewer reject are skipped.
  • pass2_released_spans[].start (number)
  • pass2_released_spans[].end (number)
  • pass2_outcome (string): Set on a marker pass 2 ended with: cut, kept, or held:<hold_reason>. Spans pass 2 discarded are only logged and counted in the stored run stats, which the API does not return.
  • pass2_hold_review (object or null): Set on a held marker when review of a pass-2 span inside it did not release the hold. The hold stays pending; cleared when a later review releases it. Diagnostic only, separate from reviewer_reasoning.
  • pass2_hold_review.span (array of number): Reviewed pass-2 span [start, end] in original-audio seconds.
  • pass2_hold_review.verdict (string, one of confirmed, adjust, reject, resurrect, failure, inconclusive)
  • pass2_hold_review.reason (string): Reviewer reasoning, or the abstain reason for an inconclusive review.
  • reviewer_proposed_start (number or null): Informational reviewer-proposed start on a held marker. It is not applied until a human confirms it.
  • reviewer_proposed_end (number or null): Informational reviewer-proposed end on a held marker. It is not applied until a human confirms it.
  • addressing_mode (string, one of timestamps, segment_ids): Addressing mode the LLM detection window was rendered under. Absent on markers from before 2.100.12 and on markers that did not come from an LLM window.
  • llm_start (number): Start in seconds exactly as the model reported it, before boundary snapping and review. Set with addressing_mode.
  • llm_end (number): End in seconds exactly as the model reported it, before boundary snapping and review. Set with addressing_mode.
  • validation (object): Validation results from post-detection validation layer
  • validation.decision (string, one of ACCEPT, REVIEW, REJECT): Validation decision - ACCEPT/REVIEW are removed, REJECT stays in audio
  • validation.adjusted_confidence (number): Confidence after position/content adjustments (0.0 to 1.0)
  • validation.original_confidence (number): Original confidence from AI detection
  • validation.flags (array of string): Validation warnings or errors
  • validation.corrections (array of string): Auto-corrections applied (merged ads, clamped boundaries)
  • validation.audio_corroboration (string, one of transition_pair, template_cue, volume_anomaly, splice_evidence, dai_differential, none): Audio evidence found at the edges of a long cut detected from the transcript, or none. Set only on those cuts, in the first pass.
  • feedSlug (string)
  • feedTitle (string)
  • episodeId (string)
  • episodeTitle (string)
  • publishDate (string or null)
  • hasOriginalAudio (boolean)
  • processedUrl (string): Same-origin processed-audio URL (carries the feed auth key when enabled)
  • start (number)
  • end (number)
  • confidence (number or null)
  • sponsor (string or null)
  • reason (string or null)
  • patternId (integer or null)
  • detectionStage (string or null)
  • category (string or null, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap, null): Segment category, or null when no stage classified the marker
  • actionApplied (string or null, one of remove, beep, keep, mark, null): Action resolved for this marker. Stored Keep/Mark values reflect current switches between Keep and Mark without recutting; changes involving remove or beep require a recut.
  • reviewerVerdict (string or null, one of confirmed, adjust, reject, resurrect, inconclusive, failure, null): Ad reviewer verdict on this marker, or null when the reviewer did not run. inconclusive means the reviewer abstained: the marker keeps its bounds when measured evidence supports them and is otherwise held as reviewer_inconclusive_bounds. adjust alone does not mean the span moved: a held contradiction keeps the pass-1 bounds and a split piece drops the originals, and neither records reviewerOriginalStart/End.
  • reviewerOriginalStart (number or null): Start of the span before the reviewer moved it; present only when the reviewer moved the span
  • reviewerOriginalEnd (number or null): End of the span before the reviewer moved it; present only when the reviewer moved the span
  • reviewerMoved (boolean): Whether the span was moved from its pass-1 bounds, by the reviewer or by a human approving a trimmed boundary. Use this instead of inferring a move from reviewerVerdict/reviewerOriginalStart/End.
  • holdReason (string or null, one of max_duration, no_cue_evidence, uncorroborated_tail, reviewer_contradiction, reviewer_boundary_conflict, reviewer_inconclusive_bounds, estimated_pattern_bounds, reviewer_reject_conflict, reviewer_failed, no_splice_evidence, verification_miss, verification_kept_conflict, differential_uncorroborated, large_vad_gap_extension, cue_template_unproven, cue_low_confidence, no_transcript_evidence, transcript_differential_unreviewed, null): Why the detection is held for review; null unless status is pending
  • status (string, one of accepted, rejected, pending)
  • resolution (string, one of unresolved, confirmed, dismissed)
  • id (string): Model identifier
  • name (string): Human-readable model name
  • created (string or null (date-time))
  • inputCostPerMtok (number or null): Input cost per million tokens (USD), present when pricing is known
  • outputCostPerMtok (number or null): Output cost per million tokens (USD), present when pricing is known
  • cacheReadCostPerMtok (number or null): Cached-input cost per million tokens (USD), present when pricing is known and a cache rate exists
  • pricingSource (string or null): Pricing source, including operator when a configured override applies
  • inputCostPerMtok (number, required): Input price in USD per 1 million tokens
  • outputCostPerMtok (number, required): Output price in USD per 1 million tokens
  • cacheReadCostPerMtok (number or null): Cached-input price in USD per 1 million tokens. Optional.
  • id (string): Model identifier (tiny, base, small, medium, large-v3)
  • name (string): Human-readable model name
  • vram (string): Estimated GPU VRAM requirement
  • speed (string): Approximate transcription speed
  • quality (string): Relative quality compared to other models
  • configured (boolean)
  • source (string, one of db, env, none)
  • baseUrl (string)
  • model (string)
  • accountChanged (boolean): Present and true only when this save moved the slot’s account identity (provider type or endpoint), which strands every run whose routes were frozen against the old account
  • affectedRuns (AffectedRuns)

Active runs whose frozen routes name a provider account. Returned by the preflight, and by a save that moved the account identity.

  • count (integer): Number of affected runs
  • action (string, one of requeue, cancel): What the save did with them (absent from the preflight). requeue drops their frozen routes so a resumed run re-resolves against the new configuration; cancel also asks each owner to stop now.
  • runs (array of object)
  • runs[].runId (string)
  • runs[].slug (string)
  • runs[].episodeId (string)
  • runs[].state (string, one of running, cancel_requested)
  • runs[].phases (array of string, one of detection, review, verification, chapters): Pipeline phases of this run that name the account
  • systemPrompt (object)
  • systemPrompt.value (string)
  • systemPrompt.isDefault (boolean)
  • verificationPrompt (object)
  • verificationPrompt.value (string)
  • verificationPrompt.isDefault (boolean)
  • enableAdReview (object): Opt-in LLM ad reviewer. Default false.
  • enableAdReview.value (boolean)
  • enableAdReview.isDefault (boolean)
  • reviewModel (object): Model used for the reviewer pass. Sentinel same_as_pass reuses the corresponding pass model (claude_model for pass 1, verification_model for pass 2). Otherwise a concrete model id.
  • reviewModel.value (string)
  • reviewModel.isDefault (boolean)
  • reviewProvider (object): Routing slot used for the reviewer pass: primary, secondary, or the sentinel same_as_pass (the default), which inherits both the provider and model of the pass being reviewed and ignores reviewModel. primary/secondary enable reviewModel.
  • reviewProvider.value (string)
  • reviewProvider.isDefault (boolean)
  • reviewMaxBoundaryShift (object): Cap on boundary shift in seconds for adjust verdicts.
  • reviewMaxBoundaryShift.value (integer)
  • reviewMaxBoundaryShift.isDefault (boolean)
  • reviewPrompt (object): System prompt for the confirm/adjust/reject reviewer.
  • reviewPrompt.value (string)
  • reviewPrompt.isDefault (boolean)
  • resurrectPrompt (object): System prompt for the resurrect/reject reviewer over rejected ads.
  • resurrectPrompt.value (string)
  • resurrectPrompt.isDefault (boolean)
  • chapterPrompt (object): Prompt template for chapter topic detection with placeholders {num_splits}, {segment_start}, {segment_end}, {continuation_block}, {description_block}, {hints_block}, {transcript}.
  • chapterPrompt.value (string)
  • chapterPrompt.isDefault (boolean)
  • patternCleanupPrompt (object): System prompt for the pattern cleanup review of learned patterns.
  • patternCleanupPrompt.value (string)
  • patternCleanupPrompt.isDefault (boolean)
  • systemPromptOverride (object): Optional per-pass override appended to the first-pass prompt at run time (empty by default, leaving the default prompt unchanged). If the prompt contains an {override} placeholder it is substituted there.
  • systemPromptOverride.value (string)
  • systemPromptOverride.isDefault (boolean)
  • verificationPromptOverride (object): Optional per-pass override appended to the verification prompt (empty by default).
  • verificationPromptOverride.value (string)
  • verificationPromptOverride.isDefault (boolean)
  • reviewPromptOverride (object): Optional per-pass override appended to the reviewer prompt (empty by default).
  • reviewPromptOverride.value (string)
  • reviewPromptOverride.isDefault (boolean)
  • resurrectPromptOverride (object): Optional per-pass override appended to the resurrect prompt (empty by default).
  • resurrectPromptOverride.value (string)
  • resurrectPromptOverride.isDefault (boolean)
  • chapterPromptOverride (object): Optional override appended to the chapter topic-detection prompt (empty by default).
  • chapterPromptOverride.value (string)
  • chapterPromptOverride.isDefault (boolean)
  • claudeModel (object)
  • claudeModel.value (string or null)
  • claudeModel.isDefault (boolean)
  • verificationModel (object)
  • verificationModel.value (string or null)
  • verificationModel.isDefault (boolean)
  • detectionProvider (object): Routing slot for first-pass ad detection: primary or secondary. Empty when unset, which resolves to primary.
  • detectionProvider.value (string or null)
  • detectionProvider.isDefault (boolean)
  • verificationProvider (object): Routing slot for the verification pass: primary, secondary, or same_as_detection. Empty when unset, which resolves to same_as_detection.
  • verificationProvider.value (string or null)
  • verificationProvider.isDefault (boolean)
  • chaptersModel (object)
  • chaptersModel.value (string or null): Model for chapter title generation and topic detection
  • chaptersModel.isDefault (boolean)
  • chaptersProvider (object): Routing slot for chapter title generation: primary, secondary, or same_as_detection. Empty when unset, which resolves to same_as_detection.
  • chaptersProvider.value (string or null)
  • chaptersProvider.isDefault (boolean)
  • patternCleanupEnabled (object): Whether the scheduled pattern cleanup review runs (Experiments).
  • patternCleanupEnabled.value (boolean)
  • patternCleanupEnabled.isDefault (boolean)
  • patternCleanupCron (object): Five-field cron expression (UTC) for the pattern cleanup schedule. Default 0 4 * * 0.
  • patternCleanupCron.value (string)
  • patternCleanupCron.isDefault (boolean)
  • patternCleanupBatchSize (object): Learned patterns reviewed per cleanup run, 1 to 200. Default 25.
  • patternCleanupBatchSize.value (integer)
  • patternCleanupBatchSize.isDefault (boolean)
  • patternCleanupUnusedDays (object): Days without a match before cleanup suggests retiring a pattern, 7 to 3650. Default 90.
  • patternCleanupUnusedDays.value (integer)
  • patternCleanupUnusedDays.isDefault (boolean)
  • patternCleanupProvider (object): Routing slot for pattern cleanup, one of primary, secondary, or same_as_detection. Null when unset, which inherits detectionProvider.
  • patternCleanupProvider.value (string or null)
  • patternCleanupProvider.isDefault (boolean)
  • patternCleanupModel (object): Model for pattern cleanup. Null when unset, which inherits the detection model.
  • patternCleanupModel.value (string or null)
  • patternCleanupModel.isDefault (boolean)
  • whisperModel (object)
  • whisperModel.value (string): faster-whisper model for transcription; ignored by the parakeet and openai-api backends
  • whisperModel.isDefault (boolean)
  • whisperBackend (object)
  • whisperBackend.value (string): Whisper backend to use (local, openai-api, parakeet; parakeet runs NVIDIA Parakeet TDT 0.6B v3 in-process)
  • whisperBackend.isDefault (boolean)
  • whisperApiBaseUrl (object)
  • whisperApiBaseUrl.value (string): Base URL for OpenAI-compatible remote transcription API endpoint
  • whisperApiBaseUrl.isDefault (boolean)
  • whisperApiKeyConfigured (boolean): Whether a remote transcription API key is configured (read-only)
  • whisperApiModel (object)
  • whisperApiModel.value (string): Model name to use with the remote transcription API
  • whisperApiModel.isDefault (boolean)
  • whisperLanguage (object)
  • whisperLanguage.value (string): ISO 639-1 code (e.g. en, fi) or auto for backend auto-detect
  • whisperLanguage.isDefault (boolean)
  • whisperApiTimeoutSeconds (object)
  • whisperApiTimeoutSeconds.value (integer): Seconds to wait for each remote transcription request.
  • whisperApiTimeoutSeconds.isDefault (boolean)
  • transcribeMaxChunkSeconds (object): Max duration, in seconds, of each transcription chunk.
  • transcribeMaxChunkSeconds.value (integer)
  • transcribeMaxChunkSeconds.isDefault (boolean)
  • transcribeConcurrentChunks (object): Number of transcription chunks sent to the transcription backend concurrently.
  • transcribeConcurrentChunks.value (integer)
  • transcribeConcurrentChunks.isDefault (boolean)
  • transcribeChunkOverlapSeconds (object): Overlap, in seconds, between consecutive transcription chunks.
  • transcribeChunkOverlapSeconds.value (integer)
  • transcribeChunkOverlapSeconds.isDefault (boolean)
  • whisperPoolEnabled (object): Bound concurrent requests to the remote transcription API to avoid rate limits.
  • whisperPoolEnabled.value (boolean)
  • whisperPoolEnabled.isDefault (boolean)
  • whisperPoolMaxRequests (object): Maximum concurrent in-flight requests to the remote transcription API when the pool is enabled.
  • whisperPoolMaxRequests.value (integer)
  • whisperPoolMaxRequests.isDefault (boolean)
  • whisperPoolMaxEpisodes (object): Maximum episodes transcribing concurrently against the remote transcription API when the pool is enabled.
  • whisperPoolMaxEpisodes.value (integer)
  • whisperPoolMaxEpisodes.isDefault (boolean)
  • whisperComputeType (object)
  • whisperComputeType.value (string, one of auto, float16, int8_float16, int8, float32): Compute precision for the local faster-whisper backend only. auto resolves to float16 on CUDA and int8 on CPU; older GPUs automatically fall back through the chain int8_float16 -> int8 -> float32 when float16 init fails.
  • whisperComputeType.isDefault (boolean)
  • audioCueDetectionEnabled (object): Master toggle for audio cue detection (templates + spectral fallback). Off by default.
  • audioCueDetectionEnabled.value (boolean)
  • audioCueDetectionEnabled.isDefault (boolean)
  • audioCueFreqMinHz (object): Low edge (Hz) of the spectral fallback’s cue band.
  • audioCueFreqMinHz.value (number)
  • audioCueFreqMinHz.isDefault (boolean)
  • audioCueFreqMaxHz (object): High edge (Hz) of the spectral fallback’s cue band.
  • audioCueFreqMaxHz.value (number)
  • audioCueFreqMaxHz.isDefault (boolean)
  • audioCueProminenceDb (object): dB above the in-band baseline a burst must rise to count as a cue (spectral fallback).
  • audioCueProminenceDb.value (number)
  • audioCueProminenceDb.isDefault (boolean)
  • audioCueMinConfidence (object): Drop cues weaker than this. The model never sees a cue below 0.80.
  • audioCueMinConfidence.value (number)
  • audioCueMinConfidence.isDefault (boolean)
  • audioCueTemplateScore (object): ZNCC score (0-0.99, default 0.75) a learned cue template must reach to register on another episode.
  • audioCueTemplateScore.value (number)
  • audioCueTemplateScore.isDefault (boolean)
  • audioCueFormantAttenDb (object): Speech-formant-band attenuation in dB for voiceover-robust cue matching (#350). 0 = off (default).
  • audioCueFormantAttenDb.value (number)
  • audioCueFormantAttenDb.isDefault (boolean)
  • audioCueSnapConfidence (object): Min cue confidence before a cue may move an ad edge (default 0.80).
  • audioCueSnapConfidence.value (number)
  • audioCueSnapConfidence.isDefault (boolean)
  • audioCueSnapLeadSeconds (object): How far back from the ad edge a cue may sit to be eligible for snapping, seconds (default 10.0).
  • audioCueSnapLeadSeconds.value (number)
  • audioCueSnapLeadSeconds.isDefault (boolean)
  • audioCueSnapLagSeconds (object): How far past the ad edge a cue may sit to be eligible for snapping, seconds (default 4.0).
  • audioCueSnapLagSeconds.value (number)
  • audioCueSnapLagSeconds.isDefault (boolean)
  • audioCueCaptureMinSeconds (object): Shortest cue a user may bracket, seconds (default 0.2).
  • audioCueCaptureMinSeconds.value (number)
  • audioCueCaptureMinSeconds.isDefault (boolean)
  • audioCueCaptureMaxSeconds (object): Longest cue a user may bracket, seconds (default 4).
  • audioCueCaptureMaxSeconds.value (number)
  • audioCueCaptureMaxSeconds.isDefault (boolean)
  • audioCueCaptureMaxIntroSeconds (object): Longest show-intro stinger a user may bracket, seconds (default 60).
  • audioCueCaptureMaxIntroSeconds.value (number)
  • audioCueCaptureMaxIntroSeconds.isDefault (boolean)
  • audioCueCaptureMaxOutroSeconds (object): Longest show-outro stinger a user may bracket, seconds (default 60).
  • audioCueCaptureMaxOutroSeconds.value (number)
  • audioCueCaptureMaxOutroSeconds.isDefault (boolean)
  • audioCuePairConfidence (object): Min cue confidence to synthesize an ad from a cue pair (default 0.85).
  • audioCuePairConfidence.value (number)
  • audioCuePairConfidence.isDefault (boolean)
  • audioCuePairMinBreakSeconds (object): Shortest cue-pair break, seconds (default 30).
  • audioCuePairMinBreakSeconds.value (number)
  • audioCuePairMinBreakSeconds.isDefault (boolean)
  • audioCuePairMaxBreakSeconds (object): Longest cue-pair break, seconds (default 480).
  • audioCuePairMaxBreakSeconds.value (number)
  • audioCuePairMaxBreakSeconds.isDefault (boolean)
  • audioCuePairMaxBreakFraction (object): Reject a cue pair spanning more than this fraction of the episode (short-episode backstop; default 0.5, 0 disables).
  • audioCuePairMaxBreakFraction.value (number)
  • audioCuePairMaxBreakFraction.isDefault (boolean)
  • audioCueCreateFromPairs (object): Opt-in. Synthesize a cue-only ad when two high-confidence cues bracket a break the LLM missed (still reviewed). Off by default.
  • audioCueCreateFromPairs.value (boolean)
  • audioCueCreateFromPairs.isDefault (boolean)
  • audioCueCutMatches (object): Opt-in. Cut every matched cue on its own; the feed’s category action for the cue type decides the outcome. Off by default.
  • audioCueCutMatches.value (boolean)
  • audioCueCutMatches.isDefault (boolean)
  • silenceSnapNoiseDb (object): Amplitude (dBFS) below which audio counts as silence for silence snap (default -50).
  • silenceSnapNoiseDb.value (number)
  • silenceSnapNoiseDb.isDefault (boolean)
  • silenceSnapMinDurationSeconds (object): Shortest sub-threshold span that counts as a silence for silence snap, seconds (default 0.3).
  • silenceSnapMinDurationSeconds.value (number)
  • silenceSnapMinDurationSeconds.isDefault (boolean)
  • silenceSnapMaxDistanceSeconds (object): Farthest an ad edge may move to reach a detected silence, seconds (default 2.0).
  • silenceSnapMaxDistanceSeconds.value (number)
  • silenceSnapMaxDistanceSeconds.isDefault (boolean)
  • verificationMissHoldMinConfidence (object): Confidence floor for a standalone pass-2 verification miss to hold for review instead of being dropped (default 0.60).
  • verificationMissHoldMinConfidence.value (number (float))
  • verificationMissHoldMinConfidence.isDefault (boolean)
  • verificationMissAutocutMinConfidence (object): Confidence floor for a standalone verification miss to cut automatically instead of holding for review. 0 disables autocut (default).
  • verificationMissAutocutMinConfidence.value (number (float))
  • verificationMissAutocutMinConfidence.isDefault (boolean)
  • learningMinConfidence (object): Minimum confidence for a detection to teach the pattern matcher a new sponsor, for ads up to 90 seconds (default 0.85).
  • learningMinConfidence.value (number (float))
  • learningMinConfidence.isDefault (boolean)
  • learningMinConfidenceLong (object): Same floor as learningMinConfidence for ads longer than 90 seconds (default 0.92).
  • learningMinConfidenceLong.value (number (float))
  • learningMinConfidenceLong.isDefault (boolean)
  • learningMinPatternDuration (object): Shortest span in seconds that can teach the pattern matcher (default 15).
  • learningMinPatternDuration.value (integer)
  • learningMinPatternDuration.isDefault (boolean)
  • learningMaxPatternDuration (object): Longest span in seconds learned as one pattern; longer spans are split (default 120).
  • learningMaxPatternDuration.value (integer)
  • learningMaxPatternDuration.isDefault (boolean)
  • daiDifferentialOverridesKeep (object): A marker overlapping a measured differential region is cut even when segmentCategoryActions maps its category to keep (default true).
  • daiDifferentialOverridesKeep.value (boolean)
  • daiDifferentialOverridesKeep.isDefault (boolean)
  • spliceVetoEnabled (object): Hold long transcript-only cuts that show no edit point in the audio. A feed’s own spliceVetoEnabled overrides this (default true).
  • spliceVetoEnabled.value (boolean)
  • spliceVetoEnabled.isDefault (boolean)
  • differentialMeasuredCorrMax (object): A cross-fetch region becomes a differential candidate only when its measured correlation is at or below this value (default 0.60).
  • differentialMeasuredCorrMax.value (number (float))
  • differentialMeasuredCorrMax.isDefault (boolean)
  • differentialHoldMinSeconds (object): Shortest uncorroborated differential candidate that may hold for review; shorter candidates are dropped. 0 disables the floor (default 10).
  • differentialHoldMinSeconds.value (number (float))
  • differentialHoldMinSeconds.isDefault (boolean)
  • positionalPriorEnabled (object)
  • positionalPriorEnabled.value (boolean): Toggles the learned positional prior experiment (off by default).
  • positionalPriorEnabled.isDefault (boolean)
  • vadGapDetectionEnabled (object)
  • vadGapDetectionEnabled.value (boolean): Toggles the VAD gap detector.
  • vadGapDetectionEnabled.isDefault (boolean)
  • vadGapStartMinSeconds (object)
  • vadGapStartMinSeconds.value (number (float))
  • vadGapStartMinSeconds.isDefault (boolean)
  • vadGapMidMinSeconds (object)
  • vadGapMidMinSeconds.value (number (float))
  • vadGapMidMinSeconds.isDefault (boolean)
  • vadGapTailMinSeconds (object)
  • vadGapTailMinSeconds.value (number (float))
  • vadGapTailMinSeconds.isDefault (boolean)
  • audioReplacementSoundEnabled (object)
  • audioReplacementSoundEnabled.value (boolean)
  • audioReplacementSoundEnabled.isDefault (boolean)
  • audioMp3StreamCopyEnabled (object)
  • audioMp3StreamCopyEnabled.value (boolean)
  • audioMp3StreamCopyEnabled.isDefault (boolean)
  • audioBitrate (object)
  • audioBitrate.value (string, one of 64k, 96k, 128k, 192k, 256k)
  • audioBitrate.isDefault (boolean)
  • audioEncoderCompressionLevel (object)
  • audioEncoderCompressionLevel.value (string, one of default, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • audioEncoderCompressionLevel.isDefault (boolean)
  • skipFlacCompression (object)
  • skipFlacCompression.value (boolean)
  • skipFlacCompression.isDefault (boolean)
  • adDetectionParallelWindows (object)
  • adDetectionParallelWindows.value (integer)
  • adDetectionParallelWindows.isDefault (boolean)
  • adReviewerParallelAds (object)
  • adReviewerParallelAds.value (integer)
  • adReviewerParallelAds.isDefault (boolean)
  • maxArtworkBytes (object)
  • maxArtworkBytes.value (integer)
  • maxArtworkBytes.isDefault (boolean)
  • maxRssBytes (object)
  • maxRssBytes.value (integer)
  • maxRssBytes.isDefault (boolean)
  • maxAudioDownloadMb (object)
  • maxAudioDownloadMb.value (integer)
  • maxAudioDownloadMb.isDefault (boolean)
  • localUploadMaxMb (object): Maximum size in MB of one local-feed upload request (1 to 4096, default 1024).
  • localUploadMaxMb.value (integer)
  • localUploadMaxMb.isDefault (boolean)
  • youtubeEnabled (object): Whether YouTube feeds are enabled. Written through PUT /settings/youtube. Default false.
  • youtubeEnabled.value (boolean)
  • youtubeEnabled.isDefault (boolean)
  • youtubeApiKeyConfigured (boolean): True when a YouTube Data API key is stored. The key itself is never returned.
  • autoProcessEnabled (object)
  • autoProcessEnabled.value (boolean): Whether auto-processing of new episodes is enabled
  • autoProcessEnabled.isDefault (boolean)
  • autoProcessMaxAgeHours (object)
  • autoProcessMaxAgeHours.value (integer): Only episodes published within this many hours are auto-queued. Default 48.
  • autoProcessMaxAgeHours.isDefault (boolean)
  • maxFeedEpisodes (object)
  • maxFeedEpisodes.value (integer): Global default cap on episodes returned in served RSS feeds (per-feed maxEpisodes overrides when set)
  • maxFeedEpisodes.isDefault (boolean)
  • onlyExposeProcessedDefault (object)
  • onlyExposeProcessedDefault.value (boolean): Global default for hiding non-processed episodes from served feeds (per-feed onlyExposeProcessedEpisodes overrides when set)
  • onlyExposeProcessedDefault.isDefault (boolean)
  • feedItunesBlock (object)
  • feedItunesBlock.value (boolean): Whether every served feed carries itunes:block Yes (default true)
  • feedItunesBlock.isDefault (boolean)
  • whatsNewOnUpgrade (object)
  • whatsNewOnUpgrade.value (boolean): Show the What’s new dialog once per browser after the app version changes, or on a browser’s first load
  • whatsNewOnUpgrade.isDefault (boolean)
  • requireManualApprovalDefault (object)
  • requireManualApprovalDefault.value (boolean): Global default for holding newly processed episodes out of served feeds until approved (per-feed requireManualApproval overrides when set)
  • requireManualApprovalDefault.isDefault (boolean)
  • detectShowSegments (object)
  • detectShowSegments.value (boolean): Global default for detecting intro, outro, and recap/housekeeping segments (per-feed detectShowSegments overrides when set)
  • detectShowSegments.isDefault (boolean)
  • seedSponsorsDetection (object)
  • seedSponsorsDetection.value (boolean): Whether the detection pass prompt is rendered with the seed sponsor list. Default true.
  • seedSponsorsDetection.isDefault (boolean)
  • seedSponsorsVerification (object)
  • seedSponsorsVerification.value (boolean): Whether the verification pass prompt is rendered with the seed sponsor list. Default true.
  • seedSponsorsVerification.isDefault (boolean)
  • seedSponsorsReviewer (object)
  • seedSponsorsReviewer.value (boolean): Whether the reviewer pass prompt is rendered with the seed sponsor list. Default true.
  • seedSponsorsReviewer.isDefault (boolean)
  • seedSponsorsResurrect (object)
  • seedSponsorsResurrect.value (boolean): Whether the resurrect pass prompt is rendered with the seed sponsor list. Default true.
  • seedSponsorsResurrect.isDefault (boolean)
  • textRecurrenceHints (object)
  • textRecurrenceHints.value (boolean): Hints the detection prompt with transcript spans whose wording recurs near-verbatim across prior episodes of the same show. Off by default.
  • textRecurrenceHints.isDefault (boolean)
  • adAddressingMode (object)
  • adAddressingMode.value (string, one of timestamps, segment_ids, random): How the LLM addresses detected segments. ‘timestamps’ (default), ‘segment_ids’, or ‘random’ (draws one of the two per run).
  • adAddressingMode.isDefault (boolean)
  • processNewEpisodesFirst (object)
  • processNewEpisodesFirst.value (boolean): Whether episodes published within the last 48 hours get an automatic queue-priority boost ahead of the rest of the auto-process backlog. On by default.
  • processNewEpisodesFirst.isDefault (boolean)
  • rssRefreshIntervalMinutes (object)
  • rssRefreshIntervalMinutes.value (integer): Minutes between background RSS refresh passes for every feed. Default 15.
  • rssRefreshIntervalMinutes.isDefault (boolean)
  • queueManualBoost (object)
  • queueManualBoost.value (integer): Priority added when a user plays an unprocessed episode or reprocesses one by hand. Default 20.
  • queueManualBoost.isDefault (boolean)
  • queueFreshBoost (object)
  • queueFreshBoost.value (integer): Priority added to episodes published within the last 48 hours while processNewEpisodesFirst is on. Default 5.
  • queueFreshBoost.isDefault (boolean)
  • queueBulkBoost (object)
  • queueBulkBoost.value (integer): Priority added to bulk work (Reprocess All, segment re-renders). Default 0 keeps backlog runs behind everything else. Default 0.
  • queueBulkBoost.isDefault (boolean)
  • podpingEnabled (object): Opt-in Podping listener. Default false.
  • podpingEnabled.value (boolean)
  • podpingEnabled.isDefault (boolean)
  • segmentCategoryActions (object): Global segment-category action map (issue
  • segmentCategoryActions.value (map of string, one of remove, beep, keep, mark)
  • segmentCategoryActions.isDefault (boolean)
  • communitySyncCategories (object): Segment categories accepted from community pattern sync. Default is every category.
  • communitySyncCategories.value (array of string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap)
  • communitySyncCategories.isDefault (boolean)
  • jitBlockedUserAgents (object): User-agent patterns barred from triggering just-in-time episode processing. Case-insensitive substring match; a leading caret anchors to the start of the agent.
  • jitBlockedUserAgents.value (array of string)
  • jitBlockedUserAgents.isDefault (boolean)
  • artworkWatermarkEnabled (object)
  • artworkWatermarkEnabled.value (boolean): When true, overlays a MinusPod badge on the served feed’s channel cover art (issue
  • artworkWatermarkEnabled.isDefault (boolean)
  • artworkBadgePosition (object)
  • artworkBadgePosition.value (string, one of bottom-right, bottom-left, top-right, top-left): Corner the MinusPod badge is composited into (issue
  • artworkBadgePosition.isDefault (boolean)
  • lowAdYieldAction (object)
  • lowAdYieldAction.value (string, one of nothing, redetect, reprocess, full): Automatic response when a pipeline-initiated run removes far less ad time than the feed’s recent average: ‘nothing’ (default), ‘redetect’ (LLM-only rerun from the stored transcript), ‘reprocess’, or ‘full’. Fires at most once per episode.
  • lowAdYieldAction.isDefault (boolean)
  • episodeLogRetentionDays (object)
  • episodeLogRetentionDays.value (integer): Days to keep per-run pipeline logs (issue 660); 0 turns storage off.
  • episodeLogRetentionDays.isDefault (boolean)
  • episodeLogLevel (object)
  • episodeLogLevel.value (string, one of debug, info): Minimum level kept in a run log (issue 660).
  • episodeLogLevel.isDefault (boolean)
  • downloadUserAgent (object)
  • downloadUserAgent.value (string): User-Agent sent when fetching audio, artwork, and chapters.
  • downloadUserAgent.isDefault (boolean)
  • feedUserAgent (object)
  • feedUserAgent.value (string): User-Agent sent when fetching RSS feeds.
  • feedUserAgent.isDefault (boolean)
  • logDownloadQuery (object)
  • logDownloadQuery.value (boolean): Whether download logs include URL query strings.
  • logDownloadQuery.isDefault (boolean)
  • feedAuthEnabled (object)
  • feedAuthEnabled.value (boolean): Whether the global feed auth key is required on all public feed and episode URLs. Off by default.
  • feedAuthEnabled.isDefault (boolean)
  • downloadHistoryEnabled (object)
  • downloadHistoryEnabled.value (boolean): Whether episode downloads are recorded.
  • downloadHistoryEnabled.isDefault (boolean)
  • downloadGeoLookupEnabled (object)
  • downloadGeoLookupEnabled.value (boolean): Whether public client IPs are sent to ipwho.is for a location. Off by default.
  • downloadGeoLookupEnabled.isDefault (boolean)
  • downloadHistoryRetentionDays (object)
  • downloadHistoryRetentionDays.value (integer): Days download history rows are kept.
  • downloadHistoryRetentionDays.isDefault (boolean)
  • feedAuthKey (string or null): Global feed auth key (64 hex chars) carried as ?key= on feed/episode URLs and embedded in the badged cover path token; null until first enable.
  • opmlModifiedUrl (string or null): Copyable public URL for importing modified (ad-free) feeds by URL; null when feed auth is disabled.
  • opmlOriginalUrl (string or null): Copyable public URL for importing original (upstream) feeds by URL; null when feed auth is disabled.
  • minCutConfidence (object)
  • minCutConfidence.value (number (float)): Minimum confidence threshold to cut an ad from audio (0.50-0.95)
  • minCutConfidence.isDefault (boolean)
  • vttTranscriptsEnabled (object): Generate a VTT transcript sidecar for each processed episode.
  • vttTranscriptsEnabled.value (boolean)
  • vttTranscriptsEnabled.isDefault (boolean)
  • chaptersEnabled (object): Generate podcast:chapters JSON for each processed episode.
  • chaptersEnabled.value (boolean)
  • chaptersEnabled.isDefault (boolean)
  • chaptersMode (object): Default chapter mode for feeds that inherit the global setting.
  • chaptersMode.value (string, one of auto, generate, off)
  • chaptersMode.isDefault (boolean)
  • skipSecondPass (object): Skip the pass-2 verification scan by default for feeds that inherit this setting.
  • skipSecondPass.value (boolean)
  • skipSecondPass.isDefault (boolean)
  • transcriptDifferentialEnabled (object): Default for the upstream-transcript differential for feeds that inherit this setting.
  • transcriptDifferentialEnabled.value (boolean)
  • transcriptDifferentialEnabled.isDefault (boolean)
  • differentialFetchMode (object): Default cross-fetch mode for feeds that inherit the global setting.
  • differentialFetchMode.value (string, one of auto, on, off)
  • differentialFetchMode.isDefault (boolean)
  • chaptersInNotes (object): Append the generated chapter list to served episode descriptions and the episode API description.
  • chaptersInNotes.value (boolean)
  • chaptersInNotes.isDefault (boolean)
  • reviewLinksInNotes (object): Append review and rate links to the served description of processed episodes. Feeds can override per feed.
  • reviewLinksInNotes.value (boolean)
  • reviewLinksInNotes.isDefault (boolean)
  • adChaptersEnabled (object): Deprecated. Derived from segmentCategoryActions; true when any category resolves to mark.
  • adChaptersEnabled.value (boolean)
  • adChaptersEnabled.isDefault (boolean)
  • adChapterCategories (object): Deprecated. Derived from segmentCategoryActions; true for each category that resolves to mark.
  • adChapterCategories.value (map of boolean)
  • adChapterCategories.isDefault (boolean)
  • adChaptersIncludeHeld (object): Also publish held-for-review segments as ad chapters.
  • adChaptersIncludeHeld.value (boolean)
  • adChaptersIncludeHeld.isDefault (boolean)
  • adChapterTitleFormat (object): Title template for an ad chapter; {label} is the category name and {category} its id, both optional.
  • adChapterTitleFormat.value (string)
  • adChapterTitleFormat.isDefault (boolean)
  • adChapterHeldTitleFormat (object): Title template for a held segment’s ad chapter; {label} is the category name and {category} its id, both optional.
  • adChapterHeldTitleFormat.value (string)
  • adChapterHeldTitleFormat.isDefault (boolean)
  • adChapterResumeTitle (object): Title of the chapter that marks the return to show content after an ad chapter.
  • adChapterResumeTitle.value (string)
  • adChapterResumeTitle.isDefault (boolean)
  • adChapterMinConfidence (object): Minimum marker confidence required before a segment becomes an ad chapter.
  • adChapterMinConfidence.value (number (float))
  • adChapterMinConfidence.isDefault (boolean)
  • audioNormalizeEnabled (object): Loudness-normalize processed audio output.
  • audioNormalizeEnabled.value (boolean)
  • audioNormalizeEnabled.isDefault (boolean)
  • audioNormalizeIntensity (object): Loudness normalization intensity, applied when audioNormalizeEnabled is true.
  • audioNormalizeIntensity.value (string, one of gentle, normal, aggressive, extreme, maximum)
  • audioNormalizeIntensity.isDefault (boolean)
  • llmProvider (object)
  • llmProvider.value (string): Active LLM provider (anthropic, openrouter, openai-compatible, ollama, typesafe, systemone-compatible)
  • llmProvider.isDefault (boolean)
  • omitTemperature (object): Operator override: when true, temperature is omitted from every LLM call for every model, regardless of the built-in list of models known to reject it or anything learned at runtime from a prior rejection. Off by default.
  • omitTemperature.value (boolean)
  • llmJsonSchemaEnabled (object): Opt-in structured output (#693): json_schema response format for OpenAI-compatible endpoints, per model that passes the probe. Off by default.
  • llmJsonSchemaEnabled.value (boolean)
  • llmJsonSchemaEnabled.isDefault (boolean)
  • typesafeApiKeyConfigured (boolean): Effective primary stored or environment key exists; no key material is returned.
  • systemoneApiKeyConfigured (boolean): Effective primary compatible stored or environment key exists; no key material is returned.
  • systemoneBaseUrl (object)
  • systemoneBaseUrl.value (string)
  • systemoneBaseUrl.isDefault (boolean)
  • systemOneTunables (SystemOneProfiles)
  • systemOneTunablesIsDefault (SystemOneProfileDefaults)
  • systemOneTunableDefaults (SystemOneProfiles)
  • openaiBaseUrl (object)
  • openaiBaseUrl.value (string): Base URL for OpenAI-compatible API endpoint
  • openaiBaseUrl.isDefault (boolean)
  • pricingSourceMode (object)
  • pricingSourceMode.value (string, one of auto, litellm, free): Pricing source mode (auto, litellm, free)
  • pricingSourceMode.isDefault (boolean)
  • modelPricingOverrides (object)
  • modelPricingOverrides.value (map of ModelPricingOverride)
  • modelPricingOverrides.isDefault (boolean)
  • apiKeyConfigured (boolean): Whether an API key is configured for the current provider (read-only)
  • openrouterApiKeyConfigured (boolean): Whether an OpenRouter API key is configured (read-only)
  • secondaryProviderEnabled (object): Optional second full provider config. Per-stage provider overrides (detectionProvider, verificationProvider, chaptersProvider, reviewProvider) pick a routing slot, primary or secondary, rather than a provider type; a stage routed to secondary while this is false falls back to primary. Off by default.
  • secondaryProviderEnabled.value (boolean)
  • secondaryProviderEnabled.isDefault (boolean)
  • secondaryProvider (object)
  • secondaryProvider.value (string or null): Secondary provider type (anthropic, openrouter, openai-compatible, ollama), or null when unset
  • secondaryProvider.isDefault (boolean)
  • secondaryProviderBaseUrl (object): Base URL for the secondary provider, when its type uses a configurable endpoint (openai-compatible, ollama).
  • secondaryProviderBaseUrl.value (string)
  • secondaryProviderBaseUrl.isDefault (boolean)
  • secondaryProviderApiKeyConfigured (boolean): Whether a secondary provider API key is configured (read-only; the key itself is never returned)
  • providerRequestsPerMin (object): Manual requests-per-minute cap for the primary provider account. 0 means unlimited.
  • providerRequestsPerMin.value (integer)
  • providerRequestsPerMin.isDefault (boolean)
  • providerRequestsPerDay (object): Manual requests-per-day cap for the primary provider account. 0 means unlimited.
  • providerRequestsPerDay.value (integer)
  • providerRequestsPerDay.isDefault (boolean)
  • secondaryProviderRequestsPerMin (object): Manual requests-per-minute cap for the secondary provider account. 0 means unlimited.
  • secondaryProviderRequestsPerMin.value (integer)
  • secondaryProviderRequestsPerMin.isDefault (boolean)
  • secondaryProviderRequestsPerDay (object): Manual requests-per-day cap for the secondary provider account. 0 means unlimited.
  • secondaryProviderRequestsPerDay.value (integer)
  • secondaryProviderRequestsPerDay.isDefault (boolean)
  • providerTokensPerMin (object): Manual tokens-per-minute cap for the primary provider account. 0 means unlimited. Reservation-based, not recorded-usage-based: each dispatch reserves an estimate (prompt tokens plus max_tokens) before the request goes out and reconciles to actual usage when the call finishes, so a single large request cannot cross the cap unseen. The cost is that an over-estimated call holds more of the window than it spends until it completes.
  • providerTokensPerMin.value (integer)
  • providerTokensPerMin.isDefault (boolean)
  • secondaryProviderTokensPerMin (object): Manual tokens-per-minute cap for the secondary provider account. 0 means unlimited. Reservation-based in the same way as providerTokensPerMin: an estimate is reserved at dispatch and reconciled to actual usage on completion.
  • secondaryProviderTokensPerMin.value (integer)
  • secondaryProviderTokensPerMin.isDefault (boolean)
  • providerBEnabled (object): Alias of secondaryProviderEnabled.
  • providerBEnabled.value (boolean)
  • providerBEnabled.isDefault (boolean)
  • providerB (object): Alias of secondaryProvider.
  • providerB.value (string or null)
  • providerB.isDefault (boolean)
  • providerBBaseUrl (object): Alias of secondaryProviderBaseUrl.
  • providerBBaseUrl.value (string)
  • providerBBaseUrl.isDefault (boolean)
  • providerBApiKeyConfigured (boolean): Alias of secondaryProviderApiKeyConfigured (read-only).
  • providerBRequestsPerMin (object): Alias of secondaryProviderRequestsPerMin.
  • providerBRequestsPerMin.value (integer)
  • providerBRequestsPerMin.isDefault (boolean)
  • providerBRequestsPerDay (object): Alias of secondaryProviderRequestsPerDay.
  • providerBRequestsPerDay.value (integer)
  • providerBRequestsPerDay.isDefault (boolean)
  • providerBTokensPerMin (object): Alias of secondaryProviderTokensPerMin.
  • providerBTokensPerMin.value (integer)
  • providerBTokensPerMin.isDefault (boolean)
  • providerATimeoutSeconds (object): Request timeout for Provider A. Null value means the provider-type default. Native providers accept positive finite fractional seconds; chat providers require integer seconds from 10 to 3600.
  • providerATimeoutSeconds.value (number or null)
  • providerATimeoutSeconds.isDefault (boolean)
  • providerAMaxRetries (object): Max retries for Provider A. Null value means the provider-type default.
  • providerAMaxRetries.value (integer or null)
  • providerAMaxRetries.isDefault (boolean)
  • providerBTimeoutSeconds (object): Request timeout for Provider B. Null value means the provider-type default. Native providers accept positive finite fractional seconds; chat providers require integer seconds from 10 to 3600.
  • providerBTimeoutSeconds.value (number or null)
  • providerBTimeoutSeconds.isDefault (boolean)
  • providerBMaxRetries (object): Max retries for Provider B. Null value means the provider-type default.
  • providerBMaxRetries.value (integer or null)
  • providerBMaxRetries.isDefault (boolean)
  • failoverLlmEnabled (object): Whether the shared LLM failover provider (#806) is on.
  • failoverLlmEnabled.value (boolean)
  • failoverLlmEnabled.isDefault (boolean)
  • failoverLlmProvider (object): LLM failover provider type, or null when unset.
  • failoverLlmProvider.value (string or null)
  • failoverLlmProvider.isDefault (boolean)
  • failoverLlmBaseUrl (object): Base URL for the LLM failover provider.
  • failoverLlmBaseUrl.value (string)
  • failoverLlmBaseUrl.isDefault (boolean)
  • failoverLlmApiKeyConfigured (boolean): Whether an LLM failover API key is configured (read-only; the key itself is never returned)
  • failoverLlmTimeoutSeconds (object): Request timeout for the LLM failover provider. Null value means the provider-type default.
  • failoverLlmTimeoutSeconds.value (integer or null)
  • failoverLlmTimeoutSeconds.isDefault (boolean)
  • failoverLlmMaxRetries (object): Max retries for the LLM failover provider. Null value means the provider-type default.
  • failoverLlmMaxRetries.value (integer or null)
  • failoverLlmMaxRetries.isDefault (boolean)
  • failoverLlmDetectionModel (object): Model the LLM failover provider uses for ad detection.
  • failoverLlmDetectionModel.value (string)
  • failoverLlmDetectionModel.isDefault (boolean)
  • failoverLlmReviewModel (object): Model the LLM failover provider uses for review. Blank inherits the detection model.
  • failoverLlmReviewModel.value (string)
  • failoverLlmReviewModel.isDefault (boolean)
  • failoverLlmVerificationModel (object): Model the LLM failover provider uses for verification. Blank inherits the detection model.
  • failoverLlmVerificationModel.value (string)
  • failoverLlmVerificationModel.isDefault (boolean)
  • failoverLlmChaptersModel (object): Model the LLM failover provider uses for chapters. Blank inherits the detection model.
  • failoverLlmChaptersModel.value (string)
  • failoverLlmChaptersModel.isDefault (boolean)
  • failoverWhisperEnabled (object): Whether the transcriber failover provider (#806) is on.
  • failoverWhisperEnabled.value (boolean)
  • failoverWhisperEnabled.isDefault (boolean)
  • failoverWhisperBackend (object): Transcriber failover backend.
  • failoverWhisperBackend.value (string, one of local, openai-api, parakeet): Backend value; parakeet runs NVIDIA Parakeet TDT 0.6B v3 in-process.
  • failoverWhisperBackend.isDefault (boolean)
  • failoverWhisperModel (object): Local model name for the transcriber failover, when its backend is local.
  • failoverWhisperModel.value (string)
  • failoverWhisperModel.isDefault (boolean)
  • failoverWhisperApiBaseUrl (object): Base URL for the transcriber failover API backend.
  • failoverWhisperApiBaseUrl.value (string)
  • failoverWhisperApiBaseUrl.isDefault (boolean)
  • failoverWhisperApiKeyConfigured (boolean): Whether a transcriber failover API key is configured (read-only; the key itself is never returned)
  • failoverWhisperApiModel (object): Model name for the transcriber failover API backend.
  • failoverWhisperApiModel.value (string)
  • failoverWhisperApiModel.isDefault (boolean)
  • failoverWhisperApiTimeoutSeconds (object): Request timeout for the transcriber failover API backend.
  • failoverWhisperApiTimeoutSeconds.value (integer)
  • failoverWhisperApiTimeoutSeconds.isDefault (boolean)
  • failoverWhisperMaxAttempts (object): Failover transcriber upload attempts; null inherits whisperMaxAttempts.
  • failoverWhisperMaxAttempts.value (integer or null)
  • failoverWhisperMaxAttempts.isDefault (boolean)
  • failoverWhisperLanguage (object): Language for the transcriber failover. Empty means same as the active transcriber.
  • failoverWhisperLanguage.value (string)
  • failoverWhisperLanguage.isDefault (boolean)
  • failoverProbeIntervalMinutes (object): Minutes between health probes of a failover target.
  • failoverProbeIntervalMinutes.value (integer)
  • failoverProbeIntervalMinutes.isDefault (boolean)
  • failoverRecoveryProbes (object): Consecutive healthy probes needed before an automatic failover recovers.
  • failoverRecoveryProbes.value (integer)
  • failoverRecoveryProbes.isDefault (boolean)
  • whisperMaxAttempts (object): Max attempts for a single whisper API transcription request before giving up.
  • whisperMaxAttempts.value (integer)
  • whisperMaxAttempts.isDefault (boolean)
  • podcastSearchReady (boolean): Whether the resolved podcast search provider (podcastSearchProvider) can run right now: iTunes always is; PodcastIndex needs both API credentials saved (read-only).
  • openrouterBaseUrl (string): OpenRouter API base URL (read-only)
  • retentionDays (integer): Days to retain processed audio files. 0 = disabled.
  • stageTunables (map of object): Per-stage LLM tunables (temperature, max_tokens, reasoning), chapter density, detection window geometry and the global Ollama context window, keyed by the same names as the PUT /settings/ad-detection body. Each field carries the resolved value (env > DB > default), an isDefault flag, and the name of any environment variable that is overriding the stored value.
  • stageTunableDefaults (object): Built-in defaults for each stage tunable, used as fallback when a provider rejects a user value.
  • defaults (object)
  • defaults.systemPrompt (string)
  • defaults.verificationPrompt (string)
  • defaults.chapterPrompt (string)
  • defaults.patternCleanupPrompt (string)
  • defaults.systemPromptOverride (string): Per-pass override for the first pass; empty clears it.
  • defaults.verificationPromptOverride (string): Per-pass override for the verification pass; empty clears it.
  • defaults.reviewPromptOverride (string): Per-pass override for the reviewer pass; empty clears it.
  • defaults.resurrectPromptOverride (string): Per-pass override for the resurrect pass; empty clears it.
  • defaults.claudeModel (string or null)
  • defaults.verificationModel (string or null)
  • defaults.chaptersModel (string or null)
  • defaults.whisperModel (string)
  • defaults.whisperBackend (string)
  • defaults.whisperApiBaseUrl (string)
  • defaults.whisperApiModel (string)
  • defaults.whisperLanguage (string)
  • defaults.whisperComputeType (string, one of auto, float16, int8_float16, int8, float32)
  • defaults.positionalPriorEnabled (boolean)
  • defaults.spliceVetoEnabled (boolean)
  • defaults.vadGapDetectionEnabled (boolean)
  • defaults.vadGapStartMinSeconds (number (float))
  • defaults.vadGapMidMinSeconds (number (float))
  • defaults.vadGapTailMinSeconds (number (float))
  • defaults.audioReplacementSoundEnabled (boolean): Default true.
  • defaults.audioMp3StreamCopyEnabled (boolean): Default false.
  • defaults.audioBitrate (string, one of 64k, 96k, 128k, 192k, 256k)
  • defaults.audioEncoderCompressionLevel (string, one of default, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • defaults.skipFlacCompression (boolean)
  • defaults.adDetectionParallelWindows (integer)
  • defaults.adReviewerParallelAds (integer)
  • defaults.maxArtworkBytes (integer)
  • defaults.maxRssBytes (integer)
  • defaults.maxAudioDownloadMb (integer)
  • defaults.localUploadMaxMb (integer)
  • defaults.providerRequestsPerMin (integer)
  • defaults.providerRequestsPerDay (integer)
  • defaults.secondaryProviderRequestsPerMin (integer)
  • defaults.secondaryProviderRequestsPerDay (integer)
  • defaults.providerTokensPerMin (integer)
  • defaults.secondaryProviderTokensPerMin (integer)
  • defaults.providerATimeoutSeconds (number or null)
  • defaults.providerAMaxRetries (integer or null)
  • defaults.providerBTimeoutSeconds (number or null)
  • defaults.providerBMaxRetries (integer or null)
  • defaults.failoverLlmEnabled (boolean)
  • defaults.failoverLlmProvider (string or null)
  • defaults.failoverLlmBaseUrl (string)
  • defaults.failoverLlmTimeoutSeconds (integer or null)
  • defaults.failoverLlmMaxRetries (integer or null)
  • defaults.failoverLlmDetectionModel (string)
  • defaults.failoverLlmReviewModel (string)
  • defaults.failoverLlmVerificationModel (string)
  • defaults.failoverLlmChaptersModel (string)
  • defaults.failoverWhisperEnabled (boolean)
  • defaults.failoverWhisperBackend (string, one of local, openai-api, parakeet): Failover transcriber backend; parakeet runs NVIDIA Parakeet TDT 0.6B v3 in-process.
  • defaults.failoverWhisperModel (string)
  • defaults.failoverWhisperApiBaseUrl (string)
  • defaults.failoverWhisperApiModel (string)
  • defaults.failoverWhisperApiTimeoutSeconds (integer)
  • defaults.failoverWhisperMaxAttempts (integer or null)
  • defaults.failoverWhisperLanguage (string)
  • defaults.failoverProbeIntervalMinutes (integer)
  • defaults.failoverRecoveryProbes (integer)
  • defaults.whisperMaxAttempts (integer)
  • defaults.autoProcessEnabled (boolean)
  • defaults.autoProcessMaxAgeHours (integer)
  • defaults.maxFeedEpisodes (integer)
  • defaults.onlyExposeProcessedDefault (boolean)
  • defaults.feedItunesBlock (boolean)
  • defaults.requireManualApprovalDefault (boolean)
  • defaults.whatsNewOnUpgrade (boolean)
  • defaults.detectShowSegments (boolean)
  • defaults.seedSponsorsDetection (boolean)
  • defaults.seedSponsorsVerification (boolean)
  • defaults.seedSponsorsReviewer (boolean)
  • defaults.seedSponsorsResurrect (boolean)
  • defaults.textRecurrenceHints (boolean)
  • defaults.adAddressingMode (string, one of timestamps, segment_ids, random)
  • defaults.processNewEpisodesFirst (boolean)
  • defaults.rssRefreshIntervalMinutes (integer)
  • defaults.podpingEnabled (boolean)
  • defaults.omitTemperature (boolean)
  • defaults.llmJsonSchemaEnabled (boolean)
  • defaults.segmentCategoryActions (map of string, one of remove, beep, keep, mark)
  • defaults.communitySyncCategories (array of string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap)
  • defaults.artworkWatermarkEnabled (boolean)
  • defaults.artworkBadgePosition (string, one of bottom-right, bottom-left, top-right, top-left)
  • defaults.lowAdYieldAction (string, one of nothing, redetect, reprocess, full)
  • defaults.episodeLogRetentionDays (integer)
  • defaults.episodeLogLevel (string, one of debug, info)
  • defaults.downloadUserAgent (string)
  • defaults.feedUserAgent (string)
  • defaults.logDownloadQuery (boolean)
  • defaults.feedAuthEnabled (boolean)
  • defaults.downloadHistoryEnabled (boolean)
  • defaults.downloadGeoLookupEnabled (boolean)
  • defaults.downloadHistoryRetentionDays (integer)
  • defaults.minCutConfidence (number (float))
  • defaults.minContentBetweenAdsSeconds (number (float))
  • defaults.adDetectionExcludeStartSeconds (number (float)): Seconds from the start of an episode during which ad markers are ignored, so an intro cue is not mistaken for an ad break. 0 disables it. Feeds inherit it or set adDetectionExcludeStartOverride.
  • defaults.maxAdDurationSeconds (number (float))
  • defaults.maxAdDurationConfirmedSeconds (number (float))
  • defaults.maxLlmWindowAdSeconds (number (float))
  • defaults.llmProvider (string)
  • defaults.systemoneBaseUrl (string): Default ``.
  • defaults.openaiBaseUrl (string)
  • defaults.pricingSourceMode (string, one of auto, litellm, free)
  • defaults.notificationTimezone (string): IANA zone for timestamp_local in webhook/email payloads (default UTC). Get/set via /settings/notifications/timezone.
  • defaults.openrouterBaseUrl (string)
  • status (string, one of running)
  • version (string)
  • feeds (object)
  • feeds.total (integer)
  • episodes (object)
  • episodes.total (integer)
  • episodes.byStatus (map of integer)
  • storage (object)
  • storage.usedMb (number)
  • storage.fileCount (integer)
  • settings (object)
  • settings.retentionPeriodMinutes (integer)
  • settings.whisperModel (string): Effective transcription model from settings (local model, or the remote API model when the backend is openai-api)
  • settings.whisperDevice (string): Local compute device, or “remote” when transcription runs on a remote transcription API
  • settings.whisperBackend (string): Transcription backend in use (local, openai-api or parakeet; parakeet runs NVIDIA Parakeet TDT 0.6B v3 in-process)
  • settings.whisperApiHost (string or null): scheme://host of the remote transcription endpoint, or null when transcription is local
  • settings.baseUrl (string)
  • stats (object)
  • stats.totalTimeSaved (number): Total seconds of ad time removed across all episodes
  • stats.totalInputTokens (integer): Cumulative LLM input tokens consumed
  • stats.totalOutputTokens (integer): Cumulative LLM output tokens consumed
  • stats.totalLlmCost (number): Estimated cumulative LLM cost in USD
  • feedRefresh (object): Scheduled-refresh health. Informational only: it never gates readiness, and /health ignores it. A shared network outage degrades feed freshness, not the process, so the aggregate is reported without naming any feed.
  • feedRefresh.lastSuccessfulRefreshAt (string or null (date-time))
  • feedRefresh.outageDegraded (boolean): True while a refresh pass is treated as a shared outage rather than per-feed breakage, which happens when a large enough share of a batch fails together. Per-feed failure counting is suspended for that pass so healthy feeds are not marked broken.
  • feedRefresh.outageAffectedCount (integer): Feeds that failed together in the pass that opened the outage.
  • feedRefresh.nextRetryAt (string or null (date-time)): When the jittered early retry is due. Null once the outage clears.
  • podping (object): Podping listener health. Informational only, the same as feedRefresh: scheduled RSS polling remains the fallback, so an outage here delays notifications rather than stopping discovery. While the listener is enabled, every configured node is checked at startup and every five minutes. Manual checks also work while it is disabled and do not change the active listener node. GET /podping/hosts reports the same node data for the Podping page.
  • podping.listenerEnabled (boolean)
  • podping.allNodesDown (boolean): True only while every configured Hive RPC node is unavailable to the enabled live listener. Any live listener success clears it; a manual check does not change this field.
  • podping.degradedSince (string or null (date-time))
  • podping.check (PodpingNodeCheck)
  • podping.nodes (array of object): One entry per configured node, in the configured order.
  • podping.nodes[].node (string)
  • podping.nodes[].selected (boolean): Historical last node to complete a successful RPC call.
  • podping.nodes[].active (boolean): True while this node has the live listener connection.
  • podping.nodes[].consecutiveFailures (integer): Failure streak, which survives a restart rather than resetting.
  • podping.nodes[].lastSuccessAt (string or null (date-time)): Last successful RPC response, shown as Last seen; null before success.
  • podping.nodes[].nextRetryAt (string or null (date-time))
  • podping.nodes[].lastFailureReason (string or null)
  • podping.nodes[].httpStatus (integer or null): Latest HTTP status, including 200 with invalid_response; null if none arrived.
  • podping.nodes[].outcome (string or null, one of healthy, http_error, invalid_response, unreachable, null): Latest RPC outcome; null before the first check.
  • transcriber (object): Health of the configured transcription backend. Which shape comes back depends on that backend, because the local reading says nothing when transcription runs on a remote API. Informational only, and never a readiness gate.
  • transcriber.backend (string, one of local, openai-api, parakeet): The configured backend, which is what decides the rest of this object; parakeet runs NVIDIA Parakeet TDT 0.6B v3 in-process.
  • transcriber.available (boolean): On the local backend, false after a GPU-memory exhaustion used up every batch-size retry, so a transcriber failing episode after episode is visible instead of silent. On the API backend, false when no base URL is configured, and otherwise the last cached probe result.
  • transcriber.reason (string): Local backend only, and present only when the faster-whisper or ctranslate2 package is missing. Says what to install or which backend to switch to.
  • transcriber.device (string, one of cpu, cuda): Local backend only. The effective device, not the raw setting.
  • transcriber.lastOutcome (object or null): Local backend only. The most recent local transcription outcome, shared across workers so any worker reports the same one. Null when nothing has been transcribed yet.
  • transcriber.probed (boolean): API backend only. False when no probe result is cached; this endpoint never fires an outbound request of its own, so a never-probed endpoint reads as available.
  • transcriber.instanceCount (integer): API backend only, and present only when probed is true.
  • failover (object): Same shapes as GET /failover, minus events (#806).
  • failover.targets (map of FailoverTargetState): Keyed by target name (llm-a, llm-b, transcriber).
  • failover.probes (map of FailoverProbe): Keyed by probe name (llm-a, llm-b, llm-failover, transcriber, transcriber-failover).
  • security (object)
  • security.cryptoReady (boolean)
  • security.plaintextSecretsCount (integer)
  • checkId (string or null, required)
  • status (string, one of idle, pending, running, completed, error, required)
  • requestedAt (string or null (date-time), required)
  • startedAt (string or null (date-time), required)
  • completedAt (string or null (date-time), required)
  • healthyNodes (integer or null)
  • totalNodes (integer or null)
  • message (string or null)
  • version (string)
  • releaseDate (string or null (date))
  • url (string)
  • notes (string): Release notes body, truncated to 2000 characters
  • episodeId (string, required): Episode identifier
  • slug (string, required): Podcast feed slug
  • title (string, required): Episode title
  • podcast (string, required): Podcast name
  • startedAt (string or null (date-time), required): When processing started (if available)
  • stage (string or null, required): Active pipeline label, “queued” for a waiting episode, or null when live stage detail is unavailable.
  • queuedAt (string or null (date-time)): When the episode was added to the queue (queued entries only)
  • queuePosition (integer): 1-based offset-aware position in the pending queue (queued entries only)
  • queueTotal (integer, required): Full waiting count across all pages, excluding active jobs.
  • priority (integer or null): Dequeue priority of the queue row; null for a display-queue entry with no auto-process queue row (its reorder control is disabled)
  • admission (QueueAdmission)

Why a waiting job is or is not starting (queued entries only). Scored from the same resolved phase set admission gates on, so a phase this run will not execute (a feed that skips its second pass, chapters turned off) never appears as the blocker.

  • blocked (boolean): Whether this job is currently refused admission
  • phase (string or null, one of detection, review, verification, chapters, null): Pipeline phase whose account is holding the job, or null when the block is not phase-specific (processing paused, routes unresolved)
  • slot (string or null, one of primary, secondary, null): Credential slot of the blocking account
  • reason (string or null, one of manual_rate_limit, provider_rate_limit, provider_account_changed, processing_paused, null): manual_rate_limit is a MinusPod-configured RPM/RPD/TPM cap; provider_rate_limit is a provider 429 hold; provider_account_changed means the run’s frozen routes name an account the operator has since replaced; processing_paused is the global admission pause
  • resumesAt (string or null (date-time)): When the hold releases, or null when there is no timed reset (an account change clears on the next attempt, not on a clock)
  • id (integer): Pattern ID
  • scope (string, one of global, network, podcast): Pattern scope level
  • network_id (string or null): Network ID for network-scoped patterns
  • podcast_slug (string or null): Podcast slug for podcast-scoped patterns
  • text_template (string): Text pattern template for matching
  • sponsor (string or null): Sponsor name associated with this pattern
  • is_active (boolean): Whether the pattern is currently active
  • can_split (boolean): Whether the active pattern has at least two usable text pieces for splitting
  • disabled_reason (string or null): Reason for disabling the pattern
  • disabled_at (string or null (date-time)): When the pattern was deactivated; null while it is active.
  • confirmation_count (integer): Number of times pattern was confirmed correct
  • false_positive_count (integer): Number of times pattern was marked as false positive
  • avg_duration (number or null): Running average of observed ad duration in seconds. Null for patterns that have not yet been matched with duration data.
  • duration_samples (integer): Number of duration observations used to compute avg_duration
  • last_matched_at (string or null (date-time)): Last time this pattern matched an ad
  • created_at (string (date-time))
  • updated_at (string (date-time))
  • category (string, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap): What kind of content this pattern matches (issue #565). Absent when the pattern is unclassified (a legacy row or one synced without a category); the UI shows such patterns as Uncategorized. Community-shared patterns carry their category through sync; a per-install community_sync_categories setting controls which categories are accepted from community sync.
  • trust (string, one of active, unproven, stale): Computed staleness-based trust tier (not stored). active: matched locally within the last 90 days. stale: a community pattern with no local match in the last 90 days whose newest community-confirmation or creation timestamp is also older than 365 days. unproven: no recent local match, but not stale; includes all local (non-community) patterns, which are never ‘stale’.
  • id (string): Network identifier (e.g., twit, relay_fm)
  • name (string): Human-readable network name
  • type (string, one of confirm, reject, adjust, create, split, recategorize, required): - confirm: Mark detection as correct (creates/updates pattern). Optionally pass adjusted_start/adjusted_end to approve a trimmed sub-span of a held marker (e.g. the reviewer’s proposed trim); the marker’s boundaries move to the trimmed span before approval and only the ad portion is cut on recut. - reject: Mark as false positive (stores text for cross-episode exclusion) - adjust: Correct boundaries (also creates pattern from adjusted segment) - create: Mark a brand-new ad the detector missed (top-level start/end/sponsor/text_template, no original_ad) - split: Replace one marker with N single-sponsor markers (see the endpoint description) - recategorize: Set this marker’s segment category, which decides whether the span is cut, beeped, or left in. Scoped to this episode’s marker; a linked pattern keeps its own category. The only type accepted on a marker whose action resolved to keep, since it is how that verdict is changed.
  • original_ad (object): Existing marker to correct, matched by its start/end within tolerance. Required for every type except create.
  • original_ad.start (number)
  • original_ad.end (number)
  • original_ad.pattern_id (integer)
  • sponsor (string): Sponsor name to associate (for confirm/adjust/create)
  • category (string or null, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap, null): create type only. Segment category stamped on both the manual marker and the pattern(s) created from it; each feed’s segment actions decide what happens to future matches. Omit or send null to leave the marker and pattern uncategorized (resolves as sponsor).
  • adjusted_start (number): Corrected start time in seconds (required for adjust; optional for confirm as a trimmed approval, must lie within the original span and both bounds must be supplied together)
  • adjusted_end (number): Corrected end time in seconds (required for adjust; optional for confirm as a trimmed approval, must lie within the original span and both bounds must be supplied together)
  • split_points (array of number): split type only, divider times strictly inside the span
  • pieces (array of object): split type only, optional per-piece sponsor overrides
  • pieces[].sponsor (string or null)
  • currentJob (object or null): The episode being processed, or null when nothing is running
  • currentJob.slug (string)
  • currentJob.episodeId (string)
  • currentJob.title (string)
  • currentJob.podcastName (string)
  • currentJob.stage (string): Current processing stage (e.g. pass1:transcribing)
  • currentJob.progress (number): Progress percentage (0-100)
  • currentJob.startedAt (number): Unix timestamp the job started
  • currentJob.elapsed (number): Seconds since the job started
  • jobs (array of object): Every episode currently processing, oldest first. currentJob is jobs[0].
  • jobs[].slug (string)
  • jobs[].episodeId (string)
  • jobs[].title (string)
  • jobs[].podcastName (string)
  • jobs[].stage (string): Current processing stage (e.g. pass1:transcribing)
  • jobs[].progress (number): Progress percentage (0-100)
  • jobs[].startedAt (number): Unix timestamp the job started
  • jobs[].elapsed (number): Seconds since the job started
  • whisper (WhisperPoolSnapshot)
  • queueLength (integer): Number of episodes waiting to be processed
  • queuedEpisodes (array of object)
  • queuedEpisodes[].slug (string)
  • queuedEpisodes[].episodeId (string)
  • queuedEpisodes[].title (string)
  • queuedEpisodes[].podcastName (string)
  • queuedEpisodes[].queuedAt (number)
  • feedRefreshes (array of object)
  • feedRefreshes[].slug (string)
  • feedRefreshes[].podcastName (string)
  • feedRefreshes[].newEpisodes (integer)
  • feedRefreshes[].startedAt (number)
  • hold (QueueHold)
  • lastUpdated (number): Unix timestamp of the last status change
  • failover (object): Failover state (#806), read through the same 5-second cache as GET /failover; never probes on this read path.
  • failover.active (array of string, one of llm-a, llm-b, transcriber): Target names currently running on their failover configuration.
  • failover.targets (map of object): Keyed by target name (llm-a, llm-b, transcriber).

Why the queue is not moving. Reports what the maintenance tick last observed; reading it never probes a service.

  • queuePaused (boolean): True only while a rate-limit hold is stopping new claims. An offline wait parks specific episodes and leaves the rest of the queue running, so it never sets this.
  • holdUntil (string or null (date-time)): The provider’s own rate-limit reset time while the pause is active, or null
  • holdSince (string or null (date-time)): When the current pause began, or null when the queue is not paused
  • offlineHeld (integer): Every episode deferred on a service other than the rate-limit hold, including any service not broken out in offlineServices.
  • offlineServices (array of object): Per-service breakdown of offline-queue waits
  • offlineServices[].service (string, one of llm, whisper, sponsorblock): sponsorblock counts YouTube episodes waiting on SponsorBlock, not offline-queue deferrals.
  • offlineServices[].held (integer)
  • offlineServices[].reachable (boolean or null): Verdict of the last probe. Null until the tick has probed once, meaning “not checked yet” rather than “up”.
  • offlineServices[].checkedAt (string or null (date-time))

Bounded admission state for remote Whisper requests, as read by this process’s pool.

  • enabled (boolean)
  • backend (string)
  • active (boolean): enabled and backend is openai-api
  • inactiveReason (string or null, one of disabled, local_backend, null)
  • capacity (integer)
  • inFlight (integer)
  • transcribingEpisodes (integer)
  • maxEpisodes (object)
  • maxEpisodes.configured (integer)
  • maxEpisodes.effective (integer)
  • leader (boolean): Whether this process is the background leader that runs transcriptions. inFlight/transcribingEpisodes are only meaningful when true; other workers always report 0.
  • id (integer): History entry ID
  • podcast_id (integer): Podcast ID
  • podcast_slug (string): Podcast slug
  • podcast_title (string): Podcast title
  • episode_id (string): Episode ID
  • episode_title (string): Episode title
  • processed_at (string (date-time)): When processing completed
  • processing_duration_seconds (number or null): Processing duration in seconds
  • status (string, one of completed, failed): Processing result status
  • ads_detected (integer): Number of ads detected
  • error_message (string or null): Error message if processing failed
  • reprocess_number (integer or null): Reprocess number (null for first processing)
  • inputTokens (integer): LLM input tokens used for this processing run
  • outputTokens (integer): LLM output tokens used for this processing run
  • llmCost (number): Estimated LLM cost in USD for this processing run
  • downloadedDuration (number or null): Duration of the downloaded copy this run processed, in seconds. Null for runs recorded before 2.53.0.
  • appVersion (string or null): MinusPod version that produced this run. Null for runs recorded before 2.78.4.
  • mode (string or null): Processing mode. Chapters-only regeneration uses chapters; older runs may omit it.
  • id (integer): Sponsor ID
  • name (string): Canonical sponsor name
  • aliases (array of string): Alternative names for this sponsor
  • category (string or null): Sponsor category
  • segment_category (string or null, one of sponsor, cross_promo, self_promo, interaction, intro, outro, recap, null): Segment category every read naming this sponsor is filed under, in detection, the pass-1 prompt hint, and learned patterns. Null leaves the detector’s own category in place.
  • common_ctas (array of string): Common calls to action associated with this sponsor
  • tags (array of string): Community tags applied to this sponsor
  • is_active (boolean): Whether the sponsor is active
  • pattern_count (integer): Number of active ad patterns linked to this sponsor
  • last_matched_at (string or null (date-time)): Most recent time a linked pattern matched, or null if never
  • created_at (string (date-time))
  • id (integer): Normalization rule ID
  • terms (string): Regex pattern to match (legacy alias - pattern - accepted on write)
  • canonical (string): Canonical replacement string (legacy alias - replacement - accepted on write)
  • category (string, one of sponsor, url, number, phrase): Normalization category
  • is_active (boolean): Whether the rule is active
  • created_at (string (date-time))
  • slug (string)
  • title (string)
  • titleSnippet (string or null): The title with its matched words highlighted; null when the title did not match
  • snippet (string or null): Highlighted match context from the description; null when nothing in it matched
  • feedSlug (string)
  • feedTitle (string)
  • episodeId (string)
  • title (string)
  • status (string)
  • publishDate (string or null)
  • titleSnippet (string or null): The title with its matched words highlighted; null when the title did not match
  • snippet (string or null): Highlighted match context from the description; null when nothing in it matched
  • feedSlug (string)
  • episodeId (string)
  • title (string)
  • snippet (string): Highlighted transcript match context
  • timestamp (number or null): Always null; the search index has no offset back into the transcript timing

Advanced-page-only group; not shown in the Dashboard box or palette.

  • id (string)
  • scope (string): Pattern scope (podcast slug, or “global”)
  • sponsor (string)
  • snippet (string or null)

Advanced-page-only group; not shown in the Dashboard box or palette.

  • id (string)
  • name (string)
  • snippet (string or null)

Webhook configuration. The secret field is never returned in responses.

  • id (string): Unique webhook identifier
  • url (string (uri)): URL that receives webhook POST requests
  • events (array of string): Event types this webhook is subscribed to
  • enabled (boolean): Whether the webhook is active
  • payloadTemplate (string or null): Custom payload template, or null for default format
  • contentType (string): Content type for webhook delivery
  • timezone (string): IANA zone name (e.g. ‘America/New_York’), or ‘UTC’
  • enabled (boolean)
  • events (array of string, one of Episode Processed, Episode Awaiting Approval, Episode Pending Review, Episode Failed, Auth Failure, Limit Exceeded, Rate Limit Structural, Feed Refresh Failed, Update Available, Cue Template Quiet, Queue Held, Queue Resumed, Service Offline, Service Reachable, Failover Triggered, Failover Cancelled)
  • smtpHost (string)
  • smtpPort (integer)
  • smtpSecurity (string, one of none, starttls, ssl)
  • smtpUsername (string)
  • smtpPasswordConfigured (boolean): Whether an SMTP password is stored. The password itself is never returned.
  • fromAddress (string)
  • recipients (string): Comma-separated recipient addresses

Partial update; omitted fields keep their stored values.

  • enabled (boolean)
  • events (array of string)
  • smtpHost (string)
  • smtpPort (integer)
  • smtpSecurity (string, one of none, starttls, ssl)
  • smtpUsername (string)
  • smtpPassword (string): Write-only. Empty string clears the stored password.
  • fromAddress (string)
  • recipients (string)
  • success (boolean, required)
  • status (string, one of refreshed, coalesced, not_modified, fetch_failed, parse_failed, internal_error, required)
  • new_episodes (integer, required)
  • queued_episodes (integer, required)
  • error (string or null, required)
  • message (string, required)
  • feedCount (integer, required)
  • success (boolean, required)
  • succeeded (integer, required)
  • failed (integer, required)
  • outcomes (map of RefreshOutcome, required)
  • id (string, required)
  • label (string, required)
  • created_at (string (date-time), required)
  • last_used_at (string or null (date-time), required)
  • revoked_at (string or null (date-time), required)
  • id (integer, required)
  • episodeId (string, required)
  • episodeTitle (string or null)
  • podcastSlug (string, required)
  • podcastTitle (string, required)
  • clientIp (string, required)
  • userAgent (string, required)
  • subscriberLabel (string or null): Subscriber key label; null when the global key or no key was used.
  • subscriberKeyId (string or null): Subscriber key id; null when the global key or no key was used.
  • subscriberRevoked (boolean): True when the subscriber key has been revoked.
  • userAgentBlocked (boolean): True when the user agent matches the JIT blocked user agents list.
  • lastRequestLine (string or null): Method and path of the most recent merged request, with any key query value replaced by [redacted]; null for rows recorded before capture existed.
  • lastRequestHeaders (map of string): Allowlisted headers of the most recent merged request (Range, Accept, Accept-Encoding, Referer, If-Range, If-None-Match); null when none were sent.
  • country (string or null)
  • region (string or null)
  • city (string or null)
  • geoStatus (string or null, one of ok, private, failed, unresolvable, null): null when no lookup has been stored for the IP. failed is retried after 24 hours; unresolvable (a permanent provider answer) is not retried.
  • firstSeenAt (string, required)
  • lastSeenAt (string, required)
  • requestCount (integer, required)
  • id (string, required)
  • label (string, required)
  • createdAt (string (date-time), required)
  • lastUsedAt (string or null (date-time), required)
  • revokedAt (string or null (date-time), required)
  • feedSlug (string, required)
  • feedTitle (string, required)
  • id (string, required)
  • token (string, required): Bearer credential returned only at creation.
  • label (string, required)
  • created_at (string (date-time), required)
  • feedUrl (string (uri), required)
  • localPerUsd (string, required)
  • source (string, required)
  • sourceDate (string or null (date), required)
  • fetchedAt (string or null (date-time), required)
  • provider (string, required)
  • spentMicrousd (integer, required)
  • reservedMicrousd (integer, required)
  • activeReservations (integer, required)
  • enabled (boolean, required)
  • dailyLimitMicrousd (integer, required)
  • maxReservations (integer, required)
  • unknownCost (string, one of deny, allow, reserve, required)
  • unknownReserveMicrousd (integer, required)
  • displayCurrency (string, required)
  • dailyLimit (string, required)
  • unknownReserve (string, required)
  • fxRate (ProviderBudgetFxRate, required)
  • status (ProviderBudgetStatus, required)
  • enabled (boolean, required)
  • maxReservations (integer, required)
  • unknownCost (string, one of deny, allow, reserve, required)
  • displayCurrency (string): When present, dailyLimit and unknownReserve are required decimal strings.
  • dailyLimit (string)
  • unknownReserve (string)
  • dailyLimitMicrousd (integer): Required when displayCurrency is absent.
  • unknownReserveMicrousd (integer): Required when displayCurrency is absent.
  • code (string, required)
  • name (string, required)
  • currency (string, required)
  • localPerUsd (string, required)
  • source (string, required)
  • sourceDate (string or null (date), required)
  • dailyLimit (string, required)
  • unknownReserve (string, required)
  • error (string)
  • status (integer)
  • maxUploadMb (integer): The configured limit in MB.
  • error (string)
  • status (integer)
  • details (object or null)