Free API

Transcription API

Yes, you can transcribe an hour-long podcast for free. POST a media URL, get back text, SRT and VTT as JSON. No payment, no account, no upload.

Looked after by Clack, a typewriter with a sheet of paper in it.

Transcribe something

curl -s -X POST https://tryslicemedia.com/api/v1/transcribe \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/episode.mp3"}'

Answers 202 with an id and a poll_url. An hour of audio is usually done in under a minute. Then:

curl -s "https://tryslicemedia.com/api/v1/transcribe/JOB_ID?token=TOKEN"

While it runs: { "status": "processing", "elapsed_seconds": 12, "poll_after_seconds": 5 }. When it is done:

{
  "id": "0182d3a8-71b0-4e14-b295-98b7d9c7a6a4",
  "status": "completed",
  "duration_seconds": 3619,
  "word_count": 12373,
  "language": "en",
  "text": "Welcome to the show ...",
  "srt": "1\n00:00:00,720 --> 00:00:03,040\n...",
  "vtt": "WEBVTT\n\n00:00:00.720 --> ..."
}

The three files come back inline while they total under a megabyte, which an hour-long episode does. Over that you get text_url, srt_url and vtt_url instead, and a note saying why.

Get a key

Sign in to get a free key. It is shown once: we store a hash of it, never the key itself.

Revoke a key by pasting it

Paste any key to kill it, including one made before 30 October. Holding the key is proof enough, so a leaked key can be stopped by whoever noticed.

Buy API hours

Free: 2 a month, the same as the website. Then $2 an hour, bought in packs. You pay by the minute and the hours never expire. The hours stay with the key you buy them with: keep that key safe. Another key, even with the same email, cannot use them, and a lost key cannot be recovered.

Your key goes only to our server, in the request header, and is not kept by this page. Or do it from code:

curl -s -X POST https://tryslicemedia.com/api/v1/credits/checkout   -H "Authorization: Bearer YOUR_KEY"   -H "Content-Type: application/json"   -d '{"pack": "10h"}'

{ "url": "https://checkout.stripe.com/...", "pack": "10h", "hours": 10, "price_usd": 20 }

And to see where a key stands:

curl -s https://tryslicemedia.com/api/v1/credits   -H "Authorization: Bearer YOUR_KEY"

{ "free_left_this_month": 1, "files_per_month": 2, "used_this_month": 1,
  "credit_seconds": 36000, "resets_at": "2026-12-01T00:00:00.000Z", ... }
The limits, in full
  • Free: 2 a month, the same as the website. Then $2 an hour, bought in packs.
  • 2 free a month per account with a key, counted together with that account’s free use of the website, resetting on the 1st (UTC); 1 a day per address without a key.
  • 1 hour a file free with a key, 3 hours on API hours, 10 minutes without a key.
  • API hours: $20 for 10 hours or $90 for 50 hours. Charged by the minute, rounded up; a transcript that fails is given back in full. They stay with the key you buy them with (keep it safe: no other key can use them, and a lost key cannot be recovered), never expire, and are used only once the month’s free ones are gone. Buy API hours.
  • 600MB a file.
  • English. The language is detected and reported; other languages are not promised.
  • No speaker labels. You get the words, not who said them.
  • Sign in to get a free key. Up to five active keys per account, three made a day. Every key on an account shares its free allowance, so more keys never mean more. Keys made before 30 Oct keep working; sign in to manage your keys.
  • The free ones are free. No card, no trial, no watermark. We cap what the free tool can spend in a month; when it runs out the API says so and gives the date it resets. API hours are not affected.

What happens to the file

A URL is fetched by the transcription provider and by us for a few hundred kilobytes, to read its length before anything is spent. Nothing is stored except the transcript. Audio uploaded through the web tool is deleted after 7 days, text after 30, by a job that runs daily. Nothing is used to train anything.

Errors

Every refusal carries the limit, what we measured, and when it resets, so a caller can act without reading a sentence. A refusal to a key also carries buy_credit (the link to this page’s Buy section) and the pack prices.

codehttpmeans
too_long413Longer than 1 hour with no API hours. Carries max_duration_seconds, the length we measured and with_credit_max_duration_seconds: paid API hours lift the limit to 3 hours a file.
too_long_paid413Longer than 3 hours, the limit on API hours.
too_long_anon413Over ten minutes without a key. A free key raises it to 1 hour.
too_big413Bigger than 600MB.
monthly_limit429This month's 2 free ones are used (website and API together) and this key holds no API hours. Carries resets_at and buy_credit.
credits_short402Not enough API hours for that file. Carries need_seconds, credit_seconds and buy_credit.
anon_daily_limit429The no-key tier is one file a day per address.
unmeasured_limit429The file’s length could not be read from its server. A free one of those is allowed only before any of the month’s free ones is used; API hours have no such limit.
unreadable400Not a direct link to a media file — usually a web page rather than an .mp3.
no_speech200The job ran and there was no speech in the file.
bad_key401Unknown or revoked key.
sign_in_required401POST /api/v1/keys without a Slice sign-in. Carries sign_in_url: sign in there to get a key.
bad_callback400callback_url is not a public https address.
ceiling503The free tool has spent its budget for the month. Carries resets_at.
anon_ceiling503The no-key tier has spent its share. A key still works.

