Skip to main content

Answer this call

POST 

/api/calls/:callId/answer

The call-id keyed form of the conversation endpoint above, for clients that can have more than one call in flight. Identical work, identical authorization (reply on the call's own conversation) — the client names the call instead of leaving the server to infer it from the thread.

The answer is CLAIMED atomically before anything is sent to the media sidecar or to Meta, so two surfaces answering the same ring produce exactly one accept. The loser gets 409 with answered_by and has touched nothing.

"Answer & hold" (SES-1 F2 dilim 2). Passing hold_call_id makes this one compound verb: the named call is parked at the media bridge FIRST, and only then is the provider asked to accept this one. The order is fixed — reversing it would leave the agent's microphone live on two customers at once. A park the bridge refuses cancels the whole request (the ring stays live on every device); a park that SUCCEEDS is written and broadcast even if the answer that motivated it then fails, so no surface is ever left drawing a live call for a customer who is on hold. Requires a bridge with the hold primitive — see the 501.

The per-agent ceiling. An agent already on calls.routing.agent_leg_limit open calls (default 2, held ones included) is refused with 409 agent_leg_limit. Nothing is claimed and nothing leaves this server, so the call goes on ringing for every colleague who could still take it.

Request​

Responses​

The call is active. When hold_call_id was given and a park was performed, data.held carries the other call's hold state in the same shape POST /api/calls/{callId}/hold answers with; it is null otherwise.