Audio, events, and limits
What comes back from a honeypot call, and where it stops.Over the plain WebSocket#
Open wss://api.callerapi.com/api/voice/honeypot/stream?key=YOUR_KEY and send the start message as on Connect your switch. Then:Send the caller's audio as binary frames.
Receive the persona's audio as binary frames in your encoding and sample rate. Play it to the caller.
On {"type":"clear"}, drop any queued playback. The caller interrupted the persona.
{"type":"mark","name":"..."} is advisory. Ignore it if you do not need it.
Do not send the persona's own voice back. Send the caller only.
Events arrive as JSON text frames, the same as the filter, plus session.error when speech synthesis fails. See Events and webhooks.What you get back#
session.started carries the persona object.session.ended carries the verdict, the intel, and the transcript with the persona's name as one speaker and caller as the other. reported_numbers counts the caller plus every callback number filed.Read a session later with Get one session. Honeypot sessions have kind: "honeypot" and a persona_id.Personas#
Every call gets a different persona, chosen at random from the cast. Pass persona=<id> to use one character on every call.{
"id": "grandma_edna",
"name": "Edna Whitaker",
"age": 78,
"gender": "female",
"archetype": "grandmother",
"language": "en",
"greeting": "Hello? Whitaker residence."
}
Limits#
| Limit | Value |
|---|
| Call length | 15 minutes, then the persona hangs up. |
| Silence | The persona prompts after 8 seconds. After three unanswered prompts it hangs up. |
| Cost | 8 credits per started minute. 4 more per minute on a number CallerAPI provides. |
| Filing | report defaults to true. The threshold is a score of 0.8. The same never-filed categories apply as for the filter. See Block a caller. |
Modified at 2026-09-18 16:57:06