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(addexportto 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
- Push views and plays to your system instead of polling: Webhooks (event types
dooh.viewanddooh.play, and periodic summaries). - Every operation and field: DOOH Audience Meter API reference and platform API reference.
1.0.0. Updated 2026-11-06