Skip to content
Docs menu · Ingest responses & limits

Reference

Ingest Responses, Error Codes and Limits

The HTTP responses the AnyReplay ingest service returns — 202, 402, 403, 413, 422 and 429 — with error codes, what the recorders do with each, and limits.

Every SDK sends recordings to the ingest service at https://in.anyreplay.com. You never call it yourself, but its answers explain most "why is nothing recording" questions, and they are visible in the browser's network panel. Every error has the same shape:

{
  "error": {
    "code": "origin_not_allowed",
    "message": "This origin is not on the project’s allow-list."
  }
}

POST /v1/ingest/events

StatusCodeMeaningRecorder
202—Chunk accepted. The body includes sessionId and duplicate; a duplicate chunk also carries nextSeq.Continues. On a duplicate that was not a retry, resends under nextSeq.
402quota_exceededThe organisation's monthly plan limit is used up. details.limit is sessions or hours.Stops, and skips recording for two minutes: in this tab (browser SDK), across launches (React Native).
402session_cap_reachedThe project reached its monthly session cap.Stops, and skips recording for two minutes: in this tab (browser SDK), across launches (React Native).
402test_mode_cap_reachedThe project is in test mode and has started as many sessions as test mode allows today. The count starts over at midnight UTC.Stops, and skips recording for two minutes: in this tab (browser SDK), across launches (React Native).
403origin_not_allowedThe request's Origin is not on the project's allowed domains, or there is no Origin and no appId and the project has an allow-list.Stops for this page.
403app_not_allowedThe request came from an app (no web origin) and its appId is not on the project's allowed apps.Stops for this launch.
403project_not_acceptingThe key is unknown, or the project is paused. Both answer the same, so a key cannot be used to probe which projects exist.Stops for this page.
413payload_too_largeThe chunk is larger than the size limit (512 KB by default).Sends the events again in smaller chunks and goes on (0.1.4 stopped). A single event too large for any chunk is dropped; a whole-page snapshot that is stops the browser SDK, while React Native drops it and tries the next one.
422invalid_payloadThe body does not match the schema; the message lists the fields.The browser SDK drops that chunk and goes on, stopping after three in a row; React Native stops for this launch. (0.1.4 stopped.)
429rate_limitedToo many requests from this device, for this project key, or from this address. A Retry-After header gives the seconds to wait.Keeps the events and retries, never before Retry-After, and never stops for it. (0.1.4 counted it as a failure and stopped after five.)
5xxinternal_errorSomething went wrong on the server.Keeps the events and retries after a wait of 2 s doubling to a minute, or a Retry-After when one is sent, and never stops for it. (0.1.4 stopped after five failures in a row.)

Limits

LimitValue
Chunk size512 KB (default)
Events per chunk5,000 (the recorders send 200)
Chunk number0–100,000 per session
Requests per device (project key and visitor id)120 per minute (default); a recorder sends 12–30
Requests per project key, all devices together12,000 per minute (default)
Requests per source address6,000 per minute (default)
Custom events indexed200 per chunk, 5,000 per session
Custom event name1–64 characters of [A-Za-z0-9_.:-]
Custom event properties4 KB serialised
Session cap1–1,000,000 per month
Session metadataURL and referrer up to 2,048 characters, user agent up to 512

POST /v1/ingest/identify

StatusCodeMeaning
200 / 202—{ applied: true } when the identity was attached; applied: false (202) when the session was not found yet.
403origin_not_allowed, app_not_allowed, project_not_acceptingAs for events.
422invalid_payloadMalformed, or neither userId nor email was given.
429rate_limitedToo many requests from this address for this project key, for the key, or from the address. A Retry-After header gives the seconds to wait.

Image uploads (apps)

StatusCodeMeaning
201 / 200—Stored, or already held (duplicate: true).
403asset_quota_exceededThe project already stores as many images as it may (500 images or 200 MB by default).
413asset_too_largeThe image is larger than 3 MB.
415unsupported_assetOnly PNG, JPEG, GIF and WebP are accepted.
422hash_mismatchThe bytes do not match the hash they were sent under.

Where refusals show up

Refused chunks are recorded as install signals, so the project's setup page can say what happened — for example "One request from https://staging.example.com was refused" with a button to allow that domain, or that the plan limit or session cap was reached. See no sessions arriving.