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

# Quickstart

> Place your first Web Callback in under 5 minutes.

## 1. Get a sandbox API key

1. Sign up at [wave.sa](https://wave.sa/signup) and complete **Nafath** identity verification.
2. Log in to the dashboard and open **API Keys**.
3. Copy your sandbox key — it starts with `sk_sandbox_`.

<Warning>
  Treat your key like a password. It's shown once on creation; if you lose it, use **Revoke & Regenerate** in the dashboard.
</Warning>

## 2. Place a callback

Send a destination number to `POST /v1/callback`:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.wave.sa/v1/callback \
    -H "Authorization: Bearer sk_sandbox_xxxxxxxxxxxx" \
    -H "Content-Type: application/json" \
    -d '{ "to": "+966500000000" }'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch("https://api.wave.sa/v1/callback", {
    method: "POST",
    headers: {
      Authorization: "Bearer sk_sandbox_xxxxxxxxxxxx",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ to: "+966500000000" }),
  });
  const data = await res.json();
  console.log(data);
  ```

  ```python Python theme={null}
  import requests

  res = requests.post(
      "https://api.wave.sa/v1/callback",
      headers={"Authorization": "Bearer sk_sandbox_xxxxxxxxxxxx"},
      json={"to": "+966500000000"},
  )
  print(res.json())
  ```
</CodeGroup>

## 3. Read the response

A successful request returns **`202 Accepted`**:

```json theme={null}
{
  "call_id": "call_abc123",
  "status": "initiated",
  "sandbox": true,
  "vitalpbx_channel_id": "…",
  "created_at": "2026-06-17T10:00:00.000Z"
}
```

<Note>
  `status` is `initiated` — Wave has placed the call. Terminal statuses (`answered`/`ended`) are not emitted yet. See [Call lifecycle](/web-callback#call-lifecycle).
</Note>

## Next steps

<CardGroup cols={2}>
  <Card title="Sandbox mode" icon="flask" href="/sandbox-mode">
    Trial window, destination lock, and test numbers.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/webhooks">
    Receive call events at your endpoint.
  </Card>
</CardGroup>
