> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useanima.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Conversational Calls

> Understand Anima's REST-hosted and WebSocket-controlled voice-call modes.

# Conversational Calls

Anima supports two voice-call modes. Pick the mode based on who should drive the live conversation: Anima's hosted loop, or your own agent over WebSocket.

## Modes

| Mode | How to start | Who drives the conversation | Best for |
| - | - | - | - |
| REST hosted | `POST /v1/voice/calls` | Anima attaches a server-side conversation loop after dialing | "Call me now" demos, scripted follow-up calls, quick production calls |
| WebSocket BYO agent | Voice WebSocket / SDK connection | Your agent runtime accepts calls, streams events, and sends speech/control messages | Custom agents, complex routing, external memory, custom tool orchestration |

Both modes use the same voice pipeline, phone identity, call records, transcripts, guardrails, and plan caps. The agent speaks with its configured voice — the catalog is multilingual (English, Spanish, French, German, Italian, Japanese, Dutch), so see the [Voice Catalog](/voice-catalog) to browse and set one.

## REST hosted calls

Use REST when you want one HTTP request to start a call and let Anima handle the live response loop.

```bash theme={null}
curl -X POST https://api.useanima.sh/v1/voice/calls \
  -H "Authorization: Bearer ak_..." \
  -H "Content-Type: application/json" \
  -d '{
    "agentId": "agt_...",
    "to": "+15551234567",
    "greeting": "Hi, this is my Anima agent. I am calling from my own number."
  }'
```

Anima attaches the hosted conversation loop after dialing. The first spoken line comes from `greeting`; deeper behavior comes from the agent configuration and the hosted voice loop.

## WebSocket-controlled calls

Use the Voice WebSocket when your own agent runtime needs full control over the call — you bring the brain (your own LLM) and Anima handles the voice I/O.

```ts theme={null}
const conn = anima.calls.connect({ agentId: "agt_..." });

conn.on("message", (message) => {
  if (message.type === "call.transcription") {
    console.log(message.data?.text);
  }
});

conn.createCall("+15551234567", {
  greeting: "Hi, this is my Anima agent.",
});
```

The WebSocket path is the right choice when you need custom memory, custom tool routing, multi-agent handoff, or external application state during the live call.

## What Anima handles

* Number ownership and call placement
* The voice pipeline (speech-to-text, speech, barge-in)
* TCPA consent attestation, plan-cap, and voice spend gates (RND scrubbing, DNC scrubbing and calling-hour windows stay with you)
* Call lifecycle records
* Transcripts and post-call artifacts
* Webhooks for call lifecycle events

## What your app still owns

* The lawful basis and consent record for contacting the recipient
* Reassigned Numbers Database scrubbing — Anima does not query it for you
* Do-Not-Call registry scrubbing, federal and state
* Calling hours in the recipient's local time — Anima does not check the clock
* Agent behavior and escalation policy
* Any business-specific data used during the call
* Follow-up workflows after the call ends

**Before your agent places its first call,** enable outbound by completing the one-time consent attestation in **Settings → Outbound Calling & SMS** (Starter plan and above) — see [Compliance guardrails](/phone#compliance-guardrails).

## Related docs

* [Quickstart: Voice Calls](/quickstart-voice)
* [Voice WebSocket Protocol](/protocols/voice-websocket)
* [Call Intelligence](/call-intelligence)
* [Pricing & Limits](/pricing-and-limits)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.