---
url: https://docs.dataflair.ai/stats/tracking.md
description: >-
  How a DataFlair tracking link redirects a click to your landing page, which
  parameters it adds, and what to store to send a postback later.
---

# Tracking links

An affiliate shares a DataFlair tracking link. When a player clicks it, DataFlair records the click and sends the player on to your landing page. It adds parameters to the landing URL. You store them, and you send them back in the postback when the player converts.

## How a click travels

```text
Player clicks   https://{stats-host}/go/{slug}
DataFlair       logs the click, then answers 302
Player lands    https://your-landing-page.example.com/?affiliate_id=AFF-00042&tracking_id=TL-00091&sub_id=dfc_9f2c1a7b3d4e5f60
```

`GET /go/{slug}` accepts three kinds of slug. All three reach the same link:

* The permanent internal slug, in the form `TL-` followed by letters or digits.
* The affiliate's current custom slug, for example `john-mega-bonus`.
* A retired custom slug. Old shares keep working after a rename.

DataFlair sends your landing page the `tracking_id`, and not the custom slug. You do not see the slug the player clicked.

## Parameters your landing page receives

| Parameter | Always sent | Meaning |
| --- | --- | --- |
| `affiliate_id` | yes | The DataFlair affiliate ID, for example `AFF-00042`. |
| `tracking_id` | yes | The tracking link, in the form `TL-` followed by letters or digits. |
| `campaign_id` | when set | The affiliate's own campaign label. |
| `sub_id` | on redirect links | A DataFlair click id, in the form `dfc_` followed by 16 hexadecimal characters. |

Any query string already on your landing URL stays, and DataFlair adds its parameters after it.

## What you store

When the player lands, read the parameters and keep them with the visit:

1. Read `affiliate_id`, `tracking_id` and `sub_id` from the landing URL.
2. Save them in a first-party cookie or a server session at once.
3. When the player registers, save them on the player record.
4. Use the stored values for every later event of that player.

If you do not keep them at registration, a later postback has no affiliate to attribute the conversion to.

## What you send back

Put the stored values in the postback:

| Landing parameter | Postback field |
| --- | --- |
| `affiliate_id` | `affiliate_id` |
| `tracking_id` | `tracking_id` |
| `sub_id` | `sub_id` |

The `sub_id` is what links a conversion to the click that produced it. See the [Postback contract](/stats/postbacks/contract).

## Response codes

| Status | Meaning |
| --- | --- |
| `302` | The click was recorded and the player was sent to the landing page. |
| `404` | The slug does not match any link. |
| `410` | The traffic source is disabled, the landing page is gone, or DataFlair could not build the destination URL. |
| `429` | The click rate limit was reached. |
