Skip to main content
A widget defines how creator cards look and behave on your pages. A widget is attached to one or more of your properties and serves only on their domains.

Sites

Pick the sites in the widget form, or enable All my sites: the widget then serves on every approved property of your account, including sites you add later, with no changes to the widget and one install code for all of them. Targeting and limits are shared across the sites either way.

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. A creator on which the visitor’s IP already has a valid click in the last 24 hours is not shown to them again: a repeat click would not be paid, so the slot goes to another creator.

Backend

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 and the click is handled by your own server, which matters for pages that rank in search and for sites that want no third-party ad links in their HTML. 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:
  1. Link cards to your own relay route. Each creative carries a click_token for your click link and a ready impression URL; use the impression URL as-is. A widget response requested with the visitor’s uip is personal (creatives on which that IP has a valid click in the last 24 hours are left out), so request it per page view; only a response requested without uip may be cached per page, for up to 30 minutes. The resolve call runs fresh on every click and is never cached.
  2. 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.
  3. Don’t strip the referrer from your click links. No rel="noreferrer" and no no-referrer policy on them: without it your relay has no page URL to forward as uref, and clicks without uref raise a warning and weaken the fraud filtering for your traffic. The browser default policy is fine as-is.
Accurate impressions matter beyond stats: they feed frequency capping and how campaigns are matched to your placement.

Your price per click

Every creative in a server-side response carries earn_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. Server-side responses also carry creative_id, the creative’s stable public id (click_token is short-lived and can repeat across responses). If you cache responses per page, use it to hide the cards a visitor already clicked in the last 24 hours; with uip forwarded on the request we do that for you. The Integration types page describes the full click flow: the resolve call with required and optional fields, the response format and relay examples.