| Quote validity | expiresAt = min(provider deadline − 2 s, issue + 30 s), never refreshed | infinity.quote.ttlMs (30 000), infinity.quote.expirySafetyMs (2 000) |
| Cached quote re-serve | only while ≥ 15 s of validity remain; a fresh round can have less when a provider’s deadline is short. An identical request from the same organization gets the same quote (same quoteId) meanwhile, so submitting it again replays the order already placed for that quote | — |
| Quote round deadline | fan-out 1 200 ms within a 2 000 ms round | infinity.quote.fanoutDeadlineMs, infinity.quote.deadlineMs |
| Per-organization rate limit | 5 requests/s, burst 20, per organization (the hub’s tenant: every call of your organization, with a key or with its project id) and per route family: the three quote routes share one bucket, POST /order and /order/openfor another. A shed is EIN0080 with a suggested back-off of floor(1000 / tenantRps) ms, at least 1. A caller idle longer than 600 s loses its buckets (swept lazily, at most once per idle period); the idle time must be at least tenantBurst / tenantRps while tenantRps > 0, so dropping a bucket never resets a caller’s debt | infinity.auth.tenantRps, infinity.auth.tenantBurst, infinity.auth.tenantIdleSeconds |
| In-flight quotes | 64 per process, read at start-up (a change needs a restart) | infinity.quote.maxInflight |
| Outbound upstream calls | each attempt 30 s; the wait for the hub’s outbound limiter 1 s (an openFor forward that waits longer is EIN0081); answers capped at 4 MiB; read at start-up | infinity.upstream.ts.timeoutMs, infinity.upstream.solver.timeoutMs, infinity.upstream.acquireTimeoutMs, infinity.upstream.maxResponseBytes (the OIF aggregator has no timeout key) |
| Proxy-lane registration window | 20 minutes after the quote was issued, on the hub. The aggregator refuses a registration once expiresAt has passed (EIN0007, … (QUOTE_EXPIRED)), so register as soon as the transaction is sent (known issue) | — |
| Non-prepared quote template | held 30 s in the quoting process (20 minutes on the proxy lanes) | — |
| One order per quote | both flows share one order key, sha256("infinity:v1:order:" + quoteId) | — |
| Upstream status cache | 2 s; 4 096 entries, 10 min idle | — |
| Hub status cache | 2 s; the owner check runs on every read, cached or not | — |
| On-chain answer freshness | a watermark older than 30 s cannot date an absent fill | infinity.chains.readMaxStalenessMs |
GET /orders page | default 100, capped at 500 | — |
| Order intent size | 65 536 bytes | infinity.order.maxIntentBytes |