Limits
Every cap and budget in one place — rate limits, plan limits, payload sizes, and what happens at each edge.
This page is the complete list of Envie's limits. If a number isn't here, it isn't a limit.
Rate limits
| Surface | Budget | Scope |
|---|---|---|
| Storefront (proxy / public key) | 60 req/min | per shop + IP |
| Private (secret key) | 600 req/min | per key |
Over budget → 429 with Retry-After. Remaining budget is
on X-RateLimit-Remaining-* response headers.
Plan limits
| Plan | Saved items (shop-wide) |
|---|---|
| Free — development / partner-test stores | Unlimited, forever |
| Free — live stores | 100 |
| Growth / Plus | Unlimited |
At the cap, new saves return 403 plan-limit; everything else (reads, removes, exports, the whole API) keeps working. No plan meters wishlist actions or gates the API — that's a public commitment, not a current promo.
Request & data limits
| What | Limit | Beyond it |
|---|---|---|
| Request body | 1 MB | 413 |
Pagination limit | 100 per page | Clamped |
| Import file | 50 MB | Job fails with a clear error |
| Import email lookups | 500 per job | Further email-only rows skipped + reported |
| Idempotency-Key replay window | 24 h | Same key later = new request |
| Export / import result URL | Valid 24 h | Re-request the job for a fresh link |
Upload URL (/v1/imports/upload) | Valid 15 min | Request a new target |
| Customer-metafield mirror | 500 items | Truncated, truncated: true in the payload |
Webhook delivery
| What | Value |
|---|---|
| Timeout per delivery | 10 s |
| Retries | 5, exponential (1 min → 6 h) |
| Auto-disable | After 20 consecutive failures |
Stability promise
Within API v1: additive changes only, fields never repurposed, deprecations announced at least 90
days ahead (changelog + Deprecation header), breaking changes only ever in a /v2 with a long
overlap. SDK major versions track API major versions.