Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Transcribe an audio or video file to text

Run job:audio.transcribe through the looot API: 1 provider, from $0.000072 per result. Inputs, prices, output shape and code for curl, JavaScript and Python.

Transcribe an audio or video file to text.

Job id audio.transcribe, in Generative AI (Media generation). As of 2026-10-01, 1 provider serve it through 1 tool. Run job:audio.transcribe and looot picks one of them; with fallback on, a miss moves on to the next. See Jobs.

Inputs

This job has one tool, so it takes that tool’s fields. Any key you send passes through unchanged.

Name Type Required Description
url string yes
callback string no
callback_method string no
custom_intent string no
custom_intent_mode string no
custom_topic string no
custom_topic_mode string no
detect_entities boolean no
detect_language string no
diarize boolean no
diarize_model string no
dictation boolean no
encoding string no
extra string no
filler_words boolean no
intents boolean no
keyterm array no
keywords string no
language string no
measurements boolean no
mip_opt_out boolean no
model string no
multichannel boolean no
numerals boolean no
paragraphs boolean no
profanity_filter boolean no
punctuate boolean no
redact string no
replace string no
search string no
sentiment boolean no
smart_format boolean no
summarize string no
tag string no
topics boolean no
utt_split number no
utterances boolean no
version string no

Providers and prices

Provider Tool Price
Deepgram deepgram-listen $0.000072 per result

A call that fails at the provider costs $0. See What’s free.

Output

Shape of the run’s result, checked against 3 real answers:

{ results: { channels: { alternatives: { ... }[] }[] }, metadata: { models: string[], sha256, created, channels, duration, model_info: Record<string, { ... }>, request_id, transaction_key } }

Run it

Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.

Example input with placeholder values:

curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"job:audio.transcribe","input":{"url":"https://example.com"},"wait":30}'
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "job:audio.transcribe",
    input: {
      url: "https://example.com",
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "job:audio.transcribe",
        "input": {
            "url": "https://example.com",
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))

To pin one provider, send its tool id as endpointId instead of job:audio.transcribe.

Was this page helpful?