A callback instead of polling

Send callback_url (a public https address) with the request. The 202 reply then carries a callback object with a secret starting whsec_, shown only there. When the job finishes we POST JSON to the address: { "type", "timestamp", "data" }, where type is transcript.completed or transcript.failed and data is what the GET above returns for the same job, plus its poll_url.

POST https://your-server.example.com/slice
webhook-id: msg_0182d3a8-71b0-4e14-b295-98b7d9c7a6a4_transcript.completed
webhook-timestamp: 1792224000
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=
Content-Type: application/json

{
  "type": "transcript.completed",
  "timestamp": "2026-10-17T09:20:00.000Z",
  "data": {
    "id": "0182d3a8-71b0-4e14-b295-98b7d9c7a6a4",
    "status": "completed",
    "file_name": "episode.mp3",
    "duration_seconds": 3619,
    "word_count": 12373,
    "language": "en",
    "text": "Welcome to the show ...",
    "srt": "1\n00:00:00,720 --> ...",
    "vtt": "WEBVTT\n\n...",
    "poll_url": "https://tryslicemedia.com/api/v1/transcribe/0182d3a8-...?token=..."
  }
}

It is signed the Standard Webhooks way, so their libraries verify it as is. Three headers: webhook-id (the same on every retry, so you can skip repeats), webhook-timestamp (unix seconds) and webhook-signature, which is v1, and then the base64 HMAC-SHA256 of id.timestamp.body, keyed with the base64-decoded part of the secret after whsec_. Reject anything with a timestamp more than five minutes old.

// Node: check the signature before trusting the body
const crypto = require('crypto');
function fromSlice(secret, headers, rawBody) {
  const id = headers['webhook-id'], ts = headers['webhook-timestamp'];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const key = Buffer.from(secret.replace(/^whsec_/, ''), 'base64');
  const sig = crypto.createHmac('sha256', key).update(`${id}.${ts}.${rawBody}`).digest('base64');
  return headers['webhook-signature'].split(' ').includes('v1,' + sig);
}

Answer with any 2xx to say you have it. We try three times over about twenty seconds, waiting up to five seconds for an answer each time, and do not follow redirects. If all three fail, the poll_url still works for 30 days. A file we had already transcribed for you comes back completed straight away and is not called back.

Clips, and agents

To have Claude, ChatGPT, Cursor or Claude Code make clips as well as transcripts, connect the Slice MCP server. Slice for AI agents has the setup for each.

If you would rather not use an API

The web tool takes an upload, shows the transcript on screen and emails you the files. Same limits, same engine, same transcripts.

Questions

Can I transcribe a podcast for free?
Yes. Up to 1 hour a file, 2 a month free with a key, the same as the website. POST the URL of the audio to https://tryslicemedia.com/api/v1/transcribe with a free key and poll for the result. Paid API hours lift the limit to 3 hours a file.
Do I need a key?
Not for a first try: without one you get one file a day per address, up to ten minutes. Sign in to get a free key: it raises the limit to 1 hour a file and 2 a month, counted together with your account's use of the website.
I made a key before 30 October. Does it still work?
Yes. Keys made before 30 Oct keep working; sign in to manage your keys. New keys need a Slice sign-in (Google or an email link), and you can hold up to five at once, list them and revoke any of them on this page.
What does it cost after the free ones?
$2 an hour of audio, charged by the minute (rounded up), bought in packs: $20 for 10 hours or $90 for 50 hours. The hours never expire and stay with the key you buy them with, so keep that key safe: another key, even with the same email, cannot use them, and a lost key cannot be recovered. With hours a file can run to 3 hours. A transcript that fails costs nothing.
What does it return?
JSON with the plain text, an SRT and a VTT, inline when the three total under a megabyte, which an hour-long episode does. Over that it returns URLs instead and says so.
Can it take an upload rather than a URL?
The API takes a URL. If your file is not somewhere with an address, the web tool at /tools/audio-to-text uploads it for you and shows the transcript on screen.
Does it label speakers?
No. You get the words. Speaker labels are a paid feature of Slice’s other tools.
How long do you keep the audio?
The audio is deleted after 7 days and the text after 30, by a job that runs daily. Nothing is used to train anything.
What is the catch?
The free ones are 2 a month per email address. We pay about 15 cents an hour of audio and cap what the free tool can spend in a month; if a month runs out, the API says so with the date it resets. Past the free ones it is $2 an hour, in packs.

This tool is looked after by Clack.Listens hard, types fast, never asks you to repeat yourself.

More Free Tools

Shorts by Slice

From the team behind these free tools

One video. A week of posts.

Upload an episode and get back the moments worth posting, cut and captioned.

  • Reads the whole episode, then picks the excerpts worth posting
  • Captions burned in and framed vertical, ready to post
  • Your first video (we search the first hour) and first 2 clips are free, no card
Try Shorts by Slice

Site links