# Authentication Source: https://docs.faseeh.ai/api-reference/authentication ## API Keys To access the Faseeh API, you'll need an API key. This key serves as your authentication credential and is required for all API requests. ### How it works Include your API key in every request by adding it to the `x-api-key` HTTP header: ```bash theme={null} x-api-key: YOUR_API_KEY ``` ### API Key Features Your API keys can be configured with: * **Endpoint restrictions:** Control which API endpoints each key can access * **Usage limits:** Set custom quotas to manage and monitor your API consumption ### Security Best Practices Keep your API key secure and private. Never commit it to version control, share it publicly, or include it in client-side applications where it could be exposed. ### Making requests You can paste the command below into your terminal to run your first API request. Make sure to replace `$FASEEH_API_KEY` with your secret API key. ```bash theme={null} curl 'https://api.faseeh.ai/api/v1/text-to-speech/faseeh-v1-preview' \ -H 'Content-Type: application/json' \ -H 'x-api-key: $FASEEH_API_KEY' \ -d '{ "voice_id": "ar-najdi-male-2", "text": "مرحبا بك في فصيح", "stability": 0.5, "streaming": true, "speed": 1 }' ``` Example with Python: ```python theme={null} import requests headers = { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json' } response = requests.post( 'https://api.faseeh.ai/api/v1/text-to-speech/faseeh-v1-preview', headers=headers, json={ 'voice_id': 'ar-najdi-male-2', 'text': 'مرحبا بك في فصيح', 'stability': 0.5, 'streaming': True, 'speed': 1 } ) ``` Example with Node.js: ```javascript theme={null} const response = await fetch('https://api.faseeh.ai/api/v1/text-to-speech/faseeh-v1-preview', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ voice_id: 'ar-najdi-male-2', text: 'مرحبا بك في فصيح', stability: 0.5, streaming: true, speed: 1 }) }); ``` # Denoise Source: https://docs.faseeh.ai/api-reference/denoise POST /denoise Remove background noise and isolate voice from audio files. Upload an audio file and receive a cleaned audio file with enhanced voice clarity. ## Authentication Requires API key authentication via `x-api-key` header. ## Request **Content-Type:** `multipart/form-data` ### Form Data | Field | Type | Required | Description | | ------- | ---- | -------- | ----------------------------------------------------------- | | `audio` | File | Yes | Audio file to denoise (max 200 MB, max 15 minutes duration) | ### File Limits * **Maximum file size:** 200 MB * **Maximum duration:** 15 minutes Supported audio formats: WAV, MP3, M4A, FLAC, OGG ## Response **Status Code:** `200 OK` **Headers:** * `Content-Type: audio/wav` * `Cache-Control: no-cache` * `Content-Length: ` **Body:** Denoised audio file (WAV format) ### Error Responses **400 Bad Request** ```json theme={null} { "errorCode": "400xx", "errorMessage": "File size exceeds 200 MB limit" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "Audio duration exceeds 15 minutes limit" } ``` **401 Unauthorized** ```json theme={null} { "errorCode": "40101", "errorMessage": "Invalid or missing API key" } ``` **402 Payment Required** ```json theme={null} { "errorCode": "40201", "errorMessage": "Insufficient wallet balance" } ``` ## Example Usage ### JavaScript ```javascript theme={null} const formData = new FormData(); const audioFile = document.querySelector('input[type="file"]').files[0]; formData.append("audio", audioFile); const response = await fetch('https://api.faseeh.ai/api/v1/denoise', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', // Note: Content-Type is set automatically by FormData }, body: formData, }); if (response.ok) { const audioBlob = await response.blob(); const audioUrl = URL.createObjectURL(audioBlob); // Use audioUrl to play or download the denoised audio } else { const error = await response.json(); console.error('Error:', error); } ``` ### Python ```python theme={null} import requests url = "https://api.faseeh.ai/api/v1/denoise" headers = { "x-api-key": "YOUR_API_KEY" } with open("input_audio.wav", "rb") as audio_file: files = {"audio": audio_file} response = requests.post(url, files=files, headers=headers) if response.status_code == 200: with open("denoised_audio.wav", "wb") as f: f.write(response.content) print("Denoised audio saved successfully") else: print(f"Error: {response.status_code} - {response.text}") ``` ### cURL ```bash theme={null} curl -X POST "https://api.faseeh.ai/api/v1/denoise" \ -H "x-api-key: YOUR_API_KEY" \ -F "audio=@input_audio.wav" \ --output denoised_audio.wav ``` **File Limits**: Ensure your audio file is under 200 MB and 15 minutes duration. Larger files will be rejected with a 400 error. # Endpoints Source: https://docs.faseeh.ai/api-reference/endpoints This guide provides instructions for configuring your applications to use Faseeh's API endpoint. ## Main API Endpoint Faseeh's API base URL: ``` https://api.faseeh.ai/api/v1 ``` ### How to Use 1. **Use the base URL**: All API requests should use `https://api.faseeh.ai/api/v1` as the base URL 2. **Include your API key**: Add your API key in the `x-api-key` header for authentication 3. **Set Content-Type**: Include `Content-Type: application/json` header for JSON requests ## Direct API Calls ### cURL Example ```bash theme={null} # Base URL: https://api.faseeh.ai/api/v1 curl -X POST "https://api.faseeh.ai/api/v1/text-to-speech/faseeh-v1-preview" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "voice_id": "ar-najdi-male-2", "text": "مرحبا بك في فصيح", "stability": 0.5, "streaming": true, "speed": 1 }' ``` # Errors Source: https://docs.faseeh.ai/api-reference/errors The Faseeh API uses standard HTTP status codes and custom error codes to indicate the type of error that occurred. All errors are returned in a consistent JSON format. ## Error Response Format All error responses follow this structure: ```json theme={null} { "errorCode": 40001, "errorMessage": "Error description" } ``` The HTTP status code in the response header corresponds to the error type, while `errorCode` provides a specific numeric code for programmatic error handling. ## Error Types ### AuthenticationError Occurs when authentication fails or API key is invalid. **Status Code**: `401` (Unauthorized) **Error Codes**: `40101` **Common Scenarios**: * Missing `x-api-key` header * Invalid API key format * Expired API key * Revoked or deleted API key * Invalid JWT signature **Properties**: * `errorCode` (number): Error code `40101` * `errorMessage` (string): Human-readable error message **Example**: ```json theme={null} { "errorCode": 40101, "errorMessage": "Invalid API key" } ``` *** ### ValidationError Occurs when request validation fails due to invalid or missing parameters. **Status Code**: `400` (Bad Request) **Error Code**: `40001` **Common Scenarios**: * Empty or missing required fields * Text too short (less than 3 words or 10 characters) * Invalid parameter values (out of range) * Invalid message types (WebSocket) * Missing voice embeddings * Payload too large **Properties**: * `errorCode` (number): Error code `40001` * `errorMessage` (string): Human-readable error message describing the validation issue **Example**: ```json theme={null} { "errorCode": 40001, "errorMessage": "Text must have at least 3 words and 10 characters" } ``` *** ### InsufficientBalanceError Occurs when the user's account balance is insufficient to complete the request. **Status Code**: `402` (Payment Required) **Error Code**: `40201` **Properties**: * `errorCode` (number): Error code `40201` * `errorMessage` (string): Error message describing the insufficient balance with required and available amounts **Example**: ```json theme={null} { "errorCode": 40201, "errorMessage": "Insufficient wallet balance. Required: $0.50, Available: $0.25" } ``` **Note**: The error message includes the exact amount required and the current available balance. Users should recharge their account to continue using the API. *** ### ModelAccessError Occurs when the user attempts to access a model they don't have permission to use. **Status Code**: `403` (Forbidden) **Error Code**: `40301` **Properties**: * `errorCode` (number): Error code `40301` * `errorMessage` (string): Error message describing the access restriction **Example**: ```json theme={null} { "errorCode": 40301, "errorMessage": "This model is not enabled for your account. Please contact support@faseeh.ai to get access." } ``` **Note**: Some models require special access. Contact support to request access to restricted models. *** ### ConcurrencyLimitError Occurs when the user has exceeded their concurrent request limit based on their subscription plan. **Status Code**: `429` (Too Many Requests) **Error Code**: `42901` **Properties**: * `errorCode` (number): Error code `42901` * `errorMessage` (string): Error message describing the concurrency limit with current and maximum values **Example**: ```json theme={null} { "errorCode": 42901, "errorMessage": "Concurrency limit exceeded. Maximum 5 concurrent requests allowed. Current: 6. Please upgrade your plan https://app.faseeh.ai/en/subscription or contact support@faseeh.ai for more information." } ``` **Concurrency Limits by Plan**: * **Basic Plan**: 2 concurrent requests * **Starter Plan**: 5 concurrent requests * **Growth Plan**: 10 concurrent requests * **Scale Plan**: 20 concurrent requests * **Free/No Plan**: 1 concurrent request **Note**: Wait for current requests to complete, or upgrade your plan to increase your concurrency limit. *** ### InternalError Occurs when an internal server error happens or external services fail. **Status Code**: `500` (Internal Server Error), `502` (Bad Gateway), `503` (Service Unavailable), `504` (Gateway Timeout) **Error Code**: `50001` **Common Scenarios**: * Internal server errors * External API failures (ElevenLabs) * Database connection issues * File storage failures (R2) * Request timeouts * Connection errors **Properties**: * `errorCode` (number): Error code `50001` * `errorMessage` (string): Error message describing the issue **Example**: ```json theme={null} { "errorCode": 50001, "errorMessage": "Internal server error" } ``` *** ### NotFoundError Occurs when a requested resource doesn't exist. **Status Code**: `404` (Not Found) **Error Code**: `40401` (or `50001` for some cases) **Common Scenarios**: * Model not found * Voice not found * Resource endpoint not found **Properties**: * `errorCode` (number): Error code (typically `40401` or `50001`) * `errorMessage` (string): Error message describing what wasn't found **Example**: ```json theme={null} { "errorCode": 40401, "errorMessage": "Model not found: faseeh-v2-preview" } ``` *** ## Error Code Reference | Error Code | HTTP Status | Error Type | Description | | ---------- | --------------- | ------------------------ | ----------------------------------------- | | `40001` | 400 | ValidationError | Request validation failed | | `40101` | 401 | AuthenticationError | Authentication failed or invalid API key | | `40201` | 402 | InsufficientBalanceError | Insufficient account balance | | `40301` | 403 | ModelAccessError | Model access denied | | `40401` | 404 | NotFoundError | Resource not found | | `42901` | 429 | ConcurrencyLimitError | Concurrent request limit exceeded | | `50001` | 500/502/503/504 | InternalError | Internal server or external service error | *** ## Handling Errors When an error occurs, check the HTTP status code in the response header and the `errorCode` field in the response body to determine the appropriate action: ### 400 - ValidationError * **Action**: Review the request parameters and fix validation issues * **Common fixes**: * Ensure all required fields are provided * Check text length meets minimum requirements (3 words, 10 characters) * Verify parameter values are within valid ranges * Reduce payload size if exceeding limits ### 401 - AuthenticationError * **Action**: Verify your API key is correct and valid * **Common fixes**: * Ensure `x-api-key` header is included in the request * Check that the API key hasn't expired * Verify the API key format is correct * Generate a new API key if the current one was revoked ### 402 - InsufficientBalanceError * **Action**: Recharge your account balance * **Common fixes**: * Check your current balance * Add funds to your account via the dashboard * Enable auto-topup to automatically recharge when balance is low * Verify the cost of the operation before making the request ### 403 - ModelAccessError * **Action**: Request access to the model * **Common fixes**: * Contact [support@faseeh.ai](mailto:support@faseeh.ai) to request access * Verify your subscription plan includes access to the model * Check if the model ID is correct ### 404 - NotFoundError * **Action**: Verify the resource exists * **Common fixes**: * Check that the model ID, voice ID, or resource ID is correct * Verify the resource hasn't been deleted * Ensure you're using the correct endpoint ### 429 - ConcurrencyLimitError * **Action**: Reduce concurrent requests or upgrade your plan * **Common fixes**: * Wait for current requests to complete * Reduce the number of simultaneous API calls * Upgrade your subscription plan to increase concurrency limits * Implement request queuing in your application ### 500/502/503/504 - InternalError * **Action**: Retry the request or contact support * **Common fixes**: * Retry the request after a short delay (exponential backoff recommended) * Check the error message for specific details * If the issue persists, contact [support@faseeh.ai](mailto:support@faseeh.ai) with: * The error code and message * The request that caused the error * Timestamp of the error * For external API errors, wait a few minutes and retry *** ## Best Practices 1. **Implement Retry Logic**: For 500-level errors, implement exponential backoff retry logic 2. **Handle Rate Limits**: Monitor for 429 errors and implement request queuing 3. **Validate Inputs**: Prevent 400 errors by validating inputs before sending requests 4. **Monitor Balance**: Check balance before making requests to avoid 402 errors 5. **Cache API Keys**: Store API keys securely and handle expiration gracefully 6. **Error Logging**: Log all errors with context for debugging 7. **User-Friendly Messages**: Display user-friendly error messages based on error codes *** ## WebSocket Errors For WebSocket connections, errors are sent as JSON messages: ```json theme={null} { "type": "error", "message": "Error description" } ``` Common WebSocket errors: * Missing authentication: `"x-api-key or Authorization header is required. Provide it in query string, headers, or initConnection message."` * Invalid message type: `'Invalid message type. Expected "voice-request"'` *** ## Support If you encounter errors that aren't covered in this documentation or need assistance: * **Email**: [support@faseeh.ai](mailto:support@faseeh.ai) * **Documentation**: [https://docs.faseeh.ai](https://docs.faseeh.ai) * **Status Page**: Check our status page for service updates # Get Models Source: https://docs.faseeh.ai/api-reference/models GET /models Retrieve a list of all available voice synthesis models Retrieve a list of all available voice synthesis models. ## Authentication Requires API key authentication via `x-api-key` header. ## Response Returns an array of model objects. ### Response Schema Each model object contains: | Field | Type | Description | | ------------- | -------------- | ---------------------------------- | | `id` | string (UUID) | Unique identifier for the model | | `model_id` | string | Model identifier used in API calls | | `model_name` | string | Human-readable model name | | `description` | string \| null | Detailed description of the model | ### Example Request ```bash theme={null} curl -X GET "https://api.faseeh.ai/api/v1/models" \ -H "x-api-key: YOUR_API_KEY" ``` ### Example Response ```json theme={null} [ { "id": "123e4567-e89b-12d3-a456-426614174000", "model_id": "faseeh-arabic-v1", "model_name": "Faseeh Arabic v1", "description": "High-quality Arabic voice synthesis supporting multiple dialects" }, { "id": "123e4567-e89b-12d3-a456-426614174001", "model_id": "faseeh-arabic-fast", "model_name": "Faseeh Arabic Fast", "description": "Fast Arabic voice synthesis with lower latency" } ] ``` ## Usage Use the `model_id` from the response in text-to-speech generation endpoints: * `POST /text-to-speech/:model_id` - HTTP endpoint * `WS /text-to-speech` - WebSocket endpoint (include `model_id` in initConnection message) **Caching**: Model information doesn't change frequently. Consider caching the model list to reduce API calls. # Quickstart Source: https://docs.faseeh.ai/api-reference/quickstart ## Introduction Faseeh provides a RESTful API that enables you to integrate Arabic text-to-speech capabilities into your applications. You can interact with the API through standard HTTP requests from any programming language or framework. The API supports: * High-quality Arabic voice synthesis * Multiple Arabic dialects (Najdi, Hijazi, Emirati, and more) * Streaming audio output * Real-time text-to-speech conversion * Customizable voice parameters (stability, speed) ## Getting Started To get started with the Faseeh API: 1. **Get your API key**: Sign up at [app.faseeh.ai](https://app.faseeh.ai) and generate an API key 2. **Make your first request**: Use the API endpoint with your API key in the `x-api-key` header 3. **Explore the documentation**: Check out the [Authentication](/api-reference/authentication) and [Endpoints](/api-reference/endpoints) guides ## Quick Resources Generate and manage your API keys from the dashboard Learn how to use the Text-to-Speech API endpoints # API Rate Limits Source: https://docs.faseeh.ai/api-reference/rate-limits The Faseeh API uses a credit-based system with concurrent request limits to ensure fair usage and optimal performance for all users. ## Concurrent Requests For streaming text-to-speech requests, Faseeh enforces concurrent request limits based on your subscription plan. This ensures stable performance and prevents system overload. **Concurrent Request Limits by Plan**: * **Basic**: 2 concurrent requests * **Starter**: 5 concurrent requests * **Growth**: 10 concurrent requests * **Scale**: 20 concurrent requests * **Enterprise**: Unlimited concurrent requests When you exceed your concurrent request limit, you'll receive a `42901` error (ConcurrencyLimitError). You can either wait for existing requests to complete or upgrade your plan to increase your limit. ## Best Practices 1. **Monitor your usage**: Check your credit balance and concurrent request limits regularly 2. **Plan ahead**: Consider your usage patterns when selecting a subscription plan 3. **Handle rate limits**: Implement retry logic with exponential backoff for 429 errors ## Subscription Plans For detailed information about subscription plans, credit limits, concurrent request limits, and pricing, visit: **[View Subscription Plans →](https://app.faseeh.ai/en/subscription)** # Text-to-Speech Source: https://docs.faseeh.ai/api-reference/text-to-speech-post POST /text-to-speech/{model_id} Generate speech from Arabic text using a specific model. Supports both streaming and non-streaming responses. Generate speech from Arabic text and receive a complete WAV audio file. The entire audio is generated before being returned, ensuring complete audio quality. ## Authentication Requires API key authentication via `x-api-key` header. ## Path Parameters | Parameter | Type | Required | Description | | ---------- | ------ | -------- | ------------------------------------------ | | `model_id` | string | Yes | The model identifier to use for generation | ## Request Body | Field | Type | Required | Description | | ----------- | ------- | -------- | ------------------------------------------------------------------------------------------------ | | `voice_id` | string | Yes | The voice ID to use for synthesis | | `text` | string | Yes | The Arabic text to convert to speech | | `stability` | number | Yes | Voice stability (0.0 to 1.0). Higher values produce more consistent output | | `speed` | number | No | Speech speed (0.7 to 1.2, default 1.0). Values below 1.0 slow down speech, above 1.0 speed it up | | `streaming` | boolean | Yes | Must be `false` for complete WAV file response | ### Example Request Body ```json theme={null} { "voice_id": "voice_123", "text": "مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم", "stability": 0.5, "speed": 1.0, "streaming": false } ``` ## Response **Status Code:** `200 OK` **Headers:** * `Content-Type: audio/wav` * `Cache-Control: no-cache` * `Content-Length: ` **Body:** Complete WAV audio file ### Error Responses **400 Bad Request** ```json theme={null} { "errorCode": "400xx", "errorMessage": "Model not found: invalid_model_id" } ``` **402 Payment Required** ```json theme={null} { "errorCode": "402xx", "errorMessage": "Insufficient wallet balance. Required: $0.05, Available: $0.02" } ``` ## Example Usage ### JavaScript ```javascript theme={null} const response = await fetch('https://api.faseeh.ai/api/v1/text-to-speech/MODEL_ID', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({ voice_id: 'VOICE_ID', text: 'مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم', stability: 0.5, speed: 1.0, streaming: false, }), }); const audioBlob = await response.blob(); const audioUrl = URL.createObjectURL(audioBlob); // Use audioUrl to play or download the audio ``` ### Python ```python theme={null} import requests url = "https://api.faseeh.ai/api/v1/text-to-speech/MODEL_ID" headers = { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" } data = { "voice_id": "VOICE_ID", "text": "مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم", "stability": 0.5, "speed": 1.0, "streaming": False } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: with open("output.wav", "wb") as f: f.write(response.content) else: print(f"Error: {response.status_code} - {response.text}") ``` ## Cost Calculation The cost is calculated based on: * Text length (number of characters) * Model cost per character Cost is deducted from your wallet balance upon successful generation. **Wallet Balance**: Ensure your wallet has sufficient balance before making requests. Check your balance in the [Faseeh dashboard](https://app.faseeh.ai/en/api-keys). # Text-to-Speech Stream Source: https://docs.faseeh.ai/api-reference/text-to-speech-stream POST /text-to-speech/{model_id} Generate speech from Arabic text using a specific model. Supports both streaming and non-streaming responses. Generate speech from Arabic text with streaming PCM16 audio output. Audio chunks are streamed as they're generated, providing low-latency audio delivery. ## Authentication Requires API key authentication via `x-api-key` header. ## Path Parameters | Parameter | Type | Required | Description | | ---------- | ------ | -------- | ------------------------------------------ | | `model_id` | string | Yes | The model identifier to use for generation | ## Request Body | Field | Type | Required | Description | | ----------- | ------- | -------- | ------------------------------------------------------------------------------------------------ | | `voice_id` | string | Yes | The voice ID to use for synthesis | | `text` | string | Yes | The Arabic text to convert to speech | | `stability` | number | Yes | Voice stability (0.0 to 1.0). Higher values produce more consistent output | | `speed` | number | No | Speech speed (0.7 to 1.2, default 1.0). Values below 1.0 slow down speech, above 1.0 speed it up | | `streaming` | boolean | Yes | Must be `true` for streaming response | ### Example Request Body ```json theme={null} { "voice_id": "voice_123", "text": "مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم", "stability": 0.5, "speed": 1.0, "streaming": true } ``` ## Response **Status Code:** `200 OK` **Headers:** * `Content-Type: audio/raw;codec=pcm16;rate=24000;channels=1` * `Cache-Control: no-cache` * `Connection: keep-alive` **Body:** Stream of PCM16 audio chunks (24kHz, mono) ### Error Responses **400 Bad Request** ```json theme={null} { "errorCode": "400xx", "errorMessage": "Model not found: invalid_model_id" } ``` **402 Payment Required** ```json theme={null} { "errorCode": "402xx", "errorMessage": "Insufficient wallet balance. Required: $0.05, Available: $0.02" } ``` ## Example Usage ### JavaScript ```javascript theme={null} const response = await fetch('https://api.faseeh.ai/api/v1/text-to-speech/MODEL_ID', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({ voice_id: 'VOICE_ID', text: 'مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم', stability: 0.5, speed: 1.0, streaming: true, }), }); const reader = response.body.getReader(); const chunks = []; while (true) { const { done, value } = await reader.read(); if (done) break; chunks.push(value); } // Combine chunks into single audio buffer const audioBuffer = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0)); let offset = 0; for (const chunk of chunks) { audioBuffer.set(chunk, offset); offset += chunk.length; } ``` ### Python ```python theme={null} import requests url = "https://api.faseeh.ai/api/v1/text-to-speech/MODEL_ID" headers = { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" } data = { "voice_id": "VOICE_ID", "text": "مرحبا بك في فصيح كيف يمكنني مساعدتك اليوم", "stability": 0.5, "speed": 1.0, "streaming": True } response = requests.post(url, json=data, headers=headers, stream=True) if response.status_code == 200: with open("output.pcm", "wb") as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) else: print(f"Error: {response.status_code} - {response.text}") ``` ## Cost Calculation The cost is calculated based on: * Text length (number of characters) * Model cost per character Cost is deducted from your wallet balance upon successful generation. **Wallet Balance**: Ensure your wallet has sufficient balance before making requests. Check your balance in the [Faseeh dashboard](https://app.faseeh.ai/en/api-keys). # Voice Clone Source: https://docs.faseeh.ai/api-reference/voice-clone POST /voices/clone Create a cloned voice from an audio file. This endpoint allows you to create a new voice by providing a voice sample and reference audio. **Important**: Before using this endpoint, you must first generate a voice preview using the [Voice Preview API](/api-reference/voice-preview). Use the preview audio file as `voice_file` and the original audio file as `reference_audio_file` when cloning the voice. ## Authentication Requires API key authentication via `x-api-key` header. ## Request **Content-Type:** `multipart/form-data` (set automatically when using FormData/files) ### Form Data | Field | Type | Required | Description | | ---------------------- | ------ | -------- | -------------------------------------------------------------------------- | | `voice_file` | File | Yes | The generated preview audio file from the preview API | | `reference_audio_file` | File | Yes | The original audio file used for the preview | | `text` | string | Yes | The text used in preview generation | | `stability` | number | Yes | Voice stability (0.0 to 1.0). Higher values produce more consistent output | | `name` | string | Yes | Name for the cloned voice | | `model` | string | Yes | Model identifier to use for voice cloning | | `description` | string | No | Description of the voice | | `gender` | string | No | Gender of the voice (e.g., "male", "female") | | `age` | string | No | Age category of the voice (e.g., "middle", "elderly") | | `languages` | string | No | Comma-separated list of language codes (e.g., "ar,en") | | `dialects` | string | No | Comma-separated list of dialects (e.g., "najdi,hijazi") | | `avatar_url` | string | No | URL to an avatar image for the voice (you can put your image URL here) | ### Notes * `voice_file` should be the audio file generated from the voice preview API * `reference_audio_file` should be the original audio file you used when generating the preview * `text` should match the text you used when generating the preview * The voice will be assigned a unique `voice_id` automatically upon creation ## Response **Status Code:** `200 OK` **Content-Type:** `application/json` ### Response Schema | Field | Type | Description | | ------------- | -------------- | --------------------------------------------- | | `id` | string (UUID) | Unique identifier for the voice record | | `voice_id` | string | Voice identifier used in API calls | | `name` | string | Name of the cloned voice | | `description` | string \| null | Description of the voice | | `gender` | string \| null | Gender of the voice | | `age` | string \| null | Age category of the voice | | `languages` | string\[] | List of language codes supported by the voice | | `dialect` | string\[] | List of dialects supported by the voice | | `type` | string \| null | Voice type | | `sample_url` | string | URL to the sample audio file | | `avatar_url` | string \| null | URL to the avatar image | | `stability` | number | Voice stability value | ### Example Response ```json theme={null} { "id": "123e4567-e89b-12d3-a456-426614174000", "voice_id": "ar-cloned-voice-1", "name": "My Cloned Voice", "description": "A custom cloned voice", "gender": "male", "age": "middle", "languages": ["ar", "en"], "dialect": ["najdi"], "type": "neural", "sample_url": "https://example.com/voices/user123/ar-cloned-voice-1.wav", "avatar_url": null, "stability": 0.8 } ``` ### Error Responses **400 Bad Request** ```json theme={null} { "errorCode": "400xx", "errorMessage": "voice_file is required and must be a file" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "reference_audio_file is required and must be a file" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "name is required" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "text is required" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "stability must be a number between 0 and 1" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "model is required" } ``` **401 Unauthorized** ```json theme={null} { "errorCode": "40101", "errorMessage": "Invalid or missing API key" } ``` **500 Internal Server Error** ```json theme={null} { "errorCode": "50001", "errorMessage": "Failed to process voice file" } ``` ```json theme={null} { "errorCode": "50001", "errorMessage": "Failed to upload voice file" } ``` ## Example Usage ### JavaScript ```javascript theme={null} const formData = new FormData(); const voiceFile = document.querySelector('input[name="voice_file"]').files[0]; const referenceAudioFile = document.querySelector('input[name="reference_audio_file"]').files[0]; formData.append("voice_file", voiceFile); formData.append("reference_audio_file", referenceAudioFile); formData.append("text", "مرحبا بك في فصيح، هذا صوتي المستنسخ"); formData.append("stability", "0.8"); formData.append("name", "My Cloned Voice"); formData.append("model", "faseeh-v1-preview"); formData.append("description", "A custom cloned voice"); formData.append("gender", "male"); formData.append("languages", "ar,en"); formData.append("dialects", "najdi"); const response = await fetch('https://api.faseeh.ai/api/v1/voices/clone', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', // Note: Content-Type is set automatically by FormData }, body: formData, }); if (response.ok) { const voice = await response.json(); console.log('Voice created:', voice.voice_id); } else { const error = await response.json(); console.error('Error:', error); } ``` ### Python ```python theme={null} import requests url = "https://api.faseeh.ai/api/v1/voices/clone" headers = { "x-api-key": "YOUR_API_KEY" } files = { "voice_file": open("voice_sample.wav", "rb"), "reference_audio_file": open("reference_audio.wav", "rb") } data = { "text": "مرحبا بك في فصيح، هذا صوتي المستنسخ", "stability": "0.8", "name": "My Cloned Voice", "model": "faseeh-v1-preview", "description": "A custom cloned voice", "gender": "male", "languages": "ar,en", "dialects": "najdi" } response = requests.post(url, files=files, data=data, headers=headers) if response.status_code == 200: voice = response.json() print(f"Voice created: {voice['voice_id']}") else: print(f"Error: {response.status_code} - {response.text}") ``` ### cURL ```bash theme={null} curl -X POST "https://api.faseeh.ai/api/v1/voices/clone" \ -H "x-api-key: YOUR_API_KEY" \ -F "voice_file=@voice_sample.wav" \ -F "reference_audio_file=@reference_audio.wav" \ -F "text=مرحبا بك في فصيح، هذا صوتي المستنسخ" \ -F "stability=0.8" \ -F "name=My Cloned Voice" \ -F "model=faseeh-v1-preview" \ -F "description=A custom cloned voice" \ -F "gender=male" \ -F "languages=ar,en" \ -F "dialects=najdi" ``` **Voice Creation**: After cloning a voice, you can use the returned `voice_id` in text-to-speech generation endpoints. The voice will be available immediately after successful creation. # Voice Preview Source: https://docs.faseeh.ai/api-reference/voice-preview POST /voices/preview Generate a preview of a voice you want to clone. This API allows you to test how a voice will sound before creating it as a permanent voice. ## Authentication Requires API key authentication via `x-api-key` header. ## Request **Content-Type:** `multipart/form-data` ### Form Data | Field | Type | Required | Description | | ------------ | ------ | -------- | ------------------------------------------------------------------------------------------------ | | `text` | string | Yes | Text to generate preview with (minimum 3 words, 10 characters) | | `similarity` | number | Yes | Voice similarity to source (0.0 to 1.0). Higher values produce more similar voice | | `model_id` | string | Yes | The model identifier to use for generation | | `speed` | number | No | Speech speed (0.7 to 1.2, default 1.0). Values below 1.0 slow down speech, above 1.0 speed it up | | `file` | File | Yes | Audio file containing the voice to preview | ### Notes * The API will process the provided audio file to generate the voice preview * `text` must be at least 3 words and 10 characters long ## Response **Status Code:** `200 OK` **Headers:** * `Content-Type: audio/raw;codec=pcm16;rate=24000;channels=1` * `Cache-Control: no-cache` * `Connection: keep-alive` **Body:** Streaming PCM16 audio (24000 Hz, Mono, 16-bit) ### Error Responses **400 Bad Request** ```json theme={null} { "errorCode": "400xx", "errorMessage": "text is required" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "similarity must be a number between 0 and 1" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "speed must be a number between 0.7 and 1.2" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "model_id is required" } ``` ```json theme={null} { "errorCode": "400xx", "errorMessage": "file is required and must be of audio type" } ``` **401 Unauthorized** ```json theme={null} { "errorCode": "40101", "errorMessage": "Invalid or missing API key" } ``` **402 Payment Required** ```json theme={null} { "errorCode": "40201", "errorMessage": "Insufficient wallet balance" } ``` **500 Internal Server Error** ```json theme={null} { "errorCode": "50001", "errorMessage": "Failed to generate voice preview" } ``` ## Example Usage ### JavaScript ```javascript theme={null} const formData = new FormData(); const audioFile = document.querySelector('input[type="file"]').files[0]; formData.append("file", audioFile); formData.append("text", "مرحبا بك في فصيح، هذا صوتي الجديد"); formData.append("similarity", "0.8"); formData.append("model_id", "faseeh-v1-preview"); formData.append("speed", "1.0"); const response = await fetch('https://api.faseeh.ai/api/v1/voices/preview', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', // Note: Content-Type is set automatically by FormData }, body: formData, }); if (response.ok) { // Handle streaming audio response const reader = response.body.getReader(); const audioChunks = []; while (true) { const { done, value } = await reader.read(); if (done) break; audioChunks.push(value); } // Combine chunks and create audio blob const audioBlob = new Blob(audioChunks, { type: 'audio/raw' }); const audioUrl = URL.createObjectURL(audioBlob); // Use audioUrl to play the preview } else { const error = await response.json(); console.error('Error:', error); } ``` ### Python ```python theme={null} import requests url = "https://api.faseeh.ai/api/v1/voices/preview" headers = { "x-api-key": "YOUR_API_KEY" } with open("source_audio.wav", "rb") as audio_file: files = {"file": audio_file} data = { "text": "مرحبا بك في فصيح، هذا صوتي الجديد", "similarity": "0.8", "model_id": "faseeh-v1-preview", "speed": "1.0" } response = requests.post(url, files=files, data=data, headers=headers, stream=True) if response.status_code == 200: # Save streaming audio with open("voice_preview.pcm", "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) print("Voice preview saved successfully") else: print(f"Error: {response.status_code} - {response.text}") ``` ### cURL ```bash theme={null} curl -X POST "https://api.faseeh.ai/api/v1/voices/preview" \ -H "x-api-key: YOUR_API_KEY" \ -F "file=@source_audio.wav" \ -F "text=مرحبا بك في فصيح، هذا صوتي الجديد" \ -F "similarity=0.8" \ -F "model_id=faseeh-v1-preview" \ -F "speed=1.0" \ --output voice_preview.pcm ``` **Voice Preview**: This endpoint generates a preview of a cloned voice. If you're satisfied with the preview, you can proceed to create it as a permanent voice using the voice creation endpoint. # Get Voices Source: https://docs.faseeh.ai/api-reference/voices GET /voices Retrieve a list of all available voices for text-to-speech synthesis Retrieve a list of all available voices for text-to-speech synthesis. ## Authentication Requires API key authentication via `x-api-key` header. ## Response Returns an array of voice objects. ### Response Schema Each voice object contains: | Field | Type | Description | | ------------- | -------------- | ------------------------------------------------------------------------------- | | `voice_id` | string | Unique identifier for the voice (used in text-to-speech requests) | | `name` | string | Human-readable name of the voice | | `description` | string \| null | Detailed description of the voice characteristics | | `gender` | string \| null | Gender of the voice (`male`, `female`, or `null`) | | `age` | string \| null | Age category of the voice (`middle`, `elderly`, or `null`) | | `languages` | array\[string] | List of language codes supported by the voice (e.g., `["ar", "en"]`) | | `dialect` | array\[string] | List of dialects supported by the voice (e.g., `["fusha", "emirati", "najdi"]`) | | `type` | string \| null | Voice type (`neural` or `null`) | | `sample_url` | string | URL to an audio sample of the voice | ## Usage Use the `voice_id` from the response in text-to-speech generation endpoints: * `POST /text-to-speech/:model_id` - Include `voice_id` in the request body * `WS /text-to-speech` - Include `voice_id` in the WebSocket message ## Voice Types Voices can be categorized by: * **Dialect**: `fusha` (Modern Standard Arabic), `emirati`, `najdi`, `hijazi`, `kuwaiti`, `egyptian`, `british`, etc. * **Gender**: `male` or `female` * **Age**: `middle` or `elderly` * **Languages**: Supported language codes (e.g., `ar` for Arabic, `en` for English) **Custom Voices**: Some voices may have `null` values for certain fields. These are typically custom user-created voices. The `voice_id` can still be used in text-to-speech requests regardless of these field values. **Caching**: Voice information doesn't change frequently. Consider caching the voice list to reduce API calls and improve application performance. # Text-To-Speech WebSocket Source: https://docs.faseeh.ai/api-reference/websocket The Text-to-Speech WebSocket API is designed to generate audio from partial text input while ensuring consistency throughout the generated audio. Although highly flexible, the WebSocket API isn't a one-size-fits-all solution. It's well-suited for scenarios where: * The input text is being streamed or generated in chunks. * Real-time audio generation is required with low latency. * You need to send text incrementally as it becomes available. However, it may not be the best choice when: * The entire input text is available upfront. Given that the generations are partial, some buffering is involved, which could potentially result in slightly higher latency compared to a standard HTTP request. * You want to quickly experiment or prototype. Working with WebSockets can be harder and more complex than using a standard HTTP API, which might slow down rapid development and testing. ## Endpoint ``` WSS /websocket/text-to-speech ``` ## Connection URL ``` wss://api.faseeh.ai/api/v1/websocket/text-to-speech?x-api-key=YOUR_API_KEY ``` ## Authentication Requires API key authentication via `x-api-key` query parameter or in the initial connection message. ## Query Parameters | Parameter | Type | Required | Description | | ----------- | ------ | -------- | ------------------- | | `x-api-key` | string | Yes | Your Faseeh API key | ## Message Types ### Initialize Connection After establishing the WebSocket connection, you must send an initialization message. **Request**: ```json theme={null} { "type": "initConnection", "model_id": "faseeh-v1-preview", "voice_id": "ar-najdi-male-2", "voice_settings": { "stability": 0.5, "similarity_boost": 0.75, "speed": 1.0 }, "output_format": "pcm_24000", "x_api_key": "YOUR_API_KEY" } ``` **Request Fields**: | Field | Type | Required | Description | | --------------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------- | | `type` | string | Yes | Must be `"initConnection"` | | `model_id` | string | No | Model ID to use (default: `"faseeh-mini-v1-preview"`) | | `voice_id` | string | Yes | The voice ID to use for synthesis | | `voice_settings` | object | No | Voice configuration | | `voice_settings.stability` | number | No | Stability setting (default: 0.5) | | `voice_settings.similarity_boost` | number | No | Similarity boost (default: 0.75) | | `voice_settings.speed` | number | No | Speed setting, range 0.7-1.2 (default: 1.0) | | `output_format` | string | No | Audio output format. Options: `"pcm_8000"`, `"pcm_16000"`, `"pcm_22050"`, `"pcm_24000"` (default: `"pcm_24000"`) | | `x_api_key` | string | No | API key (if not provided in query parameter) | **Response**: ```json theme={null} { "type": "connectionInitialized" } ``` ### Send Text Send text chunks for audio generation. **Request**: ```json theme={null} { "type": "text", "text": "مرحبا بك في فصيح ", "flush": false, "try_trigger_generation": false } ``` **Request Fields**: | Field | Type | Required | Description | | ------------------------ | ------- | -------- | -------------------------------------------------------------------- | | `type` | string | Yes | Must be `"text"` | | `text` | string | Yes | Text to convert to speech | | `flush` | boolean | No | Force generation of audio even if buffer is small (default: `false`) | | `try_trigger_generation` | boolean | No | Attempt to trigger generation immediately (default: `false`) | **Response**: ```json theme={null} { "audio": "base64_encoded_audio_data", "sampleRate": 24000 } ``` **Response Fields**: | Field | Type | Description | | ------------ | ------ | --------------------------------------------- | | `audio` | string | Base64-encoded PCM audio data | | `sampleRate` | number | Sample rate of the audio (typically 24000 Hz) | ### Clear Buffer Clear the current text buffer. **Request**: ```json theme={null} { "type": "clear" } ``` **Response**: No response message. ### Close Connection Close the WebSocket connection gracefully. **Request**: ```json theme={null} { "type": "closeConnection" } ``` **Response**: Connection closes. ## Error Responses If an error occurs, you'll receive: ```json theme={null} { "type": "error", "errorCode": 40101, "errorMessage": "Invalid API key" } ``` **Error Response Fields**: | Field | Type | Description | | -------------- | ------ | --------------------------------------- | | `type` | string | Always `"error"` | | `errorCode` | number | Numeric error code (e.g., 40101, 40001) | | `errorMessage` | string | Human-readable error message | ## Example Usage ```javascript theme={null} const ws = new WebSocket('wss://api.faseeh.ai/api/v1/websocket/text-to-speech?x-api-key=YOUR_API_KEY'); ws.onopen = () => { // Initialize connection ws.send(JSON.stringify({ type: "initConnection", model_id: "faseeh-v1-preview", voice_id: "ar-najdi-male-2", voice_settings: { stability: 0.5, similarity_boost: 0.75, speed: 1.0 }, output_format: "pcm_24000" })); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.type === "connectionInitialized") { // Connection ready, send text ws.send(JSON.stringify({ type: "text", text: "مرحبا بك في فصيح " })); } else if (data.audio) { // Process audio chunk const audioData = atob(data.audio); // Handle audio playback } else if (data.type === "error" || data.errorCode) { console.error("Error:", data.errorMessage); } }; ws.onerror = (error) => { console.error("WebSocket error:", error); }; ws.onclose = () => { console.log("WebSocket closed"); }; ``` ## Best Practices 1. **Always initialize**: Send `initConnection` immediately after opening the connection 2. **Handle errors**: Check for error messages in responses 3. **Flush when done**: Use `flush: true` when sending the last text chunk to ensure all audio is generated 4. **Close gracefully**: Send `closeConnection` before closing the WebSocket 5. **Buffer audio**: Collect audio chunks and play them sequentially for smooth playback # Speech to Text Source: https://docs.faseeh.ai/capabilities/speech-to-text Transcribe spoken Arabic audio into text Faseeh's Speech-to-Text API converts spoken Arabic audio into accurate text transcriptions, supporting multiple dialects and providing precise word-level timestamps. ## Overview The Speech-to-Text capability enables you to: * Transcribe Arabic audio in real-time * Support multiple Arabic dialects * Get accurate transcriptions with timestamps * Handle speaker diarization (coming soon) ## Features
Multi-Dialect Support

