Développeurs

API, WebSocket TTS & scripts prêts à l'emploi

Clés API

Connectez-vous pour gérer vos clés API

Vos voix clonées

Connectez-vous pour voir vos voix et copier leurs IDs.

Voix communautaires

Recherchez parmi 100k+ voix pour copier leur ID

Infos rapides

  • Auth: Header X-API-Key
  • WebSocket: Temps réel, pas de queue
  • Facturation: Débit auto du crédit
  • Storage: URLs signées Supabase

Endpoints API

MéthodeEndpointDescription
POST/api/v1/tts/TTS synchrone (texte court)
WS/api/v1/tts/streamTTS WebSocket temps réel
GET/api/v1/voices/Liste vos voix privées
GET/api/v1/tts/historyHistorique TTS
GET/api/v1/community/models100k+ voix communauté
https://api.hadra-ai.com/api/v1

Scripts prêts à l'emploi

"""
Client Python pour l'API HadraAI
Installez: pip install httpx
"""
import os
import httpx

API_KEY = os.getenv("HADRA_API_KEY", "VOTRE_CLE_API")
BASE_URL = "https://api.hadra-ai.com/api/v1"

def get_client():
    return httpx.Client(base_url=BASE_URL, headers={"X-API-Key": API_KEY}, timeout=30.0)

# ═══════════════════════════════════════════════════════════════
# 1. LISTER VOS VOIX PRIVÉES
# ═══════════════════════════════════════════════════════════════
def list_my_voices():
    """Récupère vos voix clonées avec leurs IDs."""
    with get_client() as client:
        resp = client.get("/voices/")
        resp.raise_for_status()
        voices = resp.json()["voices"]
        for v in voices:
            print(f"ID: {v['voice_id']} | Titre: {v['title']}")
        return voices

# ═══════════════════════════════════════════════════════════════
# 2. CHERCHER DANS LES VOIX COMMUNAUTAIRES
# ═══════════════════════════════════════════════════════════════
def search_community_voices(query: str = "", page: int = 1):
    """Recherche dans les 100k+ voix communautaires."""
    with get_client() as client:
        resp = client.get(f"/community/models?search={query}&page={page}&page_size=10")
        resp.raise_for_status()
        models = resp.json()["models"]
        for m in models:
            print(f"ID: {m['voice_id']} | {m['title']} by {m['author_nickname']}")
        return models

# ═══════════════════════════════════════════════════════════════
# 3. GÉNÉRER DE L'AUDIO TTS
# ═══════════════════════════════════════════════════════════════
def generate_tts(text: str, voice_id: str = None, auto_emotions: bool = False):
    """Génère de l'audio TTS."""
    with get_client() as client:
        resp = client.post("/tts/", json={
            "text": text,
            "voice_id": voice_id,
            "format": "mp3",
            "auto_emotions": auto_emotions,
        })
        resp.raise_for_status()
        return resp.json()

if __name__ == "__main__":
    # Lister vos voix
    print("=== Vos voix clonées ===")
    voices = list_my_voices()
    
    # Chercher une voix communautaire
    print("\n=== Voix communautaires ===")
    search_community_voices("french")
    
    # Générer TTS avec votre première voix
    if voices:
        result = generate_tts("Bonjour!", voice_id=voices[0]["voice_id"], auto_emotions=True)
        print(f"\nAudio URL: {result['audio_url']}")

Dépendances: pip install httpx httpx-ws

Paramètres TTS

ParamètreTypeDéfautDescription
text *stringTexte à synthétiser (requis)
voice_idstringdefaultID de la voix clonée (voir section "Vos voix")
formatstringmp3mp3, wav, pcm, opus
speedfloat1.0Vitesse (0.5 – 2.0)
volumefloat0.0Volume dB (-20 à +20)
temperaturefloat0.7Variabilité (0.1 – 1.5)
auto_emotionsbooleanfalseAnalyse IA + tags d'émotion FishAudio (mode expressif)
normalizebooleantrueNormalisation audio. Quand auto_emotions=true, la normalisation est forcée à false côté backend.
latencystringbalancednormal, balanced, low