Layouts
For Custom HTML there is a template gallery (Classic, Dark, Minimal, Wide banner) to start from instead of writing markup from scratch.
Appearance
Widgets ship with a theme (Light, Dark or Auto following the visitor’s system), a density (Comfortable or Compact) and an optional Show more button: you choose how many cards are visible at first, the rest load in batches on click. The form shows a live preview of every combination before you save.Embedding
Copy the snippet from the widget form and paste it where the cards should appear. Appearance settings are baked into the snippet as data attributes, so changing them in the form gives you an updated snippet; the widget itself also picks up saved changes on the next page load. The widget counts an impression only when a card is actually visible in the viewport, and a per-visitor frequency setting caps how many times the same visitor sees the same creator within 24 hours.Backend + First-party
If you want full control over markup, or render pages server-side, request ads from your backend with the widget API key and build your own HTML. Forward the visitor’s context with every request: IP, user agent and the URL of the page being viewed (the page URL is what fills your By page report). Click links on your page point to your own domain: your server resolves each click through our API and redirects the visitor itself, so the page carries zero external ad links, which matters for pages that rank in search and for placements hit by ad blockers. The widget form contains ready examples for Node and PHP (page render plus the small relay endpoint), an impressions script and a prompt you can hand to an AI assistant to generate the integration for your stack. Three rules matter:- Link cards to your own relay route. Each creative carries a
click_tokenfor your click link and a ready impression URL; use the impression URL as-is. The widget response may be cached per page for up to 30 minutes; the resolve call runs fresh on every click and is never cached. - Report viewable impressions. Fire the impression only when the card is at least half-visible for about a second. The provided script does this with an IntersectionObserver; copying it is the easiest way to stay accurate.
- Don’t strip the referrer from your click links. No
rel="noreferrer"and nono-referrerpolicy on them: without it your relay has no page URL to forward asuref, and clicks withouturefraise a warning and weaken the fraud filtering for your traffic. The browser default policy is fine as-is.
Your price per click
Every creative in a server-side response carriesearn_cents: what you earn for one valid click on that card, in USD cents. Use it to pick or order cards by payout. The field comes only with API-key requests; browser widgets never receive it. A click pays that amount once it passes validation: duplicates, suspicious clicks and clicks outside the first-party channel pay nothing.
The Integration types page describes the full click flow: the resolve call with required and optional fields, the response format and relay examples.