Skip to content

Consumer migration guide

Use this guide if you already integrated Pomelo and still:

  • install a manual snippet by default
  • read mixed routes as if they were fully available or fully locked
  • consume deprecated /v1/me mirrors
  • send deprecated public API date parameters
  • hardcode collection_profile, plan capabilities, or route classes
Old patternCanonical path nowStatusSunset / review
Hand-authored snippet with runtime config in HTMLUse the dashboard-generated single script tagmigrate nowimmediate
Read plan_id from GET /v1/meRead product.runtime_plan_iddeprecated mirrorno removal before 2026-07-03T00:00:00Z
Read retention_days from GET /v1/meRead product.product_retention.api_retention_daysdeprecated mirrorno removal before 2026-07-03T00:00:00Z
Send start / end to public /v1/* routesSend from / toalready removed from the public runtimemigrate now
Read only availability.sections on overview, acquisition, or actionsRead availability.readModel first, then availability.sectionsmigrate nowimmediate
Hardcode collection_profile or route classes in the clientRead product, product_configuration, and availability insteadmigrate nowimmediate

Preferred path:

  1. Copy the generated snippet from the dashboard.
  2. Paste the single analytics script tag in your site head.
  3. Keep collection profile, autocapture, and tenant settings in Pomelo.

If your framework injects scripts from code instead of pasting raw HTML, render the same contract:

  • https://cdn.pomeloanalytics.com/latest/analytics.js
  • the data-site-id from Pomelo

Do not embed runtime configuration JSON in your app. The SDK loads the active site configuration from Pomelo at startup.

Do not rely on legacy snippet attributes such as:

  • data-autocapture-ui
  • data-autocapture-forms
  • data-autocapture-errors
  • data-capture-localhost
  • data-allow-params

See also: SDK Integration.

Public /v1/* requests must already use from and to. Only the internal dashboard /metrics/* proxy still uses start/end under its own shared contract.

Read mixed routes in this order:

  1. availability.readModel
  2. availability.sections

Interpretation:

  • availability.readModel.strictSafe is the usable baseline always returned in Strict
  • availability.readModel.extended is the enriched layer that Extended unlocks
  • availability.sections describes whether those enriched slices are available, locked, or partial for the selected period

Do not treat a mixed HTTP 200 as “everything succeeded”.

See also: Strict, Extended & Mixed Reports.

Switching a site from Strict to Extended is prospective only.

That means:

  • future compatible data can become richer
  • older periods are not backfilled
  • an already open tab may still run the older runtime until reload

Do not hardcode:

  • collection_profile
  • plan capabilities
  • route classes
  • mixed-route slice availability
  • deprecated /v1/me mirrors

Backend route ids such as audience_summary or technology are internal read model identifiers, not extra public API routes.