| Widget | Backend + First-party | Backend (S2S) | |
|---|---|---|---|
| Cards rendered by | our script, in the browser | your server | your server |
| Click link on your page | our tracking domain | your own domain | our tracking domain |
| Click resolved by | the visitor’s browser | your server, through the resolve API | the visitor’s browser |
| External ad links in your HTML | yes | none | yes |
| Setup | paste a snippet | API fetch + a small relay endpoint | API fetch |
| Best for | regular pages, quickest start | pages that rank in search, ad-block-sensitive placements | server-rendered pages where the link profile doesn’t matter |
Widget
Paste one snippet where the cards should appear; rendering, impressions and clicks are handled for you. Layouts, themes and custom templates are covered in Widgets.Backend (S2S)
Your server fetches creatives as JSON with the widget API key and builds its own HTML. Cards link to the ready-made tracking URLs from the response. Rules and examples: Widgets, Backend (S2S).Backend + First-party
Server-side rendering like S2S, plus first-party click links: every link on your page stays on your own domain, and your server resolves each click through our API before redirecting the visitor. Why choose it:- Clean link profile. Your HTML contains no external ad links, so pages that rank in search carry no ad-network footprint.
- Ad blockers can’t cut the click path. A same-origin link can’t be blocked without breaking the site itself.
- You control the referrer. The page URL travels in the resolve call explicitly, and on the final redirect you decide what the destination site sees: a
Referrer-Policy: no-referrerheader hides your domain entirely.
How it works
Fetch creatives
Same request as Backend (S2S): call the widget endpoint from your server with the
X-Api-Key header, forwarding the visitor’s uip, uua and page.Render first-party links
Each creative includes a
click_token. Link the card to your own route, for example https://yoursite.com/go?t=<click_token>. Don’t use click_url in this mode; the impression pixel (impression_url) works the same as in S2S.What to send on every resolve
| Field | Required | What it is |
|---|---|---|
t | yes | The click_token from the creative |
X-Api-Key header | yes | Your widget API key; proves the call comes from your server |
uip | yes | The visitor’s IP address |
uua | yes | The visitor’s User-Agent |
uref | yes | URL of the page the click happened on |
asn | no | The visitor’s network ASN. On Cloudflare, expose ip.src.asnum with a Transform Rule header and forward it |
country | no | ISO2 override; normally resolved from uip |
X-OT-Bot-Score header | no | Cloudflare bot score, when your plan provides it |
X-OT-Verified-Bot header | no | Cloudflare verified-bot flag (1 or true) |
uip, uua and uref must describe the visitor’s request to your site, not your server. Click validation, geo stats and uniqueness run on what you forward; clicks with missing or fabricated context are flagged and not paid. The optional fields let more of the fraud filtering work for your traffic, which keeps your placement attractive to advertisers.
The response
url: where to redirect the visitor. Always present for a live token.nullmeans the token expired: redirect to a page of your own instead.billable: whether this click passed validation and counts toward earnings. Diagnostic only; redirect either way.reason: why a click didn’t pay. Common values:duplicate(token already resolved),not_unique(same visitor and creator within the uniqueness window),stale_token, bot markers.ref_not_forwardedis a warning: the click still pays, buturefwas empty and you should fix the integration.
Relay example
The route path (/go here) is your choice.
uref normally comes from the Referer header of the same-origin click. If your site sets a global no-referrer policy, append the page URL to your click links yourself (for example /go?t=...&p=<page URL>) and forward that value as uref.
The widget form contains full copy-paste examples (page render plus relay) and a ready prompt for an AI assistant.
Which one to pick
- The page ranks in search, or you want a clean outbound-link profile: Backend + First-party.
- You render server-side and want the fastest backend setup: Backend (S2S).
- Everything else: Widget.