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

# Conventions

> Pagination, timestamp formatting, and the response envelope shared by every endpoint in the Get2Dial API.

Shared conventions across every endpoint.

## Response envelope

Every response, success or error, has the same shell:

```json theme={null}
{
  "status": "success",
  "data": { },
  "total": 50,
  "limit": 50,
  "offset": 0
}
```

| Field                           | Present when                                       |
| ------------------------------- | -------------------------------------------------- |
| `status`                        | Always — `success` or `error`                      |
| `data`                          | Success responses                                  |
| `total`, `limit`, `offset`      | List (paginated) endpoints                         |
| `message`, `code`, `request_id` | Error responses — see [Errors](/developers/errors) |
| `field_errors`                  | Validation errors on specific fields               |

## Pagination

List endpoints use **offset and limit**, not cursors:

```
GET /api/v1/cdrs?limit=100&offset=200
```

| Parameter | Default | Maximum |
| --------- | ------- | ------- |
| `limit`   | 50      | 500     |

<Note>
  A `limit` outside 1–500 resets to the default of 50 — it does not clamp to 500. If you
  request `limit=1000`, you get 50 results back, not 500.
</Note>

## Timestamps

Query parameters that accept a timestamp use RFC 3339 (`2026-08-05T14:30:00Z`).

## Unknown fields

The API ignores unknown fields on request bodies rather than rejecting them — sending extra
fields your integration doesn't need to strip out won't cause a `400`.

## Related

<CardGroup cols={2}>
  <Card title="Errors" href="/developers/errors" />

  <Card title="Rate limits" href="/developers/rate-limits" />
</CardGroup>
