GET /api/v1/voice/calls/{id} retorna o status da chamada, a duração, os créditos cobrados, o resumo, a análise e a transcrição. Liste as chamadas com GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= (user_id: o seu próprio id da pessoa, vindo de um token de chamada web). Seus turns são o registro de depuração da chamada, turno a turno: para onde o tempo foi desde que quem liga terminou de falar até ouvir a resposta, em milissegundos — waitMs (fim da fala), sttMs (reconhecimento), llmMs (primeira palavra do modelo, mais uma por rodada de funções), ttsMs (primeiro áudio da voz), firstAudioMs (resposta ouvida) — com as funções chamadas, as interrupções e os erros. A página da chamada também o mostra.
Com recording_enabled, cada chamada é gravada como um WAV de dois canais: quem liga à esquerda, o agente à direita, na taxa de amostragem da chamada. Com recording_consent: "announce", o agente diz primeiro que a chamada é gravada; com "ask", ele pergunta, e a gravação só é mantida se quem liga concordar (sem resposta conta como não); com "none", nada é dito. Verifique o que a lei exige onde você e quem liga estão.
As gravações ficam no armazenamento da EvaSay, ou no seu próprio bucket compatível com S3 (AWS S3, Cloudflare R2, Google Cloud Storage, Supabase, MinIO) configurado em Integrações → Webhooks e notificações → Armazenamento de gravações. O worker que executa a chamada envia o arquivo direto para o bucket. GET /api/v1/voice/calls/{id} retorna um recordingUrl válido por uma hora depois que a gravação é armazenada, e recording.status (recording, stored, declined ou failed).
DELETE /api/v1/voice/calls/{id} exclui uma chamada encerrada com transcrição, gravação (no armazenamento da EvaSay ou no seu próprio bucket), análise e registros de entrega de webhooks. Os Credits usados continuam no histórico de créditos. Uma chamada que ainda não pode ser excluída responde 409 com code call_not_deletable_yet: ainda está em andamento ou acabou de terminar, ainda está sendo cobrada, a gravação pode estar sendo enviada, ou ela deve Credits que o saldo não cobriu (adicione Credits antes).
Quando alguém pede a exclusão dos próprios dados, POST /api/v1/voice/calls/delete-by-caller com { "phone_number": "+14155550123" } exclui todas as chamadas com esse número (o de quem ligou nas recebidas, o número chamado nas feitas), ou com { "user_id": "..." } todas as chamadas web feitas com esse user_id no token. A resposta é { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }: no máximo 200 chamadas por solicitação, então repita enquanto more for true, e mais tarde para as chamadas em kept_back. Se o número estiver na lista de não ligar, ele continua nela. O painel faz o mesmo em Chamadas → Excluir dados de quem ligou.