URLs signées
URLs signées à courte durée de vie pour la lecture audio intégrable de conversations.
Quand en utiliser une
Les clés API sont conçues pour une utilisation serveur à serveur. Quand vous devez intégrer l'audio d'une conversation dans une interface orientée client sans proxifier les octets via votre serveur, générez une URL signée à courte durée de vie à la demande et transmettez-la au navigateur. L'URL signée est limitée à une conversation, expire rapidement et ne porte aucune autre autorisation. La perdre ne compromet pas votre clé API.Pour des conversations WebRTC en temps réel depuis un navigateur, utilisez le handshake WebRTC (POST /conversation/connect → POST /conversation/:session_id/offer ; trickle ICE via PATCH /conversation/:session_id/ice uniquement si nécessaire). Il n'existe pas de transport URL-signée pour le trafic WebRTC en direct.
Lecture audio de conversation
Appelez GET /api/v1/conversations/{conversation_id}/audio depuis votre serveur (portée : conversations:read) pour obtenir une URL signée à courte durée de vie pour l'audio d'une conversation terminée. Transmettez l'URL au navigateur pour une lecture directe. Aucun octet audio ne transite par votre serveur.
curl https://api.aethexai.com/api/v1/conversations/{conversation_id}/audio \
-H "X-API-Key: ae_live_..."Quand une URL signée échoue
Si le jeton a expiré ou a été altéré, la requête audio est rejetée avec 401. Générez une nouvelle URL signée et réessayez. Il n'y a intentionnellement pas de flux de rafraîchissement ; le TTL est court.
Le TTL court s'est écoulé, ou le jeton a été altéré en transit. Les deux produisent le même 401.
Générez des URLs signées au moment où le client est sur le point de récupérer l'audio, pas à l'avance. Ne les mettez pas en cache.
{
"detail": "Invalid or expired audio token"
}L'URL audio est dépourvue de son paramètre token et aucune clé API n'a été fournie.
Demandez toujours l'URL audio depuis votre serveur — il générera un nouveau jeton à la demande. Ne modifiez pas la chaîne de requête.
{
"detail": "Missing audio token or API key"
}