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

# Errors And Limits

> Understand common API errors, pagination limits, and safe retry behavior.

Plato APIs return JSON error messages where possible.

## Error Shape

REST endpoints usually return one of these shapes:

```json theme={null}
{
  "message": "No apiKey provided."
}
```

```json theme={null}
{
  "error": "Unauthorized API key."
}
```

Log the HTTP status, response body, and request id when a REST request fails.

## Common Status Codes

| Status | Meaning                                                                             |
| ------ | ----------------------------------------------------------------------------------- |
| `400`  | The request is invalid, missing required fields, or failed validation.              |
| `401`  | The API key is missing, expired, invalid, or not allowed for the operation.         |
| `403`  | The API key is valid but its role does not have the required permission.            |
| `404`  | The requested record does not exist in the API key workspace.                       |
| `429`  | The route is rate limited. Slow down and retry later.                               |
| `500`  | Plato could not complete the request. Retry later or contact support if it repeats. |

## Pagination Limits

Different APIs expose different pagination styles.

CMS list endpoints use:

```text theme={null}
limit: 1 to 100
offset: 0 or higher
```

Menu endpoints use:

```text theme={null}
page: 1 or higher
limit: 1 to 100
```

Connect360 list operations use cursors:

```ts theme={null}
{
  limit: 50,
  cursor: "next_cursor"
}
```

## Order Feed Limits

The restaurant order feed returns up to 50 orders per request.

Date ranges can be up to 5 days when both `date` and `endDate` are provided.

## Retry Guidance

Retry only when the failure is temporary.

Retry:

* Network timeouts.
* `429` after waiting.
* `500` or `503` after a short delay.

Do not retry until fixed:

* Invalid API key.
* Missing permission.
* Unknown field.
* Required field missing.
* Invalid relation id.

## Idempotency

Aggregator order creation is idempotent by `aggregator` and `externalOrderId`, and also accepts an `Idempotency-Key` header. See [Idempotency And Errors](/api-reference/aggregators/idempotency-and-errors).

Other write operations like CMS create, form submit, and message send can create new records every time they are called. Make your own integration idempotent when duplicate submissions are possible.
