Limits
All limits apply to every connection. MarsX sets the values. If a value blocks you for a technical reason, write to the technical contact and give the reason.
Size limits
Section titled “Size limits”Size limits are per route, in two layers. MarsX enforces both.
| Route | Transport cap, answered 413 before authentication |
Content limit, answered 413 after authentication |
|---|---|---|
PUT /v1/sources/{connection}/files/{file_name} |
10 MiB (10,485,760 bytes) | 10 MiB on disk, 100 MiB expanded, 10,000 rows, 500 characters for each cell. A file over a limit is rejected whole |
| Every other path (events, status, token, and any unknown path) | 1 MiB (1,048,576 bytes) | Events: 32,768 bytes |
The transport cap depends only on the route in the URL. A request above it gets the same 413 for a known and for an unknown path, so the answer reveals nothing about which connections exist.
An event with every field filled and a 500-character note is about 4 KB. Standard Webhooks recommends events under 20 kB.
Rate and time limits
Section titled “Rate and time limits”| Item | Limit |
|---|---|
| Event requests | At or below 100 for each connection in 10 seconds |
| Status requests | At or below 60 for each connection in 60 seconds |
| How fast MarsX answers | MarsX stores each event and answers within 10 seconds |
| Your request timeout | Set 15 to 30 seconds on your side |
| Clock window | webhook-timestamp within 300 seconds of the MarsX clock, in either direction |
Retry-After |
Wait at least this long when the answer carries it |
| Retries | At least 3 days, 10 attempts, with jitter. See the schedule |
MarsX may answer any request with 429, 502, 503 or 504. Treat each as a signal to slow down. None of them confirms acceptance.
Time to keep and time to wait
Section titled “Time to keep and time to wait”| Item | Value |
|---|---|
Status and webhook-id de-duplication |
Kept for 90 days |
Replay window of your changes and privacy-events feeds |
At least 90 days |
| Key overlap during rotation | At most 7 days |
| OAuth token lifetime for the status call | 3600 seconds |
| OAuth token lifetime for the endpoints you host | Between 300 and 86,400 seconds |
| Daily file | One file each working day by 09:00 WIB |
| File after a privacy request | Within 24 hours |
| Resend of a missing or partial file | Within 24 hours of the MarsX notice |
Notice for a change to the Lists values |
30 days, in writing |
Overlap for a breaking change (/v2) |
At least 90 days, with written notice |
Catch-up reads (automatic sending)
Section titled “Catch-up reads (automatic sending)”| Item | Value |
|---|---|
How often MarsX reads changes and privacy-events |
Every 15 minutes |
| MarsX request rate | At or below 1 request per second, and it honours Retry-After |
| Page size | MarsX asks for limit=500 and accepts fewer. Your default is at least 100 and your maximum at least 500 |
| Your request budget | At least 60 requests per minute for each client on each endpoint |
Field limits
Section titled “Field limits”| Field | Limit |
|---|---|
partner_lead_id, request_reference |
^[A-Za-z0-9._-]{1,64}$ |
webhook-id |
^[A-Za-z0-9_-]{1,128}$, no full stops |
enquiry_notes |
At most 500 characters |
phone |
Starts with +628 |
contact_consent |
The value yes only |
phone_verified |
A boolean in an event (true or false, or null when unknown). Yes or No in a file |
source_channel |
One of eight values: see dropdown labels |
| Rows in a file | At most 10,000 |
| Characters in a file cell | At most 500 |
