> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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](/webhooks/delivery) and the [frames reference](/websocket/protocol).

| 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](/api-reference/errors), not on the HTTP status.

## Next steps

* [Send a message](/messages/send)
* [Upload attachments](/messages/attachments)
* [Configure SDK retries](/live/retries)
* [Look up error codes](/api-reference/errors)
