Skip to main content
This is the script’s delivery protocol. Use MCP/the authenticated client for authoring; these endpoints are not a general workspace-management API. Preview access uses a separate scoped bearer, never an MCP key in merchant JavaScript. Base path: /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 request features=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

Specialized NBA/horror preview fields also exist in the source schema; they are not a generic production quiz API. See decisionInput for the complete current contract.

Receipt

The adaptive receipt calls its holdout arm 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.