Skip to content
Audivopaid beta
The podcast transcript API

Podcast transcripts.
Ready to build on.

Turn a public podcast episode into structured, timed text. One API. Five formats. A clear price before you spend a credit.

120 free credits at signup No card required

episode → transcriptREST API
request.sh
curl 'https://k8mfogcvz4.execute-api.us-east-1.amazonaws.com/prod/v1/reads/job_2c1d4e9fA7bQ3xzM?format=srt' \
  -H 'Authorization: Bearer hk_live_...'
200 OKapplication/x-subrip
transcript.srt
1
00:00:00,000 --> 00:00:01,420
Welcome back to the show.

2
00:00:01,420 --> 00:00:05,180
This week, how an RSS feed becomes a
searchable transcript.
Real output shape. Illustrative episode.

Bring an episodeApple Podcasts · RSS + GUID · Episode ID

Choose your outputJSON · Text · SRT · VTT · Markdown

Keep buildingPaid reads are free to fetch again

01 / The workflow

Three calls. Then it’s your data.

Quote, confirm, read. A small API surface that fits the way you already build.

Know the cost before you commit.

Select your episodes and get an itemized quote. Cached transcripts cost one credit. New transcripts are estimated from the feed’s duration. Unpriceable episodes come back with a reason.

Nothing is reserved or charged.

RequestPOST /v1/quotes
curl -X POST https://k8mfogcvz4.execute-api.us-east-1.amazonaws.com/prod/v1/quotes \
  -H 'Authorization: Bearer hk_live_...' \
  -H 'Content-Type: application/json' \
  -d '{
  "shows": [
    {
      "feed_url": "https://feeds.example.com/the-interval.xml",
      "title": "The Interval"
    },
    {
      "feed_url": "https://feeds.example.com/field-notes.xml",
      "title": "Field Notes"
    }
  ],
  "episodes_per_show": 2
}'
Response200 · application/json
{
  "quote_id": "qte_9k2fA7bQ3xzM1LpN",
  "source": "shows",
  "episodes_per_show": 2,
  "entries": [
    {
      "episode_id": "ep_rwg4do2imnjyhaj7",
      "show_id": "sh_k4n7qzvw2mtxyabc",
      "feed_url": "https://feeds.example.com/the-interval.xml",
      "guid": "the-interval-2026-09-05",
      "show_title": "The Interval",
      "episode_title": "What we got wrong about batteries",
      "published_at": "2026-09-05T09:00:00Z",
      "is_cached": true,
      "estimated_credits": 1,
      "quote_ceiling_credits": 1,
      "quote_basis": "feed_metadata",
      "declared_duration_seconds": 3600
    },
    {
      "episode_id": "ep_3iicyxg6ymbv75gy",
      "show_id": "sh_k4n7qzvw2mtxyabc",
      "feed_url": "https://feeds.example.com/the-interval.xml",
      "guid": "the-interval-2026-09-02",
      "show_title": "The Interval",
      "episode_title": "The long tail of firmware updates",
      "published_at": "2026-09-02T09:00:00Z",
      "is_cached": false,
      "estimated_credits": 60,
      "quote_ceiling_credits": 75,
      "quote_basis": "feed_metadata",
      "declared_duration_seconds": 3600
    },
    {
      "episode_id": "ep_uy4pqvjsmeyrhavz",
      "show_id": "sh_x5z7grcs3p4y5h62",
      "feed_url": "https://feeds.example.com/field-notes.xml",
      "guid": "field-notes-2026-09-04",
      "show_title": "Field Notes",
      "episode_title": "Recording in the rain",
      "published_at": "2026-09-04T09:00:00Z",
      "is_cached": false,
      "estimated_credits": 45,
      "quote_ceiling_credits": 57,
      "quote_basis": "feed_metadata",
      "declared_duration_seconds": 2700
    }
  ],
  "excluded": [
    {
      "feed_url": "https://feeds.example.com/field-notes.xml",
      "guid": "field-notes-2026-08-28",
      "title": "Field Notes — Twelve minutes of wind",
      "reason": "no_declared_duration",
      "detail": "the feed declares no <itunes:duration>, so there is nothing to price from"
    }
  ],
  "clamps": [],
  "cached_members": 1,
  "uncached_members": 2,
  "total_ceiling_credits": 133,
  "balance_credits": 240,
  "reserved_credits": 0,
  "remaining_open_jobs": 10,
  "expires_at": "2026-09-08T09:15:00Z",
  "created_at": "2026-09-08T09:00:00Z"
}

