---
title: "Read a serving trace"
type: reference
method: GET
path: /rest-api/serving-traces/{traceId}.do
tag: "Banners"
---

# Read a serving trace

`GET https://YOUR-NETWORK-DOMAIN/rest-api/serving-traces/{traceId}.do`

What the trace recorded so far, added up across the ad servers: how many ad selections it saw on the creative's placements, how often the creative was served, how often it was left out and why (the ad server's exclude reason, e.g. CAPPING, LIMITS, TARGETING), how often it was eligible but another creative won, and which creatives won instead (named only when this account may view their advertiser). status is starting, running or finished. On a busy placement the counts come from a sample, each ad server contributing an equal share of lines: truncated=true says so. An ad server that does not answer within 20 seconds is listed in failedServers (serverId, reason TIMEOUT, UNREACHABLE, HTTP_{status} or ERROR) and its lines are missing from the counts. Only the account that started the trace may read it.

## Path params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `traceId` | integer | yes | `71` | The trace |

## Responses

- `200` — {success, traceId, bannerId, status, endsAt, selectionsSeen, served, excludedBy:{REASON:count}, eligibleButAnotherWon, noAdServedAtAll, servedInstead:[{bannerId, name, served}], servedInsteadByCreativesYouCannotSee?, placements:[{placementId, selections, served}], truncated, failedServers:[{serverId, reason}]}
- `400` — Bad request — invalid or missing parameters
- `401` — Unauthorized — authentication failed or missing credentials
- `403` — Forbidden — insufficient permissions
- `404` — No serving trace with that id started by this account

## Example request

```bash
curl --request GET \
  --url 'https://YOUR-NETWORK-DOMAIN/rest-api/serving-traces/71.do' \
  --header 'X-Api-Key: YOUR_API_KEY'
```

Source: https://epom.com/ad-server/docs/api/banners/get-serving-traces