# Quickstart

Create an agent, get an API key, and make your first call. No telephony setup, no provider accounts required — Wakili's hosted default providers work out of the box.

## 1. Create an account and an agent

1. Sign up at [app.wakili.dev/signup](https://app.wakili.dev/signup).
2. In the dashboard, create a new agent. Set:
   - **Name** — anything, for your own reference.
   - **System prompt** — the agent's instructions/persona.
   - **LLM / STT / TTS provider + model** — leave the defaults (`llmgateway`, `groq`, `groq`) if you just want it working; pick specific providers/models per component if you have preferences.
   - **Voice** — a TTS voice id for the chosen TTS provider.
3. Save. Your account starts with 30 free minutes/month on the Starter plan — no card required.

## 2. Generate an API key

In the agent's **Connect** tab, generate an API key. Copy it now — the raw key (`wak_...`) is only ever shown once.

Keep it server-side. It authenticates as your account for every request; anyone with it can start calls and spend your balance.

## 3. Start a call

```bash
curl -X POST https://api.wakili.dev/agents/{agent_id}/calls \
  -H "Authorization: Bearer wak_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Response:

```json
{
  "call_id": "5b1a...",
  "conversation_id": "9e3c...",
  "ws_url": "/calls/5b1a.../talk",
  "expires_at": "2026-08-17T12:05:00Z"
}
```

`ws_url` is relative and single-use — open it as a WebSocket within `expires_at` (a few minutes) or it 404s. Prefix it with your API host, swapping `http`→`ws` / `https`→`wss`:

```
wss://api.wakili.dev/calls/5b1a.../talk
```

## 4. Talk to it

Connect to that WebSocket, send audio, get a spoken reply back. Full protocol: **[The talk WebSocket](/docs/talk-websocket)**.

Minimal shape:

- Send mic audio as **binary WebSocket frames** while the user is speaking.
- Send `{"type":"end_turn"}` as a **text frame** when they stop.
- Receive `{"type":"transcript",...}`, then `{"type":"reply_text",...}`, then binary audio frames, then `{"type":"reply_audio_end"}`.

## 5. See the call afterward

```bash
curl https://api.wakili.dev/calls/{call_id} \
  -H "Authorization: Bearer wak_your_api_key"
```

Returns status, duration, cost, full message transcript, and (once processed) a signed recording URL. Full shape: **[Calls API](/docs/calls-api)**.

## Next

- Want a working example instead of curl? **[Next.js integration guide](/docs/nextjs-integration)** — browser push-to-talk, API key kept server-side.
- Managing agents from code instead of the dashboard? **[Agents API](/docs/agents-api)**.
