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

# Trackers to traffic

> Read the impression tracker and click-through to set up by hand for each package a campaign creative runs in, with every Apostra id filled, exactly as Apostra sends them to the seller.

Sometimes a creative is set up by hand: a seller's ad operations team pastes it
into their ad server, or you give a publisher a tag sheet. Whoever does it needs
Apostra's trackers with the media buy and package ids already filled in. A
tracker template carries `{MEDIA_BUY_ID}` and `{PACKAGE_ID}` as text, and no ad
server fills those, so impressions and clicks from a copied template cannot be
attributed to your buy.

The campaign creative read returns the trackers to traffic for each package
the creative runs in. They are the same bytes Apostra sends that buy's seller
when it syncs the creative.

## Read them

Read the creative with its campaign:

```json theme={null}
{ "kind": "creative", "sourceId": "camp_3", "id": "cr_9" }
```

The creative carries two fields:

```json theme={null}
"placementTrackers": [
  {
    "mediaBuyId": "mb_7Kq2",
    "sellerMediaBuyId": "ord_4471",
    "packageId": "pkg_ctv_1",
    "trackers": [
      { "event": "impression", "url": "https://t.example/agentic/imp?dsid=ds_1&cid=cr_9&camp=camp_3&mb=mb_7Kq2&pkgid=pkg_ctv_1&cb={CACHEBUSTER}" }
    ],
    "landingPageUrl": "https://t.example/agentic/clk?dsid=ds_1&cid=cr_9&camp=camp_3&mb=mb_7Kq2&pkgid=pkg_ctv_1&rurl=https%3A%2F%2Fbrand.example%2F"
  }
],
"placementTrackersPending": [
  { "mediaBuyId": "mb_8Lr3", "reason": "not_assigned" }
]
```

| Field | What it is |
| - | - |
| `mediaBuyId` | Your media buy's id (`mb_…`). The trackers carry it in place of `{MEDIA_BUY_ID}`. |
| `sellerMediaBuyId` | The seller's id for the same buy, to find it in the seller's ad server. It is never put into a tracker. |
| `packageId` | The package's id, the `package_id` the media buy read returns. The trackers carry it in place of `{PACKAGE_ID}`. |
| `trackers` | Apostra's impression tracker, as an AdCP assignment tracker (`event: "impression"`, `url`). |
| `landingPageUrl` | The click-through to traffic: Apostra's click tracker, which redirects to your landing page. If the advertiser turned the click tracker off, it is your landing page itself with its ids filled. Absent when the creative has no click-through. |
| `tag` | For a VAST or DAAST creative delivered through Apostra's hosted wrapper: the wrapper to traffic, as an AdCP VAST or DAAST URL asset. The wrapper fires the trackers itself, so the row then has no separate trackers or click-through. |

Serve-time macros such as `{CACHEBUSTER}` stay in the URLs. The ad server fills
them when the ad serves.

Only a campaign creative read carries these fields. Reading the creative by its
advertiser, searching creatives, and saving a creative do not return them.

## Which media buys and packages

There is one row for each package a seller reported the creative assigned to,
in each of the campaign's media buys that has been submitted to its seller and
is not finished, canceled or archived. A draft media buy is not listed.

Each other submitted media buy is in `placementTrackersPending`, with the reason
it has no row:

| `reason` | Meaning |
| - | - |
| `not_sent` | Apostra has not sent the creative to that buy's seller yet. |
| `not_assigned` | Apostra sent it, but the seller has not reported it assigned to a package yet. It may be in review, or the seller declined it. |

An empty `placementTrackers` means there is nothing to traffic yet. When the
trackers could not be read, both fields are `null` and the rest of the creative
is still returned; read it again.

## What is not listed

Third-party trackers you added to the creative, and the playback trackers
(start, quartiles, complete) of a video Apostra hosts, are not listed. They stay
on the creative.

## How this differs from AdCP

AdCP 3.3 returns trackers on a creative's package assignment too (`trackers`
and `landing_page_url` on `assigned_packages[]` in `list_creatives` and
`get_media_buys`). Those are templates, kept as the seller accepted them, and
they leave out the creative's own trackers. The trackers to traffic are the
creative's own Apostra trackers for one package, with Apostra's ids filled in.
Each row uses AdCP's own shapes for its values.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.