Accurate transcription across Arabic dialects

Real-time Processing

Low-latency transcription for live applications

Word-level Timestamps

Precise timing information for each word

High Accuracy

State-of-the-art Arabic speech recognition

## Coming Soon Speech-to-Text capabilities are currently under development. Check back soon for API endpoints and documentation. **Status**: Speech-to-Text API endpoints will be available in a future release. Stay tuned for updates! # Voice Cloning Source: https://docs.faseeh.ai/capabilities/voice-cloning Clone and design custom Arabic voices Faseeh's Voice Cloning technology allows you to create custom Arabic voices from audio samples, enabling personalized voice synthesis for your applications. ## Overview Voice Cloning enables you to: * Create custom voices from audio samples * Clone voices in various Arabic dialects * Use cloned voices in text-to-speech generation * Manage your voice library ## Features
High-Quality Cloning

Create lifelike voice clones from short audio samples

Multi-Dialect Support

Clone voices across different Arabic dialects

Voice Library

Manage and organize your custom voices

Easy Integration

Use cloned voices seamlessly with TTS API

## Voice Cloning Process 1. **Upload Audio Sample**: Provide a high-quality audio sample of the voice you want to clone 2. **Processing**: Faseeh processes the sample and creates a voice model 3. **Voice ID**: Receive a unique voice ID for your cloned voice 4. **Use in TTS**: Use the voice ID in text-to-speech generation requests ## Best Practices * **Audio Quality**: Use high-quality audio samples (minimum 1 minute recommended) * **Clear Speech**: Ensure the audio contains clear, natural speech * **Consistent Environment**: Record in a quiet environment with minimal background noise * **Multiple Samples**: Provide multiple samples for better voice quality ## Coming Soon Voice Cloning API endpoints are currently under development. Check back soon for detailed API documentation. **Status**: Voice Cloning API endpoints will be available in a future release. Stay tuned for updates! # Voice Isolation Source: https://docs.faseeh.ai/capabilities/voice-isolation Isolate voices from background noise Faseeh's Voice Isolation technology separates clean speech from background noise, improving audio quality for transcription and voice cloning applications. ## Overview Voice Isolation helps you: * Remove background noise from audio recordings * Enhance speech clarity for better transcription * Prepare clean audio for voice cloning * Improve audio quality for downstream processing ## Features
Advanced Noise Reduction

