# AudioBurner > Speech to text on our own GPUs, wire-compatible with AssemblyAI: switch by changing the base URL and key. ## Switch from AssemblyAI - Live (v3 streaming): wss://streaming.audioburner.io/v3/ws ; mint a browser token from GET https://api.audioburner.io/v3/token - Batch (v2): POST https://api.audioburner.io/v2/transcript with an audio_url we can fetch; poll GET https://api.audioburner.io/v2/transcript/ ## What works today - Live, English: words carry one word entry per finished turn, no per-word timings. - Batch: words carry a start and end time for every word. - Add-ons on: Summary, Keyterms. - Switched off (a request for one is refused): Speaker labels, PII redaction. ## Prices (credits an hour; 1 credit = 1 US cent; billed by the second) - Live, English: 12 (connection seconds) - Batch: 9 (audio seconds per channel) - Add-on Speaker labels: +3 (coming) - Add-on PII redaction: +5 (coming) - Add-on Summary: +5 - Add-on Keyterms: +0 ## Plans - Pay as you go: 0 USD a month, 0 credits, 5 live streams, 5 batch jobs at once - Starter: 25 USD a month, 3000 credits, 10 live streams, 10 batch jobs at once - Pro: 100 USD a month, 13000 credits, 25 live streams, 25 batch jobs at once - Business: 400 USD a month, 56000 credits, 100 live streams, 50 batch jobs at once - Included credit expires at each renewal; bought top-ups never expire; downgrade at renewal, no refund. - Annual plans: coming soon, not available during beta. ## Your account (customer key) - GET https://api.audioburner.io/v1/usage?month=YYYY-MM, /v1/balance, /v1/engines: this account only; a read_usage key reads these and nothing else. - MCP for agents: POST https://api.audioburner.io/v1/mcp with your key (tools: transcribe_file, get_transcript, list_jobs, usage, balance, engines); transcribe_file spends credit and says its price. ## Limits - Live streams at once: your plan's number (enforced). - Batch jobs at once: your plan's number (published, not enforced yet). - New streams a minute: 2 x your plan's stream limit (published, not enforced yet). - Longest file: 10 hours (published, not enforced yet). - Largest file today: 500 MB (an audio_url download over this is refused) (enforced). - Largest file, planned: 2 GB (today's cap is the line above) (published, not enforced yet). ## Refusals - tenant_cap: WebSocket close 4003, or HTTP 503 from GET /v3/token with "reason": "tenant_cap" and Retry-After: 60. Means: Tenant concurrent session limit reached. Your move: close a stream or move to a bigger plan; try again after Retry-After. - capacity: WebSocket close 4003, or HTTP 503 from GET /v3/token with "reason": "capacity" and Retry-After: 60. Means: Maximum concurrent sessions exceeded. Your move: use another provider for this session; try again after Retry-After. - booting: WebSocket close 4003, or HTTP 503 from GET /v3/token with "reason": "booting" and Retry-After: 15. Means: Speech engine is still loading. Your move: use another provider for this session; try again after Retry-After. - draining: WebSocket close 1013, or HTTP 503 from GET /v3/token with "reason": "draining" and Retry-After: 30. Means: Task is draining for a deploy. Your move: use another provider for this session; try again after Retry-After. - credit: WebSocket close 4003 at open when your credit is used up or cannot be checked (the close reason is the sentence, e.g. "We could not check your credit just now. Try again in a moment."), or mid-stream with reason "credit used" when the stream reaches its credit grant (at most 4 hours). Your move: read the close reason; top up when credit is used up, reconnect after a grant ends, try again in a moment when it could not be checked. - WebSocket close 4001: bad or expired key or token, or an unsupported sample_rate or encoding. Your move: fix the request; do not retry it unchanged. - WebSocket close 4005: the transcription engine would not connect for this session (an Error message comes first). Your move: use another provider for this session; try again in a minute. - batch credit at submit: POST /v2/transcript answers HTTP 402 when your credit cannot cover a job (the detail is the reason, e.g. out of credit, trial ended, account on hold), or HTTP 503 with "We could not check your credit just now. Try again in a moment." when it cannot be checked; nothing is downloaded or stored. Your move: top up and resubmit; after a 503, try again in a moment. - batch credit at the end: a queued job whose finished length your credit does not cover, or whose credit cannot be checked then, gets status "error" with that sentence as its error, and no transcript is kept or charged; a file whose length cannot be read gets "We could not read this file's length, so it was not charged or transcribed." Your move: top up (or try again in a moment) and resubmit; check an unreadable file before resubmitting it. - batch unavailable: POST /v2/transcript answers HTTP 503 with Retry-After: 300 and "Batch transcription is not available on this server right now; nothing was downloaded or stored. Live streaming (/v3/ws) is unaffected. Try again later." when this server cannot queue a job (if your file was already stored, the sentence says what happened to it). Your move: try again after Retry-After, or use another provider for this file.