> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encorekit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creator Links

> Give each creator on your platform a permanent, trackable affiliate link per campaign, with per-creator performance stats for your dashboard.

If your platform hosts **creators** (influencers, streamers, newsletter authors, affiliates), give each of them a permanent tracking link per campaign. The creator drops the 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 one link, and completions and payouts attribute back to the creator automatically.

There is **no fetch at render time and no impression to confirm**: you mint links once (idempotently), the link itself carries the attribution, and a stats endpoint powers your creator dashboard. The shared claim and activation semantics are in [the overview](/publishers/offers-api/overview#the-claim-model); the endpoint contracts are in the [Creator Links reference](/publishers/offers-api/reference/creator-links).

## The pattern

<Steps>
  <Step title="Mint the links on every dashboard load">
    Call [`POST /creators/links`](/publishers/offers-api/reference/creator-links#post-creatorslinks) with your own opaque `creatorId`. You get one stable `linkUrl` per campaign your app is entitled to, each with catalog-grade display fields and a `payout` block. **Idempotent**: the same creator always gets the same links, so never store them; render whatever comes back, and new campaigns simply appear as new entries.

    ```bash theme={null}
    curl -X POST 'https://api.encorekit.com/encore/publisher/sdk/v1/creators/links' \
      -H 'X-API-Key: YOUR_API_KEY' \
      -H 'Content-Type: application/json' \
      -d '{ "creatorId": "creator_abc123" }'
    ```
  </Step>

  <Step title="The creator shares the link">
    They drop `linkUrl` into a bio, a video description, a post, a newsletter. It never expires, and it is never "used up": each open creates a fresh transaction and 302-redirects to the offer with attribution, so multiple claims **and** multiple completions from one link are expected and correct.
  </Step>

  <Step title="Render the creator's performance">
    Call [`GET /creators/{creatorId}/stats`](/publishers/offers-api/reference/creator-links#get-creatorscreatoridstats) for real-time clicks, completions, and earnings per campaign, plus totals and a chart-ready `daily` series. Optional `startDate`/`endDate` scope everything; an unknown `creatorId` returns a 200 with zeros, so a brand-new creator needs no special-casing.

    ```bash theme={null}
    curl 'https://api.encorekit.com/encore/publisher/sdk/v1/creators/creator_abc123/stats?startDate=2026-07-01&endDate=2026-07-16' \
      -H 'X-API-Key: YOUR_API_KEY'
    ```
  </Step>
</Steps>

## Gotchas

* **Surface `targetCountries` to your creators.** It tells them where an offer converts, so they can pick campaigns matching their audience. Clicks from outside a campaign's target countries still open and create a transaction, but they won't complete.
* **You control which campaigns appear, and in what order.** `links` contains only the campaigns enabled for your app, in the campaign order you configure in the dashboard; manual priority overrides are honored.
* **Correlate by `campaignId`.** The stats endpoint is keyed by the same `campaignId` as the mint endpoint, so joining links to performance is a direct id match.
* **Clicks count opens, not unique users.** Each open creates a transaction; don't read `clicks` as reach.

<Note>
  **Build a rich surface from one call.** Each mint entry carries everything for a full offer card (the advertiser `organization`, `perk`, `badgeLabel`, `oldPrice`/`newPrice`, `payout`, `creatives`, and `categories` for filter tabs). Two patterns publishers commonly build on top:

  * **Vanity links**: mount a pretty route on your own domain (for example `you.com/go/summer`) that 302-redirects to the entry's `linkUrl`. The creator shares your branded URL; attribution is unchanged.
  * **Branded claim page**: host your own offer page (your card plus a "Claim" button) that sends the tap to `linkUrl`, which then 302s to the advertiser. Your brand, Encore's attribution.
</Note>

## Related

* [Creator Links reference](/publishers/offers-api/reference/creator-links): full contracts for both endpoints, with runnable examples and response shapes.
* [API Reference overview](/publishers/offers-api/overview#choosing-a-selection-mode): the selection-mode decision table.
* [Receive Completion Events](/publishers/offers-api/guides/receive-completion-events): react server-side when a completion is verified.
