Error Handling

Understanding and handling errors from the Speech-to-Text API.

HTTP Status Codes

CodeDescriptionCommon Cause
200SuccessRequest completed successfully
400Bad RequestInvalid parameters or file format
401UnauthorizedInvalid or missing API key
402Payment RequiredInsufficient credits
413Payload Too LargeFile exceeds 25MB limit
429Too Many RequestsRate limit exceeded
500Internal Server ErrorServer-side issue
503Service UnavailableTemporary overload

Error Response Format

{
    "success": false,
    "error": {
        "code": "INVALID_FILE_FORMAT",
        "message": "Unsupported audio format. Please use MP3, WAV, M4A, or WebM.",
        "details": {
            "received_format": "text/plain",
            "supported_formats": ["audio/mpeg", "audio/wav", "audio/mp4", "audio/webm"]
        }
    }
}

Common Error Codes

File Errors

Error CodeDescriptionSolution
NO_FILE_PROVIDEDNo audio file in requestInclude file in multipart form data
INVALID_FILE_FORMATUnsupported audio formatConvert to MP3, WAV, M4A, or WebM
FILE_TOO_LARGEFile exceeds 25MBCompress or split the audio file
CORRUPTED_FILECannot read audio fileRe-encode or use different file
EMPTY_AUDIONo audio data in fileCheck file contains audio

Authentication Errors

Error CodeDescriptionSolution
MISSING_API_KEYNo API key providedAdd X-API-Key header
INVALID_API_KEYAPI key not recognizedVerify your API key
API_KEY_DISABLEDAPI key has been disabledContact support

Credit Errors

Error CodeDescriptionSolution
INSUFFICIENT_CREDITSNot enough credits for transcriptionAdd credits to account
CREDIT_CHECK_FAILEDUnable to verify creditsRetry request

Rate Limit Errors

Error CodeDescriptionSolution
RATE_LIMIT_EXCEEDEDToo many requestsWait and retry with backoff
CONCURRENT_LIMITToo many concurrent requestsWait for other requests to complete

WebSocket Errors

Error CodeDescriptionSolution
SESSION_LIMIT_REACHEDMax session duration exceededStart new session
IDLE_TIMEOUTNo speech for 60 secondsReconnect when ready to speak
INVALID_AUDIO_FORMATAudio not in expected formatUse Linear16, FLAC, or Opus

Error Handling Best Practices

import requests
import time

def transcribe_with_retry(file_path, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(
                "https://yourvoic.com/api/v1/stt/transcribe",
                headers={"X-API-Key": "your_api_key"},
                files={"file": open(file_path, "rb")},
                data={"model": "cipher-fast"}
            )
            
            if response.status_code == 200:
                return response.json()
            
            error = response.json().get('error', {})
            error_code = error.get('code', '')
            
            # Don't retry these errors
            if error_code in ['INVALID_FILE_FORMAT', 'INVALID_API_KEY', 'INSUFFICIENT_CREDITS']:
                raise Exception(f"Non-retryable error: {error_code}")
            
            # Retry with exponential backoff
            if response.status_code in [429, 503]:
                wait_time = (2 ** attempt) + 1
                print(f"Retrying in {wait_time} seconds...")
                time.sleep(wait_time)
                continue
                
            raise Exception(f"Request failed: {error}")
            
        except requests.RequestException as e:
            if attempt < max_retries - 1:
                time.sleep(2 ** attempt)
                continue
            raise
    
    raise Exception("Max retries exceeded")