Raw JSON ads, verified at the edge. Billed on proof, never on a fetch.
LEMPRAGE
Overview
Verified impressions over time
By campaign
Campaign
Impressions
Est. spend
Last served
No verified impressions in this range yet.
Campaigns
New campaign
Your campaigns
No campaigns yet — create one above to start serving.
Ad Groups
A lightweight, organizational layer over campaigns — for grouping creative variants under one name for reporting. It doesn't change targeting or serving; every campaign still competes for slots independently in adselect.js.
New ad group
Your ad groups
No ad groups yet.
Assets
Upload an image
Your assets
No assets yet — upload one above.
Reports
Verified impressions
Group
Impressions
Est. spend
No data in this range yet.
Docs & API
Everything below matches the deployed worker exactly — there's no separate "real" API behind it.
GET/v1/ad
Fetch a raw JSON ad payload. Always $0 — nothing is billed on a fetch, only on a verified impression.
Response includes headline, body, image_url, cta_link, brand_name, category, and a security block with a single-use impression_id + signing_key your SDK uses to sign the Proof-of-Impression, plus a hidden _canary_pixel — never request it from real code.
POST/v1/impressions
Submit a signed Proof-of-Impression once an ad has been ≥50% in viewport for ≥1s with window focus. This is the only call that results in a charge.