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

# Quickstart

> From an API key to a completed call report

## 1. Get a key

Mint one in the console under **Settings → API keys**. The plaintext is shown
once. Export it:

```bash theme={null}
export VODEX_KEY=vdx_live_your_key_here
```

## 2. Find a number to call from

```bash theme={null}
curl https://apiv2.vodex.ai/v1/phone-numbers \
  -H "Authorization: Bearer $VODEX_KEY"
```

A bare JSON array. Take the `id` (`num-14155551234`) of a number with outbound
enabled — its E.164 value works too.

## 3. Find the assistant

```bash theme={null}
curl https://apiv2.vodex.ai/v1/console/assistants \
  -H "Authorization: Bearer $VODEX_KEY"
```

<Note>
  `assistantId` is the assistant's **uuid**, shown on its configure page in the
  console. Names and slugs are not accepted.
</Note>

## 4. Place the call

```bash theme={null}
curl -X POST https://apiv2.vodex.ai/v1/calls \
  -H "Authorization: Bearer $VODEX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assistantId": "3f9c…",
    "toNumber": "+919876543210",
    "fromNumberId": "num-14155551234",
    "contactRef": "your-own-record-id",
    "variables": { "firstName": "Priya", "balance": "412.50" }
  }'
```

```json theme={null}
{ "callId": "call-cfa78cf0", "room": "call-cfa78cf0", "to": "+919876543210", "from": "+14155551234", "cell": "us-central1" }
```

This returns as soon as the room exists and the INVITE is on its way — it does
**not** wait for an answer, which takes seconds. The call appears in the calls
list from this moment, so a carrier rejection (which produces no trace at all,
because no agent ever joins) is visible rather than looking like a call that
simply never rang.

`contactRef` is an opaque reference of yours, echoed back on the webhook — put
your own account or record id there and the end-of-call report joins to your
data without matching on a phone number. `variables` are per-call `{{var}}`
values merged over the assistant's own.

## 5. Receive the report

Polling `GET /v1/calls/{id}` works, but the report comes to you. Point Vodex at
your endpoint once:

```bash theme={null}
curl -X PUT https://apiv2.vodex.ai/v1/webhook-config \
  -H "Authorization: Bearer $VODEX_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://your-app.example.com/hooks/vodex" }'
```

First-time setup mints the signing secret and returns it **once**. When the call
ends you receive a signed `interaction.completed` — see
[Webhooks](/webhooks) for the payload and how to verify it.

## Next

<CardGroup cols={2}>
  <Card title="Webhooks" icon="webhook" href="/webhooks">
    Verifying the report, and reading `outcome` without sniffing strings.
  </Card>

  <Card title="Connect an AI assistant" icon="robot" href="/ai-assistant">
    Ask about your calls, batches and usage over MCP — no key to copy.
  </Card>

  <Card title="Batch dialing" icon="list" href="/api-reference/batches/create-a-batch">
    A list in, calls out, with retry policy and per-number rotation.
  </Card>

  <Card title="SMS" icon="message" href="/api-reference/sms/send-an-sms">
    The same interaction stream, with `channel: "sms"`.
  </Card>
</CardGroup>
