Modulate exposes two API surfaces with different authentication schemes. Most users will use the Velma-2 model APIs; the Modulate Platform API is a higher-level orchestration surface covered at the bottom of this page.Documentation Index
Fetch the complete documentation index at: https://docs.modulate.ai/llms.txt
Use this file to discover all available pages before exploring further.
| Surface | Host | Auth |
|---|---|---|
| Velma-2 model APIs | modulate-developer-apis.com | X-API-Key header (HTTP) / api_key query param (WebSocket) |
| Modulate Platform API | cloud-processing-api.modulate.ai | accountuuid + apikey headers |
Velma-2 model APIs
All Velma-2 endpoints require authentication via an API key. This section covers how to pass your key correctly for each endpoint type, what errors to expect when authentication fails, and how rate limiting works.API keys
API keys can be generated in the web interface or via the Admin Console APIs. API keys are tied to your organization and determine your access to models and your usage limits. These settings cannot be changed once an API key is generated.
Passing your API key
The method differs depending on whether you are using an HTTP or WebSocket endpoint.HTTP batch endpoints
Include your key in theX-API-Key request header on every request.
POST /api/velma-2-stt-batchPOST /api/velma-2-stt-batch-english-vfastPOST /api/velma-2-synthetic-voice-detection-batchPOST /api/velma-2-pii-phi-redaction-batch
WebSocket streaming endpoints
Pass your key as theapi_key query parameter when opening the connection. It cannot be passed as a header after the WebSocket handshake.
wss /api/velma-2-stt-streamingwss /api/velma-2-synthetic-voice-detection-streamingwss /api/velma-2-pii-phi-redaction-streaming
Authentication error codes
HTTP endpoints
| Status | Meaning |
|---|---|
401 | Invalid or missing API key |
403 | Valid key, but model access is not enabled for your organization, or a usage limit has been exceeded |
The SVD Batch endpoint returns
403 for both unauthorized keys and exceeded usage limits, rather than a separate 401. Check the detail field in the error response body to distinguish the cause.WebSocket endpoints
Authentication failures during the WebSocket handshake result in a close code rather than an HTTP status.| Close code | Meaning |
|---|---|
4001 | Invalid API key (STT Streaming) |
4003 | Model access not enabled, or usage denied (STT Streaming) |
4003 | Authentication failed or usage denied (SVD Streaming) |
Rate limits
Two independent limits apply to each endpoint per organization: Concurrent request limit — the number of requests or connections that can be in-flight simultaneously. Submitting a new request beyond this limit results in an immediate error rather than queuing. Monthly usage limit — measured in audio hours processed. Once the monthly limit is reached, further requests are rejected until the limit resets. Limit values are set per organization and per model. Contact your administrator to review or raise your limits.Rate limit error codes
| Endpoint type | Status / code | Meaning |
|---|---|---|
| STT Batch | 429 | Monthly usage or concurrent request limit exceeded |
| STT English VFast | 429 | Monthly usage or concurrent request limit exceeded |
| SVD Batch | 403 | Monthly usage or concurrent request limit exceeded |
| STT Streaming | Close code 4029 | Monthly usage or concurrent connection limit exceeded |
| SVD Streaming | Close code 4003 | Usage denied (includes rate limits) |
Retry guidance
When you receive a rate limit error:- Concurrent limit hit — wait a short interval (a few seconds) and retry. The limit frees up as in-flight requests complete.
- Monthly limit hit — no retry will succeed until the monthly period resets. Contact your administrator or update this in Organization settings.
Python semaphore pattern
Python semaphore pattern
Modulate Platform API
The Modulate Platform API (cloud-processing-api.modulate.ai) is the orchestration surface for submitting jobs that combine transcription with optional analysis features (emotion, demographics, synthetic-voice detection, behavioral insights). It uses a different auth scheme from the Velma-2 model APIs.
Authentication headers
Every Platform API request requires two headers:accountuuid— your account’s UUID, available from your account administrator or the Platform dashboard.apikey— your Platform API key. This is separate from your Velma-2 model API keys and is issued through the Platform.
Submission types
The Platform API supports three job submission patterns through a singlePOST /api_service endpoint:
- Real-time WebSocket — submit with
submission_type: "realtime_websocket"and no files. The response returns arealtime_urlfor streaming via the Pipecat Client SDK. - Single-file batch — upload one audio file (≤ 5 MB) in a single POST.
- Multi-file batch — POST each file in turn with the same
job_id; setfinalize_job: trueon the final upload.
GET /api_service/job_status/{job_id} until status='completed', then retrieve results from the response.
See the API Reference → Modulate Platform API tab for full request/response schemas.