/personalization/runtime/{workspaceUuid} on the API service, not necessarily the script CDN origin.
Endpoint map
GET /dynamite.js is also served at the application root. /personalization/runtime/snapshot.js supports preview rendering. The CDN is a separate static bundle surface.
Configuration
Current installed clients requestfeatures=editorial-v3 and the encoded pathname. Feature negotiation changes editorial target/catalog delivery for older clients. Live responses cache for 20 seconds and vary by origin; private preview responses remain no-store.
site is the released logical VisitorSite, with resolved component values. settings exposes experiment holdout/salt/pause, runtime goals and an enrichment-enabled flag; secret connector headers are not sent.
Standard decision body
Receipt
control; public browser experiment reporting uses holdout (and off when paused). Do not conflate these enum names. The browser checks the receipt against current page/revision and eligibility before applying.
Measurement batches
The browser owns event batching and session semantics. Reuse its tracker instead of inventing/collect payloads. The exact schema is in analytics/collect.server.ts. The service validates references, deduplicates and recomputes group assignment; a 204 acknowledges accepted processing, not proof that every claimed event was valid or durably flushed.
Errors and limits
Runtime bodies are limited to 32 KiB. Current fixed-window limits include 900 requests per client/site per minute, 240 live decisions and 30 enrichment requests, plus address/workspace ceilings. Do not design a client to continuously poll for personalization.
Public runtime posts accept JSON carried as
text/plain or application/json. The installed client uses safelisted text bodies to avoid unnecessary preflights. Normal API failures keep originals; authentication and authoring clients should inspect errors and not silently report success.
Source: routes, context, browser requests.