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

# API overview

> Everything in the dashboard, from your own code.

The Qall API is REST over HTTPS and returns JSON. Everything lives under `/api`.

```text theme={null}
https://qall.io
```

## Authenticating

Send an [API key](/api-keys) as a bearer token.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://qall.io/api/assistants \
    -H "Authorization: Bearer $QALL_API_KEY"
  ```

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

  response = requests.get(
      "https://qall.io/api/assistants",
      headers={"Authorization": f"Bearer {os.environ['QALL_API_KEY']}"},
      timeout=30,
  )
  response.raise_for_status()
  ```
</CodeGroup>

Your key acts with the permissions of the person who created it, in their
organisation. Everything you read and write is scoped to that organisation.

## What you can do

| | |
| - | - |
| **Assistants** | Create and configure them, attach tools, knowledge and playbooks |
| **Calls** | List, filter, read transcripts, download recordings, export |
| **Contacts** | Create, update, search, manage custom properties |
| **Campaigns** | Create, import contacts, start, pause, read progress |
| **Tools and playbooks** | Full management, including test runs |
| **Knowledge** | Upload documents and attach them |
| **Analytics** | Run charts and export results |
| **Web calls** | Start a browser call from your own front end |

Browse every endpoint under **Endpoints**.

Some of the dashboard has no API: creating API keys, billing, your own profile,
and organisation membership are session-only, by design.

## Responses

Most endpoints wrap the result:

```json theme={null}
{ "success": true, "message": "OK", "data": { } }
```

Assistant endpoints return the object directly instead, and the calls endpoints
have their own shape. Each endpoint page shows exactly what it returns, generated
from the server — trust that over any general rule.

## Pagination

List endpoints take `page` and `per_page`.

<Note>
  Contacts takes `page_size` rather than `per_page`. Sending `per_page` there is
  ignored and you'll get the default page size.
</Note>

## Filtering

Many list endpoints let you repeat a filter to widen it, while different filters
narrow:

```text theme={null}
?status=completed&status=failed&direction=inbound
```

reads as *inbound, and either completed or failed*.

## Getting told about calls

Rather than polling for new calls, register a
[webhook](/api-reference/webhooks) and have Qall notify you.


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