Print the code
Design the QR in the portal — colors, quiet zone, error correction, your logo — and export it as print-ready SVG for a boarding pass, receipt, seatback card or poster.
SVG · vector · press-readyPrint a QR code on anything. When someone scans it they land inside a partner publisher’s app, and coins leave your campaign budget only after that publisher confirms a real signup — at the guest rate until they verify the person, at your full rate once they do.
Fund a budget, print a code, and watch it draw down. No spend until a scan converts.
Each row is one scan that resolved: the campaign it came from, the publisher that verified the user, and the coins debited from the promoter’s budget. Guest rows are partial rewards awaiting verification.
Nothing is charged to you until the fourth. Every stage is a checkpoint the scan has to clear, and the money only moves at the end.
Design the QR in the portal — colors, quiet zone, error correction, your logo — and export it as print-ready SVG for a boarding pass, receipt, seatback card or poster.
SVG · vector · press-readyThe platform checks the code is live, unexpired, under its use cap and inside budget, then sends the phone straight to the publisher’s store listing. Nothing redeemable travels with it. A blocked scan says which rule stopped it.
GET /r/{code} → App Store · PlayAfter the user signs up in the app, the publisher’s server asks whether that install traces back to a scan — by Play install referrer on Android, by a short-window device match on iOS. Server to server, no code ever touches the app.
POST /v1/attribution/claimOne database transaction moves the agreed marketing fee out of your campaign budget and into the publisher’s account. Double-entry, append-only. Whatever the publisher gives its new user is its own bonus, on its own terms.
Ledger · double-entryA publisher can hand coins to anyone who signs up, but you should not pay full price for a stranger. So a scan settles at one of two rates you set yourself — and the difference is held, not lost.
10 of 50 coins
Somebody scanned and signed up, but the publisher has not vouched for who they are. They get the guest rate now, and the remaining 40 coins sit as pending_coins against a deadline.
Grace window set per partnership · default 7 days
50 of 50 coins
The publisher cleared the user against its own bar and said so. The held-back difference is released in a single idempotent call, so a retry cannot pay the same person twice.
Released after the deadline? Refused — the budget keeps the difference.
Never verified, never released — the 40 stays in the budget.
Same budget, 292 more users — and every one of them is a signup a publisher has confirmed, not an install somebody reported.
Guest rate shown at the 20% default — you set the real one per partnership. Either way the funded budget is the ceiling: it draws down, it never overdraws.
Every row below is about what a pricing model bills you for and what it can prove. None of it is a claim about any particular network’s conduct.
A promoter funds and prints. A publisher delivers and verifies. Every coin that moves between them is one entry on the same double-entry ledger.
You have somewhere to print — a boarding pass, a receipt, a poster — and you want installs you only pay for when they are real.
You have the audience and your own bar for what counts as a real user. Bring both, and set your own price for a verified signup.
A scan is only worth funding if it ends somewhere the person actually wanted to go. Publishers bring the destination; you bring the print run.
Placeholder — replace with a real promoter quote about paying only for confirmed signups.
Placeholder — replace with a real publisher quote about setting its own verification bar.
Placeholder — replace with a real quote about voiding a leaked print run, or delete this card.
A code in the wild is a spending instrument you cannot take back. These are the controls that keep a lost print run from becoming a lost budget.
Six answers about what you are charged for, what stops a leaked print run, and what each side has to build.
Only when a publisher confirms a signup that traces back to one of your scans. A scan on its own costs nothing — neither does an install that never signs up, or a signup the publisher cannot match to a scan.
Four things, stacked: the funded budget is a hard ceiling, codes expire (30 days by default), a code can be capped at max_uses, and you can void a whole print run so every future scan on it is refused.
The QR unlocks nothing. It opens a store listing, and the install is matched afterwards server-to-server — no token, key or code ever travels into the app, which is what keeps it clear of App Store guideline 3.1.1.
By carrying the same reference Android carries, along a route that survives the install. Register an App Clip and iOS hands it to your app in a shared container, silently. Without one, the hand-off screen puts it on the clipboard when the scanner taps Continue and your app reads it at first open. Both name one exact scan — nothing is guessed from the device, which Apple does not permit.
One server call. When a scanned user signs up, POST to the Partner API; call it again when the user clears your own verification bar. Both are idempotent, so a retry cannot pay for the same person twice.
They stay with your budget. The release call is refused after the grace window closes — 7 days by default, set per partnership — so an unverified user costs you the guest rate and nothing more.
Create a promoter account, request a partnership with a publisher, fund a campaign, and design your first code. The budget you fund is the most you can ever spend.