Your meeting recording is 40 minutes long, and your agent has no idea what was said. You could drop it into a paid transcription SaaS, fight an export flow, and then copy-paste the result into a prompt. Or you could send one POST request and get back clean text, timed chunks, and even SRT subtitles — ready to feed straight into a summary, a RAG index, or a searchable archive.
The Agent Media Tools API exposes a Whisper-powered speech-to-text endpoint at /api/transcribe. It accepts either a direct audio upload or a public URL, returns the transcript with language detection and timestamped segments, and generates SRT subtitles when the upstream result includes timed chunks. One call each day is free, so it costs nothing to wire into your own scripts and evaluate it on your real files.
The endpoint returns a JSON object with everything an agent needs to do something useful with the audio:
text — the full transcript as a stringlanguage — the inferred language of the source audiochunks — timestamped segments (with start/end times and per-segment text)srt — ready-to-use SRT subtitle text when timed chunks are availableduration — the audio duration when the upstream model reports itbilling — the quota and credit accounting for the callThat srt field is the quiet killer feature: you do not have to assemble subtitle files yourself. For agents that caption videos or auto-subtitle recordings, this turns a two-step workflow into a single request.
Upload a local audio file with a multipart form field named audio:
curl -F "audio=@meeting.mp3" \ https://agentmediatools.com/api/transcribe
Direct uploads are capped at 20 MB. That comfortably covers short calls, voice notes, and interview clips; for longer files, use the URL method below so the server pulls the source directly.
You can also request word-level timestamps instead of the default segment level:
curl -F "audio=@interview.wav" \ -F "chunk_level=word" \ https://agentmediatools.com/api/transcribe
When the audio is already hosted — a podcast episode, a lecture recording, an MP3 behind a public link — send the URL in a JSON body instead:
curl -X POST https://agentmediatools.com/api/transcribe \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/podcasts/episode-42.mp3"}'
Both url and audio_url are accepted as body fields, and this path avoids the 20 MB upload ceiling. This is the pattern to prefer for anything longer than a few minutes.
For a scheduled job or an agent loop, the requests library keeps it to a few lines. Uploading a local file:
import requests
resp = requests.post(
"https://agentmediatools.com/api/transcribe",
files={"audio": open("meeting.mp3", "rb")},
)
data = resp.json()
print(data["text"])
Or transcribing from a URL:
import requests
resp = requests.post(
"https://agentmediatools.com/api/transcribe",
json={"url": "https://example.com/lecture.mp3"},
)
data = resp.json()
print(data["language"], data["duration"])
print(data["srt"][:500] if data.get("srt") else "no subtitles")
For recurring work, add explicit timeouts and bounded retries around transient failures, and inspect the returned error before retrying.
The transcript is designed to be consumed programmatically, so chaining it into an LLM summary is straightforward:
import json
import requests
def transcribe(url):
r = requests.post(
"https://agentmediatools.com/api/transcribe",
json={"url": url},
)
r.raise_for_status()
return r.json()["text"]
text = transcribe("https://example.com/all-hands.mp3")
# Then pass `text` to your model of choice for a summary,
# action items, or a searchable archive entry.
print(f"Transcribed {len(text.split())} words")
The same pattern can feed meetings into a search index, move interview audio into a RAG pipeline, or prepare support-call transcripts without operating a local Whisper installation.
If your agent talks MCP, the hosted server exposes the same capability as the transcribe_audio tool. Pass a public audio_url and an optional chunk_level (segment or word), and the tool returns the full JSON — transcript, language, chunks, and SRT — straight into your agent's context. See the Claude + MCP setup guide for how to connect a desktop agent to the hosted MCP server.
Transcription is metered per call:
Successful responses include a billing object. Rejected quota or credit checks return a structured error and billing details where available; invalid-input and upstream failures can have a different error shape. Check the HTTP status and success field before reading transcript fields.
srt as best-effort rather than guaranteed.Speech-to-text is one of those capabilities that looks like a project until you have it as a single HTTP call. Start with your own meeting recording, grab the transcript in JSON, and wire it into the summary step of your agent — then add captioning or archival once you see how cheap the loop is.
Try the Speech to Text tool in the toolbox, or hit the endpoint directly from your own code.
Run the same tools in the browser, or call them from your agent with an API key.
Open toolbox