# Impression Level Data

DT Exchange enables you to access detailed information for each impression through the impressions callback APIs. The information includes, for example, which demand source served the ad and its expected or exact revenue.&#x20;

The following table describes Impression Level Data attributes.

| Property Name      | Description                                                                                                                                                                                                                                                                                                                |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `advertiserDomain` | A unique identifier for a set of campaigns for the same advertiser.                                                                                                                                                                                                                                                        |
| `campaignId`       | A unique identifier that represents a Campaign.                                                                                                                                                                                                                                                                            |
| `creativeId`       | <p>A unique identifier that represents the creative in the bid response.<br>This can be useful when a particular creative causes user experience issues.</p>                                                                                                                                                               |
| `country`          | Identifier of the country of the ad impression (in ISO country code).                                                                                                                                                                                                                                                      |
| `impressionId`     | A unique identifier for a specific impression.                                                                                                                                                                                                                                                                             |
| `demandSource`     | <p>Identifies the demand source name of the buy-side/demand-side entity that purchased the impression:<br></p><ul><li>When mediated networks win an impression, the mediated network's name appears.</li><li>When a DSP buying through the programmatic marketplace wins the impression, the DSP's name appears.</li></ul> |
| `pricing`          | Object includes two properties about the impression's pricing, net payout value, and currency type.                                                                                                                                                                                                                        |
| `Pricing.value`    | The impression's net payout value.                                                                                                                                                                                                                                                                                         |
| `Pricing.currency` | The impression's currency type.                                                                                                                                                                                                                                                                                            |
| `video`            | <p>Object includes two properties about the video: duration and skippable.<br>The object is null for non-video impressions.</p>                                                                                                                                                                                            |
| `Video.skippable`  | An indication of whether the video is skippable or not. Possible values: `true`, `false`.                                                                                                                                                                                                                                  |
| `Video.duration`   | The duration of the video in seconds, for example, 15 seconds.                                                                                                                                                                                                                                                             |

## Receiving Per-Ad Impression Data <a href="#h_01jydrqmq277e0sctsz1x24rkh" id="h_01jydrqmq277e0sctsz1x24rkh"></a>

All unit controllers allow you to access the `ImpressionData` object through their callback APIs, using an `Event Listener` subclass with a suffix of `WithImpressionData`.&#x20;

The example below showcases how you can access these data on a full screen placement integration

### InneractiveAdViewUnitController <a href="#h_01jye40q7mgyzfzb1c3fjv1sz5" id="h_01jye40q7mgyzfzb1c3fjv1sz5"></a>

{% code title="Java" %}

```java
InneractiveAdViewUnitController controller = 
    (InneractiveAdViewUnitController) bannerSpot.getSelectedUnitController();

controller.setEventsListener(
    new InneractiveAdViewEventsListenerWithImpressionData() {
        @Override
        public void onAdImpression(InneractiveAdSpot adSpot, ImpressionData impressionData) {
            Log.v("ImpressionData", impressionData.toString());
        }

        // … all other callbacks and methods
    }
);
```

{% endcode %}

### InneractiveFullscreenUnitController <a href="#h_01jye445d5kmwpsv7vhh6vjbh9" id="h_01jye445d5kmwpsv7vhh6vjbh9"></a>

{% code title="Java" %}

```java
InneractiveFullscreenUnitController fullscreenUnitController = 
    (InneractiveFullscreenUnitController) fullScreenSpot.getSelectedUnitController();

fullscreenUnitController.setEventsListener(
    new InneractiveFullscreenAdEventsListenerWithImpressionData() {
        
        @Override
        public void onAdImpression(InneractiveAdSpot adSpot, ImpressionData impressionData) {    
            Log.v("ImpressionData", impressionData.toString());
        }
        
        // … all other callbacks and methods

    }
);
```

{% endcode %}

## Receiving Impression Data Globally <a href="#h_01jydrqmq2he82mchdd1mhr25w" id="h_01jydrqmq2he82mchdd1mhr25w"></a>

In addition to the per-ad callback, this listener also contains details about the relevant Placement ID (spot ID) and Unit ID.

{% code title="Java" %}

```java
void OnGlobalImpressionDataListener.onImpression(
    String spotId, 
    String unitId, 
    ImpressionData impressionData
);
```

{% endcode %}

{% hint style="warning" %}
The static impression data listener holds a hard reference, which might cause memory leaks if you use it incorrectly.

DT recommends using the relevant `InneractiveAdManager.clearImpressionDataListener()` method when global ad impression data is no longer required.

{% code title="Java" %}

```java
InneractiveAdManager.setImpressionDataListener(new OnGlobalImpressionDataListener() {
    @Override
    public void onImpression(String spotId, String unitId, ImpressionData impressionData) {
        Log.v("impressionStaticData", 
              "spotId: " + spotId + 
              ", unitId: " + unitId + 
              ", impressionData: " + impressionData);
    }
});
```

{% endcode %}
{% endhint %}
