Bring programmatic demand to your screens
Four ways to connect your inventory to Eskimi, from opening a web page on the screen up to a full OpenRTB endpoint. Every one of them serves real ads today. Pick what fits your CMS, and nothing here requires exclusivity with your existing SSPs or exchanges.
Four ways to integrate
Every path below reaches the same demand and is live today. They are ordered easiest first, so the right one for you is usually the first one your screens or CMS can already do.
| Method | Best for | Effort | Real-time | Reporting |
|---|---|---|---|---|
|
1
TV browser player
HTML container
Your screen opens our player URL and plays whatever the next slot returns. Pair it by scanning the QR code on your screen page, or by reading the six-digit code the screen puts on itself and entering it there. Nothing to install, no SDK and no credentials to exchange. The same URL works two ways: as the screen's own full-screen browser page, or pasted into a web-page widget inside the CMS you already schedule in, so an owner on Xibo, Yodeck or ScreenCloud never has to leave it. The widget route also takes an optional ?slots=N parameter, so a playlist item can ask for a fixed number of slots (?slots=1 for a single spot) instead of polling forever: once N slots have played the player stops requesting new ads and leaves the last creative on screen, which is what makes it behave as one discrete spot in your loop rather than a continuously polling player. Before you commit inventory: Test the widget route on your own hardware before you commit inventory to it. We have tested a plain browser iframe, not any specific CMS product, and two separate faults look the same from your dashboard: some older Android players save a still snapshot of a web page instead of keeping it live, and some Samsung Tizen panels paint an embedded HTML ad solid black. Working looks like this. Stand in front of the screen, watch the creative change on its own within a slot or two, and check that the impressions on your screen page climb while you watch. A frozen image, or a black rectangle that still reports impressions, means the widget is not rendering live and the screen's own browser page is the route to use instead. |
Any screen that can open a browser, or any CMS that can show a web page | Lowest, no engineering | Yes | Automatic |
|
2
VAST tag
Ad tag
Your player calls a per-screen tag URL and gets a VAST document back, exactly as it would call any video ad server. The screen identifier can arrive as a path segment or as a query parameter, and the parameter names, screen lookup and VAST version are configurable per supplier. We relay the buyer's own VAST document and add a single impression beacon, so their trackers stay intact. |
A player or CMS that already takes a video ad tag | Low, paste a URL | Yes | Automatic |
|
3
JSON slot API
API integration
Your CMS asks us for the next slot over HTTP and gets back a small JSON object: kind, slot_token, media_url or html, mime, duration_ms, w, h and trackers. A kind of idle means the slot is yours to fill. Parameters can arrive in the query string or in a JSON body, and every payload key can be renamed to match what your CMS already expects. |
A CMS or player you can add a little code to | Low to moderate | Yes | Automatic |
|
4
OpenRTB
SSP / exchange integration
Your SSP posts an OpenRTB 2.6 DOOH bid request to our /rtb/bid endpoint with your key as a bearer token, and reads a standard bid response. Win and billing notices are rewritten through us, so nurl and burl point at single-use Eskimi URLs that relay to the buyer once the play is confirmed. |
A network already running an SSP or exchange | Highest, but usually already built | Yes | Automatic |
Not sure which fits? The online application walks through a few technical questions and mirrors this same table back as a recommendation.
How impressions are estimated
A "play" on a screen is not the same as an impression — a screen typically has more than one viewer per play. We apply an impression multiplier (average viewers per play) to turn logged plays into estimated audience impressions, the same way outdoor audience measurement has always worked. If you already have footfall or dwell-time data for your locations, we use it; otherwise a conservative default applies until real measurement is available. This keeps reporting honest: plays are a fact, impressions are always a transparent estimate built on top of them.
Creative formats we deliver
Campaigns are booked as image, video, HTML5 or animated creative. Your screens only need to accept what they can actually play, so tell us what is supported and we serve within those limits. One exception is worth planning for: a VAST tag can only carry video, so a VAST-only integration receives the video campaigns and skips the rest. The other three paths can take every format below.
| Format | File types | Specs |
|---|---|---|
| Static image | JPEG, PNG | Native resolution, max 10MB |
| Video | MP4 (H.264), MOV | Native resolution, 10-15s, max 50MB, 25-30fps |
| HTML5 | HTML + ZIP | Responsive, max 5MB |
| Animated | GIF | Native resolution, max 10MB |
Reporting fields
We log every play ourselves. All four paths hand back an impression beacon with the ad, so proof of play is generated on our side and appears in your supplier portal without you sending us anything. This table is the reporting vocabulary behind it: required fields are the ones every play record carries, and recommended fields are the ones that make audience estimates richer when you can provide them.
| Field | Description | Priority |
|---|---|---|
date |
Calendar date the plays occurred (YYYY-MM-DD). | Required |
time_hour |
Hour of day the plays occurred, for daypart analysis. | Recommended |
campaign_id |
Identifier of the campaign the plays belong to. | Required |
creative_id |
Identifier of the creative that played. | Required |
screen_id |
Identifier of the screen the plays occurred on. | Required |
screen_name |
Human-readable name of the screen or site. | Recommended |
location |
City, venue, or address of the screen. | Recommended |
plays |
Number of times the creative played in the period. | Required |
duration_sec |
Total seconds the creative played in the period. | Required |
impressions |
Estimated audience impressions delivered. | Recommended |
impression_multiplier |
Average viewers per play used to derive impressions. | Recommended |
reach |
Estimated unique audience reached. | Recommended |
cost |
Media cost for the period, in the agreed currency. | Required |
Keep your own play logs as well? Send a sample export and we will reconcile it against ours during onboarding, so both sides agree on the numbers before your first campaign runs.
Frequently asked questions
Do I need real-time bidding to work with Eskimi?
No. OpenRTB is the deepest of the four paths and the least common starting point. Most partners begin with the hosted browser player, which needs no credentials and no engineering time, or with a VAST tag when their player already knows how to call one.
Can I keep working with my existing SSPs and exchanges?
Yes. Integrating with Eskimi is not exclusive — your inventory can be connected here alongside any other demand source you already run.
What if my screens don't have audience measurement?
That's fine to start. We apply a standard impression multiplier until real footfall or dwell-time data is available, and switch to your measurement the moment you can provide it.
How long does onboarding take?
It depends on the method. A screen running the hosted player can be paired and live the same day. A VAST tag is a URL your player already knows how to call. The JSON slot API is a small amount of code against your CMS. OpenRTB takes longest because it involves two engineering teams. Submit the application below and your technical contact will confirm a timeline.
Ready to connect your screens?
Tell us about your inventory and technical setup — it takes a few minutes, and lands directly with our partnerships team.
Apply to integrate →