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

# Introduction

> The DMLY REST API — contacts, conversations, broadcasts, bookings, finance, webhooks and media.

The DMLY REST API gives you programmatic access to everything your workspace holds: the
CRM, the unified inbox, broadcasts and automations, appointments and classes, the
commercial catalogue, finance, and media.

```bash theme={"dark"}
curl https://dash.dmly.io/api/v1/contacts \
  -H "x-api-key: dmly_xxxxxxxxxxxx"
```

## Base URL

All endpoints live under a single version prefix:

```
https://dash.dmly.io/api/v1
```

<Note>
  If you are on a whitelabel or agency domain, use your own host in place of
  `dash.dmly.io`. The path is always `/api/v1`.
</Note>

## How it works

<Columns cols={2}>
  <Card title="Authentication" icon="key" href="/api-reference/authentication">
    One workspace API key authenticates you and selects the workspace.
  </Card>

  <Card title="Pagination" icon="list" href="/api-reference/pagination">
    Lists return `data`, `links` and `meta`.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/api-reference/errors">
    Conventional status codes and a consistent error body.
  </Card>

  <Card title="Rate limits" icon="gauge-high" href="/api-reference/rate-limits">
    60 requests per minute, per IP address.
  </Card>
</Columns>

## Conventions

* **Identifiers are UUIDs.** Every resource is addressed by its public `uuid`, which the
  API returns as `id`. Internal database ids are never exposed.
* **No workspace in the URL.** Your API key already determines the workspace, so paths look
  like `/contacts/{contact}` rather than `/workspaces/{id}/contacts/{contact}`.
* **Single resources** return `{ "data": { … } }`.
* **JSON in, JSON out.** Send `Content-Type: application/json` on writes. The only
  exception is uploading media (`POST /media`), which takes `multipart/form-data`.

## Events

Rather than polling, subscribe to any of the 73 [webhook topics](/api-reference/webhooks)
and DMLY will post to your endpoint as things happen — a message arrives, an invoice is
paid, an appointment is booked.

## Try it

Every endpoint page has a playground. Paste a workspace API key into the **Authorization**
panel and you can call your real workspace straight from these docs.

<Warning>
  The playground calls the live API against real data. Create a test workspace before
  experimenting with anything destructive.
</Warning>
