GET /api/v1/voice/calls/{id} devuelve el estado de la llamada, su duración, los créditos cobrados, el resumen, el análisis y la transcripción. Lista las llamadas con GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= (user_id: tu propio id de la persona, tomado de un token de llamada web). Sus turns son el registro de depuración turno a turno de la llamada: en qué se fue el tiempo desde que quien llama termina de hablar hasta que oye la respuesta, en milisegundos — waitMs (fin del habla), sttMs (reconocimiento), llmMs (primera palabra del modelo, una más por cada ronda de funciones), ttsMs (primer audio de la voz), firstAudioMs (se oyó la respuesta) — con las funciones llamadas, las interrupciones y los errores. La página de la llamada también lo muestra.
Con recording_enabled, cada llamada se graba como un WAV de dos canales: quien llama a la izquierda, el agente a la derecha, con la frecuencia de muestreo de la llamada. Con recording_consent: "announce", el agente dice primero que la llamada se graba; con "ask" lo pregunta, y la grabación se conserva solo si quien llama acepta (no responder cuenta como un no); con "none" no se dice nada. Comprueba qué exige la ley donde estáis tú y quienes te llaman.
Las grabaciones se guardan en el almacenamiento de EvaSay o en tu propio bucket compatible con S3 (AWS S3, Cloudflare R2, Google Cloud Storage, Supabase, MinIO) configurado en Integraciones → Webhooks y notificaciones → Almacenamiento de grabaciones. El worker que ejecuta la llamada sube el archivo directamente al bucket. GET /api/v1/voice/calls/{id} devuelve un recordingUrl válido durante una hora una vez almacenada la grabación, y recording.status (recording, stored, declined o failed).
DELETE /api/v1/voice/calls/{id} elimina una llamada terminada con su transcripción, grabación (en el almacenamiento de EvaSay o en tu propio bucket), análisis y registros de entrega de webhooks. Los Credits usados siguen en tu historial de créditos. Una llamada que aún no se puede eliminar responde 409 con code call_not_deletable_yet: sigue en curso o acaba de terminar, aún se está facturando, su grabación puede estar subiéndose o debe Credits que tu saldo no cubrió (añade Credits primero).
Cuando una persona pide que borres sus datos, POST /api/v1/voice/calls/delete-by-caller con { "phone_number": "+14155550123" } elimina todas las llamadas con ese número (el del llamante en las entrantes, el número llamado en las salientes), o con { "user_id": "..." } todas las llamadas web hechas con ese user_id en su token. Responde { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }: como máximo 200 llamadas por solicitud, así que vuelve a pedirlo mientras more sea true, y más tarde para las llamadas de kept_back. Si el número está en tu lista de no llamar, sigue en ella. El panel hace lo mismo en Llamadas → Eliminar datos de un llamante.