Worked example: two shows, two recent episodes each. One cached, two new, one excluded because its duration is unknown. All sample shows are illustrative.

02 / Made for your stack

One transcript.
Every way you need it.

Choose the format when you read, not when you submit. Every output comes from the same canonical transcript.

  • Build with structured dataJSON with timings and provenance.
  • Put words on the timelineSRT and VTT for subtitles and players.
  • Feed your next ideaText and Markdown for your own tools.
?format=jsonapplication/json
{
  "format": "json",
  "is_cached": true,
  "credits_charged": 0,
  "transcript": {
    "episode_id": "ep_rwg4do2imnjyhaj7",
    "show_id": "sh_k4n7qzvw2mtxyabc",
    "language": "en",
    "duration_sec": 3600,
    "source": "qwen3-asr",
    "source_revision": "sha256:8f14e45fceea167a5a36dedd4bea2543deca1c7c8b3c7e2b",
    "model_version": "qwen3-asr-1.7b",
    "pipeline_version": "2026.08-vad4-fw1.2",
    "timing_precision": "word",
    "diarized": false,
    "warnings": [],
    "segments": [
      {
        "id": 0,
        "start": 0,
        "end": 1.42,
        "speaker": null,
        "text": "Welcome back to the show.",
        "words": [
          { "w": "Welcome", "s": 0, "e": 0.31 },
          { "w": "back", "s": 0.31, "e": 0.62 },
          { "w": "to", "s": 0.62, "e": 0.74 },
          { "w": "the", "s": 0.74, "e": 0.86 },
          { "w": "show.", "s": 0.86, "e": 1.28 }
        ]
      },
      {
        "id": 1,
        "start": 1.42,
        "end": 5.18,
        "speaker": null,
        "text": "This week, how an RSS feed becomes a searchable transcript.",
        "words": [
          { "w": "This", "s": 1.42, "e": 1.63 },
          { "w": "week,", "s": 1.63, "e": 1.95 },
          { "w": "how", "s": 2.18, "e": 2.36 },
          { "w": "an", "s": 2.36, "e": 2.48 },
          { "w": "RSS", "s": 2.48, "e": 2.94 },
          { "w": "feed", "s": 2.94, "e": 3.26 },
          { "w": "becomes", "s": 3.26, "e": 3.71 },
          { "w": "a", "s": 3.71, "e": 3.8 },
          { "w": "searchable", "s": 3.8, "e": 4.42 },
          { "w": "transcript.", "s": 4.42, "e": 5.06 }
        ]
      }
    ],
    "created_at": "2026-09-08T09:01:04Z"
  }
}

03 / Simple economics

Start free. Scale with your ideas.

A credit is one audio minute. A 60-minute episode costs 60 credits to transcribe. Once a transcript exists, reading it costs one credit — however long the episode.

Your signup credits are a one-time grant. Paid plans include a monthly allowance. Credits are spent oldest grant first. The ceilings above are provisional, so the API is the authority on your own: GET /v1/limits reports the row your key is held to, and X-RateLimit-Limit comes back on every response to a resolved key.

04 / The fine print, up front

A focused API.
Clear boundaries.

Know what fits before you wire it up. Here’s the scope of the paid beta.

An Apple Podcasts link, an RSS feed URL and episode GUID, or a canonical episode id. There are no uploads and no arbitrary audio URLs — if it is not a public podcast episode, Audivo has nothing to resolve.

Your next build starts here

Less plumbing. More building.

Create an account, get an API key, and put your first transcript to work.

Start with 120 free credits

One-time signup grant. No card required.