Endpoint
POST /api/websocket-voice/token
Request a JWT token for WebSocket authentication
Request
Headers
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
apiKey | string | ✅ | Your device API key |
deviceId | string | ✅ | Unique identifier for your device |
Request Example
cURL Example
Response
Success Response
Status Code:200 OK
Headers:
| Field | Type | Description |
|---|---|---|
token | string | JWT token valid for 1 minute |
Error Responses
- 400 Bad Request
- 429 Too Many Requests
- 500 Server Error
Cause: Missing or invalid request parametersCommon Issues:
- Missing
apiKeyordeviceIdin request body - Invalid JSON format
- Empty string values
JWT Token Details
Token Structure
The returned JWT contains the following claims:| Claim | Description |
|---|---|
sub | Subject - Your device ID |
iat | Issued at timestamp |
exp | Expiration timestamp (iat + 60 seconds) |
aud | Audience - “voice-api” |
iss | Issuer - “thesavants.ai” |
Token Validation
Example JWT Payload:Security Notes
Single Use
Each token should only be used once for one WebSocket connection
No Caching
Never cache or store tokens beyond their intended use
Secure Transport
Always use HTTPS for token requests
Error Handling
Implement exponential backoff for rate limit errors
Rate Limiting
- Limit: 60 requests per minute per device
- Window: Rolling 60-second window
- Reset: Rate limit resets after 60 seconds from first request
Implementation Examples
- Flutter/Dart
- JavaScript
- Python