---
title: "Place a voice call"
locale: en
url: https://tlg.builera.app/en/docs/reference/rest/calls.start
verified: 2026-10-24
app_version: "2.0"
generated: true
---

# Place a voice call

Place a Telegram 1:1 voice call from the account that owns this private chat. Always ask the user to confirm before dialing. The audio plays in a browser tab the user keeps ready (none → audio_endpoint_required); the agent never hears or speaks. One call per account at a time; people who said STOP cannot be called; Safe accounts at most 10 calls a day, at least 60 s apart. Returns callId — follow it with calls.get or the call.* events.

Place a Telegram 1:1 voice call from the account that owns this private chat. Always ask the user to confirm before dialing. The audio plays in a browser tab the user keeps ready (none → audio_endpoint_required); the agent never hears or speaks. One call per account at a time; people who said STOP cannot be called; Safe accounts at most 10 calls a day, at least 60 s apart. Returns callId — follow it with calls.get or the call.* events.

## Overview

| Name | Value |
| --- | --- |
| Code | `calls.start` |
| Scope needed | `calls` |
| Risk | Dangerous |
| May need confirmation | Yes |
| Runs as | Queues work for a node |
| Needs `Idempotency-Key` | Yes |
| Member roles allowed | `owner`, `manager`, `agent` |
| Needs a worker from version | `1.0.44` |
| In the app | Inbox → private chat → Call button |

## Input fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conversationId` | `uuid` | Yes |   |

## Example request

```bash
curl -X POST https://tlg.builera.app/api/public/v2/ops/calls.start \
  -H "Authorization: Bearer $TELEGRAM_AUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <unique key per operation>" \
  -d '{"conversationId":"00000000-0000-0000-0000-000000000000"}'
```

## Output fields (`data`)

| Field | Type | Required |
| --- | --- | --- |
| `ok` | `true` | Yes |
| `callId` | `text` | Yes |
| `state` | `"active" \| "ended" \| "preparing" \| "requesting" \| "ringing" \| "exchanging_keys" \| "connecting"` | Yes |
| `jobId` | `text` | Yes |

## Example answer

```json
{
  "data": {
    "ok": true,
    "callId": "00000000-0000-4000-8000-000000000000",
    "state": "active",
    "jobId": "00000000-0000-4000-8000-000000000000"
  }
}
```

## Using it over MCP

Not listed on any profile: call `tools_describe` then `tools_run` with `code: "calls.start"`. Tool name when listed: `calls_start`.
