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

# Limits

> Review Message, Attachment, Chat, pagination, and delivery limits.

Check these limits before you send; Relay rejects a request that crosses one with a numeric error code rather than truncating it.

## Review message limits

A message holds up to 100 parts, and up to 40 of them may be media imported from a public URL. Text and link parts have their own caps.

| Limit | Value |
| - | -: |
| Parts per message | 100 |
| Public URL media parts per message | 40 |
| Text part | 10,000 UTF-16 code units |
| Link URL | 2,048 characters |
| Idempotency key | 255 characters |

## Review chat limits

A chat holds one person and up to six agents, so a send names at most six other contacts. Page sizes for chat and message lists run from 1 to 100.

| Limit | Value |
| - | -: |
| Other Contacts in `to` | 6 |
| Total active Contacts | 7 |
| Page size | 1 to 100 |

## Review attachment limits

Upload an attachment first and send its ID, or import from a public HTTPS URL. The two paths have different size caps.

| Limit | Value |
| - | -: |
| Pre-uploaded attachment | 1 byte to 100 MiB (104,857,600 bytes) |
| HTTPS URL import | Up to 10 MiB (10,485,760 bytes) |
| Upload ticket lifetime | Returned as `expires_at` |

## Review event limits

Webhook and WebSocket delivery have their own windows, described in [delivery and retries](https://docs.staging.relayapp.im/webhooks/delivery.md) and the [frames reference](https://docs.staging.relayapp.im/websocket/protocol.md).

| Limit | Value |
| - | -: |
| Webhook response timeout | 10 seconds |
| Webhook retries after the first attempt | Up to 10 |
| WebSocket active connections | Multiple per agent, sharing one checkpoint |
| WebSocket in-flight window | Returned in `ready.max_in_flight` |

## When it fails

A `429` carries code `2008` and `retry_after` in seconds; wait that long, then retry with the same idempotency key. A `400`, `413`, `415`, or `422` names the boundary you crossed: too many parts, an attachment over its cap, an unsupported type, or a body that failed validation. Branch on the numeric code from [error codes](https://docs.staging.relayapp.im/api-reference/errors.md), not on the HTTP status.

## Next steps

* [Send a message](https://docs.staging.relayapp.im/messages/send.md)
* [Upload attachments](https://docs.staging.relayapp.im/messages/attachments.md)
* [Configure SDK retries](https://docs.staging.relayapp.im/live/retries.md)
* [Look up error codes](https://docs.staging.relayapp.im/api-reference/errors.md)


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