GET /api/v1/voice/calls/{id} geeft de status van het gesprek, de duur, de in rekening gebrachte credits, de samenvatting, de analyse en het transcript. Geef gesprekken weer met GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= (user_id: je eigen id voor de persoon, uit een webgesprekstoken). De turns ervan zijn het foutopsporingslogboek van het gesprek, beurt voor beurt: waar de tijd heen ging vanaf het moment dat de beller klaar was met praten tot het horen van het antwoord, in milliseconden — waitMs (einde van de spraak), sttMs (herkenning), llmMs (eerste woord van het model, één extra per ronde functies), ttsMs (eerste geluid van de stem), firstAudioMs (antwoord gehoord) — met de aangeroepen functies, onderbrekingen en fouten. De gesprekspagina toont het ook.
Met recording_enabled wordt elk gesprek opgenomen als een WAV met twee kanalen: de beller links, de agent rechts, op de samplefrequentie van het gesprek. Met recording_consent: "announce" zegt de agent eerst dat het gesprek wordt opgenomen; met "ask" vraagt hij erom, en de opname wordt alleen bewaard als de beller akkoord gaat (geen antwoord telt als nee); met "none" wordt niets gezegd. Controleer wat de wet vereist op de plek waar jij en je bellers zich bevinden.
Opnames worden bewaard in de opslag van EvaSay, of in je eigen S3-compatibele bucket (AWS S3, Cloudflare R2, Google Cloud Storage, Supabase, MinIO) die je instelt onder Integraties → Webhooks en meldingen → Opslag van opnames. De worker die het gesprek verwerkt, uploadt het bestand rechtstreeks naar de bucket. GET /api/v1/voice/calls/{id} geeft een recordingUrl die een uur geldig is zodra de opname is opgeslagen, en recording.status (recording, stored, declined of failed).
DELETE /api/v1/voice/calls/{id} verwijdert een beëindigd gesprek met transcript, opname (in de opslag van EvaSay of in je eigen bucket), analyse en webhook-leveringen. De gebruikte Credits blijven in je creditgeschiedenis. Een gesprek dat nog niet verwijderd kan worden, antwoordt 409 met code call_not_deletable_yet: het loopt nog of is net afgelopen, wordt nog afgerekend, de opname wordt mogelijk nog geüpload, of er staan Credits open die je saldo niet dekte (voeg eerst Credits toe).
Als iemand vraagt zijn gegevens te verwijderen, verwijdert POST /api/v1/voice/calls/delete-by-caller met { "phone_number": "+14155550123" } alle gesprekken met dat nummer (het nummer van de beller bij inkomende gesprekken, het gebelde nummer bij uitgaande), of met { "user_id": "..." } alle webgesprekken met die user_id in hun token. Het antwoord is { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }: hoogstens 200 gesprekken per verzoek, dus vraag opnieuw zolang more true is, en later nog eens voor de gesprekken in kept_back. Staat het nummer op je niet-bellen-lijst, dan blijft het daarop. In het dashboard kan hetzelfde via Gesprekken → Gegevens van een beller verwijderen.