# Tracking Macros

Source: https://docs.aon.pro/partner/tracking-macros

> Derived from the same AON Docs release as the source page.

Use a tracking macro only when your landing URL template needs AON to place a value at a specific location. The available Partner-facing macros are `{CLICK_ID}` for click attribution and `{PSEUDO_USER_ID}` for a best-effort pseudonymous identifier.

> Templates opt in explicitly
>
> AON expands `{PSEUDO_USER_ID}` only when your landing URL template contains that exact macro. It is not automatically appended to a destination URL.

## Configure the template

Add a macro where your landing page expects a URL-component value:

```text
https://partner.example/landing?click_id={CLICK_ID}&visitor={PSEUDO_USER_ID}
```

You can use either macro more than once. Each occurrence receives the same value for that click. If your template has no `{PSEUDO_USER_ID}`, AON does not derive, persist, or deliver a Pseudo User ID for that redirect.

| Macro | Use it for | How it is delivered |
| --- | --- | --- |
| `{CLICK_ID}` | Per-click attribution and later conversion/postback matching | AON creates an `aci_...` public click ID after accepting the click. If this macro is absent, existing AON `aon_click_id` fallback behavior still applies. |
| `{PSEUDO_USER_ID}` | A best-effort, click-time pseudonymous identifier for a Partner landing page | AON uses a valid inbound `pseudo_user_id` first, otherwise follows the fallback rules below. It is not an account ID, authentication credential, or cross-device identity claim. |

## Pseudo User ID selection

An inbound `pseudo_user_id` is AON-owned input: AON selects the first valid, non-empty value and consumes all matching inbound parameters. “Consumed” means the value is **not forwarded** as a normal query parameter to your destination. It does not mean that AON erases existing click diagnostics.

When there is no valid explicit value and your template contains `{PSEUDO_USER_ID}`, AON derives a 32-character lowercase hexadecimal MD5 value:

```text
MD5(UA bytes + canonical IP text bytes)
```

The normal path uses the original User-Agent byte sequence immediately followed by the canonical client IP text byte sequence: no separator, no salt, and no extra normalization of the User-Agent. This makes the value reproducible for the same normal inputs, but it is still only a best-effort pseudonymous value.

### Weak-input behavior

For a normal `aon.link` redirect, a valid User-Agent or trusted client IP can be missing. To avoid merging many unrelated visitors under weak inputs, AON uses the available User-Agent bytes and/or canonical IP text bytes plus the current `{CLICK_ID}` bytes before calculating MD5. The result is **click-scoped**: it intentionally degrades to a value unique to that click, not a stable identifier across clicks.

Static Offerwall redirects use the trusted edge input contract and require both User-Agent and client IP. Their normal fallback therefore uses the regular MD5 formula above rather than the weak-input, click-scoped branch.

## URL safety and redirect behavior

Macro values are URL-component encoded before insertion. An explicit Pseudo User ID containing `&`, `#`, `%`, spaces, or non-ASCII UTF-8 text remains one value; it cannot add query parameters or change a fragment boundary.

For Static Offerwall, the existing three-second deduplication window treats the effective Pseudo User ID as part of the click identity only when this macro is present. The same effective value can reuse the existing click chain during the window. A different valid explicit value creates an independent click chain so the redirect cannot return the first visitor's value. This does not change the normal redirect-template or campaign-query contract.

## Persistence and privacy

When AON actually expands `{PSEUDO_USER_ID}`, the delivered value can be kept in click diagnostics such as `macro_values` and the final redirect URL. Normal redirect request URLs or parameters may also retain their existing diagnostic record. The value is delivered to the Partner whose template contains the macro.

Do not put direct identifiers or sensitive personal data in `pseudo_user_id`. The fallback is not a user account, a credential, a fraud decision, or a guarantee of anonymity. Use `{CLICK_ID}` for click attribution and retain the Partner-side consent, retention, and privacy controls appropriate for your integration.

## Related pages

-   [Postbacks & Attribution](https://docs.aon.pro/partner/postbacks)
-   [API Tracking](https://docs.aon.pro/api/tracking)
-   [Offer Fetch](https://docs.aon.pro/partner/offer-fetch)
