Transcription

Asynchronous audio/video transcription powered by Whisper large-v3, with optional speaker diarization.

Billing: 4 credits per minute (rounded up), reserved at submission, automatically refunded if the job fails.

Endpoints: POST/transcriptions GET/transcriptions/{id}

Submit a job

Pass a publicly accessible URL (recommended — e.g. a media URL from Extract Post):

curl -X POST https://api.snapany.com/openapi/v1/transcriptions \
  -H "Authorization: Bearer sk_snapany_xxx" \
  -H "Content-Type: application/json" \
  -d '{"fileUrl": "https://example.com/audio.mp3", "speakerLabels": true, "maxSpeakers": 2}'

Or upload a local file (max 512MB, max 6 hours):

curl -X POST https://api.snapany.com/openapi/v1/transcriptions \
  -H "Authorization: Bearer sk_snapany_xxx" \
  -F "file=@meeting.mp3" -F "speakerLabels=true"

Response: { "id": "...", "status": "processing", "duration": 605.3 }

Poll for the result

curl https://api.snapany.com/openapi/v1/transcriptions/{id} \
  -H "Authorization: Bearer sk_snapany_xxx"

Poll every 3–5 seconds (polling is free). A polling loop:

import time
import requests

headers = {"Authorization": f"Bearer {API_KEY}"}
url = f"https://api.snapany.com/openapi/v1/transcriptions/{job_id}"

while True:
    job = requests.get(url, headers=headers).json()
    if job["status"] == "completed":
        print(job["result"]["text"])
        break
    if job["status"] == "failed":
        # reserved credits are refunded automatically
        print("failed:", job["error"])
        break
    time.sleep(5)

When status is completed, result contains the Whisper verbose_json output: full text, detected language, and segments with start/end timestamps — each segment carries a speaker label when diarization is enabled.

Audio & Video Transcription API — Whisper large-v3 - SnapAny API