AI-powered noise removal while preserving speech quality

Real-time Processing

Low-latency isolation for live audio streams

Multi-Speaker Support

Isolate individual speakers in multi-speaker recordings

High Fidelity

Maintains natural speech characteristics

## Use Cases * **Pre-processing for Transcription**: Clean audio before sending to speech-to-text * **Voice Cloning Preparation**: Isolate clean speech for better voice cloning results * **Podcast Production**: Remove background noise from podcast recordings * **Call Quality Enhancement**: Improve audio quality in telephony applications ## Coming Soon Voice Isolation API endpoints are currently under development. Check back soon for detailed API documentation. **Status**: Voice Isolation API endpoints will be available in a future release. Stay tuned for updates! # Self Hosting Source: https://docs.faseeh.ai/docs/capabilities/on ## **Introduction** On-prem deployment allows you to run **FASEEH** entirely within your own infrastructure—inside your data center or private environment. This option is built for enterprises and regulated industries that require full control over data, security, and performance. By removing dependency on public networks, on-prem deployments deliver predictable latency, strong governance, and guaranteed data sovereignty. FASEEH delivers **native Arabic speech perfected for the GCC and MENA region—without compromise in English quality**, making it suitable for both local and global use cases. ## **Why On-Premises?** ### **🔹 Ultra-Low Latency** Local deployment eliminates internet round-trips, enabling **sub-100ms latency** for real-time voice and conversational workloads. ### **🔹 Data Residency & Compliance** All data remains inside your controlled environment—ideal for banking, healthcare, telecom, and government deployments. ### **🔹 Full Infrastructure Control** You control infrastructure sizing, scaling, networking, security policies, and upgrade cycles, aligned with internal IT and compliance standards. Canvas Image 1 1768219755658 ## **Security** On-prem deployment ensures **zero data transmission over the public internet**. * Customer data stays fully within your network * Integrates with internal IAM, firewalls, and security tooling * Supports strict privacy, audit, and regulatory requirements Built for environments where data control is non-negotiable. ## **Performance** FASEEH on-prem is optimized for production-grade, real-time workloads. * **Sub-100ms median latency** for short to mid-length utterances * Stable, predictable performance under high concurrency * Optimized for conversational AI, voice agents, and real-time applications * High naturalness in both **Arabic (GCC-native dialects)** and **English** Actual performance depends on deployment configuration, concurrency, and tuning. ## **Models Available** FASEEH on-prem supports two production-ready models: ### **FASEEH Large** * Superior prosody and naturalness * Best-in-class voice cloning and dubbing quality * Fewer pronunciation and expression errors * Ideal for media, dubbing, premium voice agents, and high-fidelity use cases ### **FASEEH Mini** * Faster and more cost-efficient * Delivers \~**90% of FASEEH Large quality** * Optimized for scale and high-concurrency deployments * Ideal for conversational AI, call centers, and enterprise automation ## **Deployment Support** Actualize supports on-prem deployments across: * Customer-owned data centers * Private environments * Cloud providers using dedicated or isolated infrastructure We assist with **hardware procurement, provisioning, and setup**, whether machines run on-prem or in supported cloud environments. Actualize is a **Microsoft Partner**, enabling aligned enterprise deployments with Microsoft ecosystem tooling, governance, and support where required. ## **When to Choose On-Prem** Choose on-prem deployment if you require: * Guaranteed data residency * Regulatory compliance * Predictable, ultra-low latency * Deep integration with internal systems * Long-term scalability under your control ## **Next Steps** To proceed with an on-prem deployment: * Validate hardware and capacity requirements * Align on network and security prerequisites * Contact the FASEEH team for deployment architecture and sizing guidance 📩 **Reach out:** [**support@faseeh.ai**](mailto:support@faseeh.ai) Enterprise support and tailored deployment options are available. # Data Privacy Compliance Source: https://docs.faseeh.ai/docs/getting-started/complaince ### **Compliance & Data Privacy** FASEEH is built to meet the requirements of **regulated, production-grade Voice AI systems**, where data privacy, security, and control are non-negotiable. ### **HIPAA Compliance** FASEEH supports **HIPAA-compliant deployments** through an explicit **HIPAA Mode**. When HIPAA Mode is enabled: * No call recordings are stored on FASEEH servers * Audio streams are processed in-memory only * Zero persistent storage of voice data * All data ownership remains with the customer * No secondary usage of audio for training or analytics This enables Voice AI companies and enterprises to confidently use FASEEH for healthcare, financial services, government, and regulated enterprise workloads without compromising compliance. HIPAA Mode is available across **SaaS, Dedicated VPC, and On-Prem deployments**. **Data Ownership & Control** FASEEH follows a **customer-first data model**: * Customers retain **full ownership** of all audio, transcripts, and metadata * No recordings are retained unless explicitly configured by the customer * Deployment-level controls determine retention, logging, and access policies * Suitable for **air-gapped and sovereign environments** ### **Security & Certifications** FASEEH is designed with enterprise security standards from day one. * **HIPAA** — Certified * **SOC 2** — *in progress* * **ISO 27001** — *in progress* Security controls already implemented include: * Strict access isolation per tenant * Encrypted data in transit * Environment-level security boundaries (SaaS, VPC, On-Prem) * Operational auditability for enterprise customers ### **Built for Regulated Voice AI** FASEEH is trusted in environments where: * Voice data is sensitive by default * Retention must be explicitly disabled * Infrastructure must support **on-prem or sovereign hosting** * Compliance is enforced at the **architecture level**, not through policy documents FASEEH enables teams to build **real-time Voice AI systems** with confidence — without sacrificing privacy, performance, or control. ### Customer Responsibility Customers are **solely responsible** for: * The content generated by applications using FASEEH * Ensuring generated outputs comply with applicable laws, regulations, and industry standards * Implementing appropriate human review, guardrails, and usage policies where required FASEEH provides the underlying speech and inference infrastructure but does not control, moderate, or assume responsibility for customer-generated content. # Support Source: https://docs.faseeh.ai/docs/getting-started/support **Getting Help with FASEEH** If you need help integrating, deploying, or troubleshooting FASEEH, our team is here to assist.\ \ **Contact Support** Email [support@faseeh.ai](mailto:support@faseeh.ai) with your request and our team will get back to you promptly. You can expect a response within **48–72 hours**. ## **What We Can Help With** * API usage and integration questions * Deployment support (SaaS, dedicated, or on-prem) * Performance or quality issues * Configuration and setup guidance * Account and access-related queries Please include relevant details such as request IDs, timestamps, deployment type, and a brief description of the issue to help us respond faster. ## **Support Plans** **If your organization has an Enterprise or contracted support plan, your request will be handled according to your agreed SLA.** If you are using FASEEH without a contracted support plan, you can still reach out via email and our team will assist on a best-effort basis. We’re committed to making sure FASEEH runs reliably in production—especially for enterprise and regulated environments. # Introduction Source: https://docs.faseeh.ai/index Faseeh - First True Arabic Voice AI that speaks Dialects From Abu Dhabi to Rabat with Voice Cloning & On-prem support ## Resources Convert text into lifelike speech Deploy Faseeh on your own infrastructure Learn about our compliance and data privacy standards Get help with Faseeh