DocsIDarsa.technology

Docs / AI Box And Video Analytics Software / DOOH Audience Meter API Quick Start

DOOH Audience Meter API Quick Start

Read a screen network's OTS, impressions, attention and the audience per campaign from a DOOH Audience Meter box with an API token.

This quick start reads the audience of a site’s screens from a DOOH Audience Meter box. You need curl and about ten minutes. The numbers in the answers below are sample values. Views are anonymous: no identity and no image is kept.

Before You Start

Ask an admin of the box to create an API account on the dashboard (API accounts page) with:

  • the role Viewer on the site of the screens;
  • the scope read (add export to download the view log or the campaign figures as a file);
  • an expiry date.

They give you the token (<API_KEY> below), the box’s address (<BOX_HOST>) and a copy of the box’s certificate (box.pem, from Download the box’s certificate on the API accounts page) with its SHA-256 fingerprint: check it as The Box’s Certificate shows. Authentication and Scopes explains each of these.

Find Your Site

curl --cacert box.pem \
  -H "Authorization: Bearer <API_KEY>" \
  "https://<BOX_HOST>/api/v1/sites"
{
  "items": [
    {
      "id": 1,
      "name": "North Plant",
      "timezone": "Asia/Jakarta",
      "created": "2026-10-01T02:00:00Z",
      "version": 4,
      "my_role": "viewer",
      "location": { "lat": -6.2, "lon": 106.8 },
      "area": null,
      "zones": 3
    }
  ]
}

Keep the site’s id (here 1). Each screen is watched by one camera; the cameras are at GET /api/v1/cameras.

Read The Audience Overview

Ask for one period with from and to (RFC 3339; %2B is the + of the time zone offset):

curl --cacert box.pem \
  -H "Authorization: Bearer <API_KEY>" \
  "https://<BOX_HOST>/api/dooh/v1/sites/1/overview?from=2026-11-01T00:00:00%2B07:00&to=2026-11-02T00:00:00%2B07:00"
{
  "ots": 9620,
  "impressions": 3105,
  "engaged": 684,
  "attention_rate": 32.3,
  "engagement_rate": 7.1,
  "avg_attention_s": 3.1,
  "avg_dwell_s": 6.4,
  "audience_now": { "in_view": 7, "watching": 2 },
  "demographics": {
    "cells": [{ "age_band": "18-24", "gender": "male", "impressions": 512, "share": 19.8 }],
    "unknown": 514
  },
  "emotions": { "neutral": 2210, "happy": 604, "sad": 41, "surprised": 88, "angry": 12, "unknown": 150 }
}
Field Meaning
ots Opportunities to see: people in view of a screen in the period
impressions, engaged Viewers who looked long enough to count as an impression, and as engaged (the site’s settings)
attention_rate, engagement_rate Impressions and engaged viewers as a percentage of OTS
avg_attention_s, avg_dwell_s The impressions’ mean attention, and the mean time in view, in seconds
audience_now People in view of the site’s screens now, and how many are watching
demographics, emotions The impressions per age band and gender, and per mood

For the same figures per hour or day, call GET /api/dooh/v1/sites/1/trend; for the peak hour, dayparts and each screen, GET /api/dooh/v1/sites/1/analytics.

Read The Audience Per Campaign

The box matches what each screen played (its play log) to the audience in front of it:

curl --cacert box.pem \
  -H "Authorization: Bearer <API_KEY>" \
  "https://<BOX_HOST>/api/dooh/v1/sites/1/campaigns?from=2026-11-01T00:00:00%2B07:00&to=2026-11-02T00:00:00%2B07:00"
{
  "price_per_slot": null,
  "currency": "IDR",
  "campaigns": [
    {
      "campaign_id": "Morning Coffee",
      "plays": 320,
      "play_s": 4800,
      "ots": 2410,
      "impressions": 806,
      "engaged": 170,
      "attention_rate": 33.4,
      "engagement_rate": 7.1,
      "avg_attention_s": 2.9,
      "est_cost": null,
      "est_cpm": null,
      "out_of_flight": 0,
      "record": {
        "id": 3,
        "advertiser": "Advertiser A",
        "flight_start": "2026-11-01",
        "flight_end": "2026-11-30",
        "external_id": "CMP-1001",
        "screens": [41]
      },
      "creatives": [
        {
          "creative_id": "Coffee 15s",
          "record_id": 4,
          "length_s": 15,
          "plays": 320,
          "play_s": 4800,
          "ots": 2410,
          "impressions": 806,
          "engaged": 170,
          "attention_rate": 33.4,
          "engagement_rate": 7.1,
          "avg_attention_s": 2.9,
          "est_cost": null,
          "est_cpm": null,
          "out_of_flight": 0
        }
      ]
    }
  ]
}

A view counts for every creative on its screen while the person was in view. record is the campaign manager’s record when the campaign has one. est_cost and est_cpm stay null until an admin sets the site’s price per slot. Download the same figures with GET /api/dooh/v1/sites/1/campaigns/export?format=csv and the scope export.

Send Play Logs

The campaign figures need to know what each screen played. Your CMS or player can send its play log in two ways:

  • signed by the CMS itself: POST /api/dooh/v1/feeds/plays/{site}, with the site’s play-log key made by an admin of the site on the dashboard (see Signing Requests to the Box);
  • as a CSV upload with an API token that is an admin of the site: POST /api/dooh/v1/sites/1/plays/upload (screen,creative,campaign,start,end).

An ad server can read the audience per screen and interval with a feed token of its own, without an API account: GET /api/dooh/v1/feeds/audience/1?from=...&to=...&bucket=hour with Authorization: Bearer <FEED_TOKEN>.

Next Steps

Was this page helpful?

1.0.0. Updated 2026-11-06