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

# Conventions & versioning

> Naming conventions per product, pagination, API versions, idempotency, and SDK status.

## Field naming per product

The two API products use different casing conventions — this is intentional and stable:

| Product       | Casing       | Example                                  |
| ------------- | ------------ | ---------------------------------------- |
| Marketing API | `snake_case` | `sender_email`, `list_ids`, `is_publish` |
| Email API     | `camelCase`  | `fromName`, `replyTo`, `campaignType`    |

Don't mix them: a `from_name` sent to the Email API (or a `senderEmail` to the Marketing API) is silently ignored or rejected.

## Pagination

List endpoints across the Marketing API use **page-based pagination** with two required body fields:

```json theme={null}
{ "page": 1, "limit": 10 }
```

`page` starts at 1. Responses include a total count so you can compute the number of pages. There is no cursor-based pagination.

## API versions

* **v1** (`https://cloudapi.mailercloud.com/v1`) — the current Marketing API. All endpoints except one.
* **v2** (`https://cloudapi.mailercloud.com/v2`) — currently a single endpoint, [Create Campaign (v2)](/api-reference/campaigns/create-campaign-v2), which offers more options than the v1 create (pause rules, frequency cap, tag/segment targeting). Both versions are fully supported; v2 is recommended for new integrations that need those capabilities.
* **Email API** versioning is expressed in the request body: `version: "1.0"` (HTML only) or `"2.0"` (with AMP).

## Idempotency

The APIs do not currently support idempotency keys. A request that times out client-side may still have been processed — for sends, this means a retry can deliver a duplicate email. Design batch retries accordingly: prefer confirming state (e.g. campaign exists, contact exists via [upsert](/api-reference/contacts/create-or-update-contact)) over blind re-submission of send requests.

## SDKs

Plain HTTP/cURL is the officially supported integration path — every endpoint page shows generated examples in cURL, Python, JavaScript, PHP, and Go. There are no official SDK packages at this time; AI-assisted integration is first-class instead (see [Use with AI tools](/ai-tools)).
