Skip to main content
UnderPass keeps a unified view of conversions across all tenants for fraud prevention, paid-ads ROAS, and platform-level reporting. To make this work, every white-label frontend must fire the same standard pixel events at the same points in the funnel. Doing this wrong shows up as missing purchases on ad dashboards and disabled retargeting audiences. This page is your contract. Implement it once per page that renders event data.

Where pixel IDs come from

Each event exposes a pixelIntegration object on its public payload (GET /api/events/public/{slug}):
pixelIntegration itself may be null when the organizer hasn’t configured any pixels. Each field is independently nullable. meta_pixel_id may be comma-separated for organizers running multiple Meta pixels — initialize each independently.
Client-safe fields only. The public payload deliberately omits server-side credentials (e.g. Meta Conversions API access tokens). Those stay on the UnderPass backend, which fires server-side conversion events on your behalf. If a field appears in the API reference for PixelIntegrationDto, it’s safe to embed in browser scripts.

Required pixel IDs to initialize

On every page that’s part of the buyer journey (event detail → tickets → checkout → order confirmation), initialize: The platform pixel is non-negotiable. Without it UnderPass loses cross-tenant attribution, and your fraud/refund alerts will degrade.

Events to fire

Currency is always "COP" unless the event explicitly states otherwise. value is the integer COP amount (no decimals — COP has no minor unit).

Reference implementation

Drop this into your frontend once. Plain JavaScript — no framework dependency.

When to fire — in the buyer journey

Common mistakes

The buyer’s return-from-payment page loads BEFORE the order has actually confirmed (Bold webhook arrives asynchronously). Firing Purchase on page load over-reports — every cancelled-but-redirected buyer counts as a purchase. Always wait for getCheckoutStatus to return confirmed before firing.
If you only init the event’s own pixel, UnderPass-level conversion reporting breaks. The platform pixel 749891594864955 is required on every page. Init it FIRST, then any organizer pixels.
React/Vue re-renders shouldn’t refire InitiateCheckout. Fire exactly once per submit click, ideally in the same handler that calls /api/checkout/start. Guard with a useRef flag if needed.
Currency is "COP" for Colombian Pesos. Values are integer COP — no decimals. Don’t divide by 100; that’s for currencies with minor units.
Meta’s Conversion API (server-side) will eventually deduplicate against your client-side Purchase event. Always pass { eventID: orderId } so UnderPass can match the two halves.

What we do NOT need you to fire

For clarity — these are handled by UnderPass server-side and you should not fire them:
  • Lead / CompleteRegistration (no buyer registration step exists)
  • AddToCart / AddPaymentInfo (UnderPass’s checkout is single-step)
  • Subscription events (no recurring revenue model)
If you need a custom event for your own analytics, fire it on your own pixel only — not on the UnderPass platform pixel.

Need help?

developers@underpass.com.co