API keys
Generate keys from the API Keys page in the dashboard. A key belongs to an organization. Model access and usage limits are properties of the organization, not of the individual key, and they are fixed once the key is issued.
Passing the key
HTTP endpoints take the key as a request header:/api/velma-2-*-batch paths plus /api/velma-2-batch; WebSocket endpoints are the /api/velma-2-*-streaming paths plus /api/velma-2-streaming.
Limits
Concurrency is capped per model: the number of requests or connections in flight at the same time against one endpoint. The default is 3. Reaching it on one model does not affect any other model. Credits are separate. A request is rejected for insufficient credits whatever the concurrency situation. Concurrency ceilings are set by Modulate per organization. To raise one, contact us with the model and the traffic you expect.Error responses
Authentication
Which of the two an endpoint returns is not uniform. Several endpoints, including Multilingual Transcription (batch), Deepfake Detection (batch), and PII/PHI Redaction (batch), return
403 for an invalid key rather than 401. Read the detail field rather than branching on the status alone. The per-endpoint reference page lists the exact set each endpoint returns.
On WebSocket endpoints the handshake closes instead of returning a status:
Limits
Every rejected-for-limits request returns429. The detail field names the cause:
On WebSocket endpoints these arrive as close codes
4030 and 4029.
Most endpoints report both conditions as Insufficient credits. and close code 4029. The split above is documented on English Fast Transcription (batch and streaming), Multilingual Fast Transcription (batch), and AI Music Detection (batch and streaming). Match on the detail string rather than on 429 alone.
For a backlog of files, bound the work with a semaphore rather than retrying into a full queue:
Modulate Platform API
The Modulate Platform API (cloud-processing-api.modulate.ai) submits jobs that combine transcription with optional analysis features such as emotion, demographics, deepfake detection, and behavioral insights. It authenticates differently from the Models API.
Every request carries two headers:
accountuuid comes from an account administrator or the Platform dashboard. apikey is a Platform key, issued separately from Models API keys.
A single POST /api_service endpoint accepts three submission patterns:
- Real-time WebSocket:
submission_type: "realtime_websocket"with no files. The response carries arealtime_urlfor streaming through the Pipecat Client SDK. - Single-file batch: one audio file of 5 MB or less in a single POST.
- Multi-file batch: one POST per file sharing a
job_id, withfinalize_job: trueon the last.
GET /api_service/job_status/{job_id} until status='completed'.