Limits
The service protects itself and every shop with fixed ceilings. The numbers below are read from the configuration the service runs with; a limit reached answers 429 with Retry-After, 413 or 400 limit_exceeded.
Paths, field names, error codes, header names and code samples stay in English: they are the contract.
The ceilings
Your own shop configuration sets the work limits of an order (limits.maxParts, the part sizes, rows per order); those are yours to choose and appear in GET /cfg/v1/config/public. A sandbox shop gets the lower sandbox values.
Service
| Limit | Value | Enforced by |
|---|---|---|
| Requests per client address, all routes together | 120 / min | cfg-limits.json service.ipPerMinute |
| Requests per shop, all shop-page routes together | 1200 / min | cfg-limits.json service.tenantPerMinute |
| Request body of a shop-page call | 1,000,000 B | CFG_MAX_BODY_BYTES |
| Request body of the quote check | 64,000 B | server.ts handleQuoteVerify |
| Quote token lifetime | 7 d | CFG_QUOTE_TTL_S |
| Plans solved at once + waiting in the queue | 2 + 16 | CFG_MAX_CONCURRENT_SOLVES + CFG_MAX_SOLVE_QUEUE |
| Longest wait for a max-engine plan | 90 s | CFG_MAX_ENGINE_WAIT_MS |
Order size
| Limit | Value | Enforced by |
|---|---|---|
| Cut-list rows in one order | 2000 | ORDER_LIMITS.cutList |
| Full-sheet lines in one order | 500 | ORDER_LIMITS.fullSheets |
| Hardware lines in one order | 500 | ORDER_LIMITS.hardware |
| Quote lines in one order | 5000 | ORDER_LIMITS.lines |
| Size of one order document | 16,777,216 B | ORDER_LIMITS.documentBytes |
| Parts, rows and part sizes: set by your shop configuration | limits.* | tenant config |
Test keys
| Limit | Value | Enforced by |
|---|---|---|
| Test key lifetime | 30 d | cfg-limits.json testKeys.ttlDays |
| Requests per test key | 60 / min | cfg-limits.json testKeys.requestsPerMinute |
| Quotes per shop with test keys | 200 / d | cfg-limits.json testKeys.quotesPerDay |
| Orders per shop with test keys | 50 / d | cfg-limits.json testKeys.ordersPerDay |
Sandbox shop
| Limit | Value | Enforced by |
|---|---|---|
| Sandbox lifetime | 14 d | cfg-limits.json sandbox.lifetimeDays |
| Requests per sandbox shop | 60 / min | cfg-limits.json sandbox.requestsPerMinute |
| Live previews per sandbox shop | 20 / min | cfg-limits.json sandbox.previewPerMinute |
| Parts per job in a sandbox | 100 | cfg-limits.json sandbox.maxParts |
| Orders per sandbox in the rolling window | 100 / 30 d | cfg-limits.json sandbox.ordersPerWindow |
| Webhook endpoints of a sandbox | 2 | cfg-limits.json sandbox.webhooksMax |
Saved projects and search
| Limit | Value | Enforced by |
|---|---|---|
| Body of one saved project | 65,536 B | cfg-limits.json projects.maxBodyBytes |
| Saved projects per shop | 2000 | cfg-limits.json projects.perTenant |
| Total size of a shop's saved projects | 50,000,000 B | cfg-limits.json projects.bytesPerTenant |
| Projects in one "my projects" list | 100 | projects.ts PROJECT_LIST_LIMIT |
| Catalogue search page size (default / maximum) | 24 / 100 | catalog/search.ts SEARCH_LIMITS |
There is no "try it" button here on purpose: the secret key belongs on your server, never in a browser. The demo shop shows the embed and the order hand-off working end to end.
LegalConfigurator terms ·Data processing agreement ·Shopper privacy notice ·Third-party licences