Overview
If your platform hosts creators — influencers, streamers, newsletter authors, affiliates — you can give each of them a permanent, trackable link per campaign. The creator drops that link into their content; every click creates a new tracked transaction, so any number of their audience can claim and complete the same offer from that one link. Completions and payouts attribute back to the creator automatically, and a stats endpoint powers your own creator dashboard. The integration is two REST calls: mint the links for a creator (safe to call on every dashboard load — it’s idempotent), and read the stats for a creator to render their performance. Encore owns the link, the redirect, the transaction, and the attribution; you own the creator identity and the dashboard.One creator, one link per campaign, unlimited claims. A creator link is not a single-use coupon. It is a permanent tracking link — each click spins up a fresh transaction and 302-redirects to the offer, so the same link works for the creator’s entire audience. Multiple claims and multiple completions from one link are expected and correct (see Link semantics).
How it works
The model is deliberately simple:- Mint the links. Call
/creators/linkswith your own opaquecreatorId. You get back one stablelinkUrlper campaign your app is entitled to. Call it on every dashboard load — it’s idempotent, so the same creator always gets the same links. - The creator shares the link. They drop
linkUrlinto their content — a bio, a video description, a post, a newsletter. It never expires. - Every click is a new transaction. Each open of the link creates a fresh transaction and 302-redirects to the offer with attribution. Any number of the creator’s audience can claim and complete from the same link.
- Read the stats. Call
/creators/{creatorId}/statsto render the creator’s clicks, completions, and earnings in your own dashboard. Real-time.
Authentication
Pass the publishable key Encore provides you in theX-API-Key header.
pk_test_... against the sandbox project, pk_live_... against production. Same key shape as our iOS / Android / Web SDKs and the /offers/feed endpoint. These endpoints use publishable-key auth only — no HMAC.
Integrating directly over REST? Create a single app with platform API in the dashboard — you get one publishable key. If that key spans multiple platform-specific apps (a multi-app project), also send an X-Platform header so Encore knows which app to resolve; otherwise the request is rejected with X-Platform header required for multi-app projects:
X-Platform.
The test key (
pk_test_...) mints links and returns stats for development but does no click or conversion tracking — clicks against a test-key link are accepted but not counted. Use pk_live_... for anything that should show up in your dashboard.Endpoint 1 — mint creator links
Mint (or fetch) the tracking links for one creator. Idempotent: the samecreatorId always returns the same linkUrl per campaign, so it is safe to call on every dashboard load. Links are minted for the campaigns enabled for your app, returned in your configured campaign order — you control both from the portal/admin (see the ordering note below). Each entry is catalog-grade: everything you need to render a rich offer card.
Try it with curl
Drop in your publishable key and run.Response
Each entry is a full, catalog-grade offer — the same presentation fields as/offers/catalog (logo, perk, badge, prices, the advertiser organization, and the creatives set) — plus a payout block and the creator’s linkUrl. The one catalog field it drops is the per-creative clickUrl: for creator links the tracking link lives once at the entry level (linkUrl), not per creative.
All fields mirror
/offers/catalog except those called out above — the entry-level linkUrl (replacing per-creative clickUrl), the added payout block, and categories (additive; not in the catalog response). Nullable catalog fields stay null here just as they do in the catalog.
You control which campaigns appear, and in what order.
links contains only the campaigns enabled for your app, returned in the campaign order you configure in the portal/admin — manual priority overrides are honored. Enable/disable campaigns and reorder them from the dashboard; the response reflects it on the next call.targetCountries tells your creators where an offer converts. Surface it in your dashboard so creators can pick campaigns that match their audience. Clicks from outside a campaign’s target countries may not convert — a link shared to the wrong geo will still open and create a transaction, but it won’t complete.Build your offer wall from one call. Each entry carries everything you need to render a rich offer card — the advertiser
organization (name + logoUrl), perk, badgeLabel, oldPrice/newPrice, payout, and the creatives — with the same field vocabulary as /offers/catalog, plus categories for filter tabs. Two patterns publishers commonly build on top:- Vanity links — mount a pretty route on your own domain (e.g.
you.com/go/summer) that 302-redirects to the entry’slinkUrl. The creator shares your branded URL; attribution is unchanged. - Branded claim page — host your own offer page (your card + a “Claim” button) that sends the tap to
linkUrl, which then 302s to the advertiser. Your brand, Encore’s attribution.
Idempotent — call it freely. Because the same
creatorId always returns the same linkUrl per campaign, you don’t need to store the links yourself. Call /creators/links on every dashboard load and render whatever comes back; new campaigns your app becomes entitled to simply appear as new entries.Link semantics
A creator link is a permanent tracking link, not a single-use code. Each click behaves independently:- Each click 302s to the offer with a fresh transaction id embedded. One click, one transaction. The link is never “used up.”
- Multiple claims and multiple completions per link are expected and correct. If a creator’s link is clicked a thousand times, that’s a thousand transactions — every one attributable, every completion counted toward the creator.
- Attribution is automatic. Because the transaction carries the creator, every completion and payout rolls up to that
creatorIdwith no extra call from you. - Links never expire. The same
linkUrlkeeps working for as long as the campaign is live.
Endpoint 2 — creator stats
Read a creator’s real-time performance, broken down per campaign, plus totals and a daily time series. Use it to render the creator’s dashboard — thedaily series is chart-ready.
Query parameters
Both date bounds are optional. Omit them for all-time stats, or pass astartDate / endDate window to scope everything the endpoint returns — per-campaign aggregates, totals, and the daily series are all filtered to the range.
A malformed date or a
startDate later than endDate returns a 400. Absent bounds mean all-time.
Try it with curl
Response
Which day a metric lands on.
clicks count on the transaction’s created date. completions and earnings count on the completion (verification) date — the completion timestamp, falling back to the transaction’s last-updated time when a completion timestamp isn’t set. So a click on the 1st that completes on the 3rd shows its click on the 1st and its completion + earnings on the 3rd. All dates are UTC, and this is what the daily series and the startDate/endDate filter operate on.Real-time, and safe for brand-new creators. Stats update as clicks and completions land. An unknown
creatorId returns a 200 with an empty campaigns array, zeroed totals, and an empty daily array — not a 404 — so you can call it for a creator who has never shared a link yet and render an empty dashboard without special-casing.End-to-end example
A small creator dashboard backend: fetch a creator’s links, render thelinkUrl list, then fetch that creator’s stats. Both endpoints use publishable-key auth only — no HMAC.