Skip to main content
If you sell digital screens or classic out-of-home panels, there are two ways onto Apostra. Which one fits depends on where your inventory is managed. This page helps you choose, says what to build to, and says plainly what an out-of-home seller cannot do on Apostra yet. “Out-of-home” here covers two AdCP channels. dooh is digital: screens that play your creative in a loop. ooh is classic: posters, bulletins, bus sides and other panels with no play event.

Choose a path

Selling with your own agent is a listing, and a listing costs nothing. Sell on Apostra compares it with a storefront Apostra hosts for you.

Connect your own agent

Follow Connect an agent in an Agents account. Apostra reads your agent from its URL, checks it against Agent requirements, and runs the certification its products call for. Passing a use case is what lets Apostra send your agent new buys for it. Your agent is registered in an Agents account, which belongs to an organization. A seller account cannot add an agent from its URL alone: it adds one that its organization’s Agents account holds, as Connect your own sales agent describes. New seller signups start inside an organization. An older account that is still standalone becomes an organization when it creates the Agents account from its Accounts screen. The sales agent checklist lists what your agent must declare before you connect it.

Connect Broadsign

Connecting an ad server lists what you provide and what the connection does. These points matter most to an out-of-home seller:
  • Apostra has not yet run the Broadsign connection against a live Broadsign account. It was built from Broadsign’s published API descriptions. Expect adjustments when the first one connects.
  • Every buy is a reserved, guaranteed one. Apostra books each approved buy in Broadsign as one proposal, with one line item for each package.
  • Apostra checks availability before it books. If Broadsign says the screens cannot be reserved, the buy is refused. If availability checks are switched off for your Broadsign domain, the buy is booked without the check. Buyers cannot ask Apostra for a forecast of your available screen time yet.
  • Venue types are not modelled. Apostra publishes your screens and packages as products. It does not map them to a venue taxonomy, so a bus shelter and a pharmacy screen differ only in how you shape your products.
  • Creative, pausing and daily plays need Broadsign Control. Without it, assigning a creative or pausing a buy is refused. See Optional Broadsign Control access.

Build to AdCP 3.2

Build your agent to AdCP 3.2 and list "3.2" in adcp.supported_versions. Apostra calls an agent that lists 3.2, and no earlier release, on 3.2. Canonical creative formats, which need AdCP 3.1 or later, are required from 1 December 2026. Reliable reporting, the compact lifecycle and webhook signing are required from 1 February 2027. Getting ready for AdCP 4.0 has the dates and what to change. AdCP 3.2 defines these things for out-of-home: Apostra does not use all of these yet. Its stored delivery totals cover impressions, spend, clicks and completed views for each package. Send plays, dooh_metrics and ooh_metrics if your agent can: they are valid AdCP. We have not confirmed that they reach buyers on Apostra.

Creative formats

Apostra reads a creative format as a canonical format_kind with its params, with no agent URL. See Agent requirements for how to declare them. AdCP has no out-of-home creative kind of its own. Screens use the image and video kinds: The image kind takes a size or size range, an aspect ratio, a maximum file size and image file formats. The video_hosted kind takes a duration, an aspect ratio, an orientation, size limits, codecs and a container. There are no parameters for dwell time, refresh rate or a limit on motion. Declare one format option for each screen size you sell. Each distinct size is its own family in certification, with its own test buy.

How certification treats out-of-home

Certification judges your agent by use case. Apostra reads your products to decide which apply. For out-of-home:
  • Classic out-of-home (ooh), and digital screens (dooh) where Apostra’s tracker cannot fire: the seller-reported sandbox buy. The test buy passes when it goes live, your agent hands back the context Apostra sent, and your reports arrive on the schedule you declare in reporting_capabilities. Apostra’s tracker checks do not apply.
  • Programmatic digital screens, where Apostra’s tracker can fire: the standard tracked checks, including that the tracker hears impressions.
  • Programmatic and non-programmatic dooh are always separate families. Each format kind on a dooh product gets its own test buy, and so does each size or parameter set within a kind.
A test buy carries a test creative. For dooh and ooh, Apostra offers an image or video that matches the format you declared, or makes one at your declared size. Test buys run on a sandbox account, are capped at USD 10 each and USD 50 a run, and last three days. A product whose smallest pricing option needs more than the cap is skipped, so offer one option at or below it on a product Apostra can buy. Your agent’s sync_accounts must accept Apostra’s test identity and return a sandbox account. Apostra charges nothing to certify. A sandbox account that serves says what the account has to do. Not settled: what a test buy should do on a physical screen. Certification asks your sandbox to behave as the buy’s schedule says and to report on time. It does not say whether a test creative should play on a screen in public, or how a seller proves a sandbox buy that did not.

Publisher authorization: adagents.json

A publisher authorizes the sales agent that sells its properties in its own adagents.json. For a seller connected through an ad server, that entry names https://interchange.io. For your own agent it names your agent’s URL, exactly as you connected it. Authorizing Apostra in a publisher’s adagents.json describes the entry and every reason a check can give. AdCP 3.2 lets you declare screens as properties in the same file. This one declares a network of screens and authorizes an agent to sell them:
Publish it at https://<your-domain>/.well-known/adagents.json. Apostra reads the file for each publisher domain in your coverage, so a screen network still needs a domain to serve the file from. Set publisher_domain on each screen property: Apostra ties a property to a publisher domain by that field or by a domain or subdomain identifier, and venue_id and screen_id do neither. A file served from your own domain needs the entry to select at least one property. A file hosted elsewhere needs each selected property tied to your domain. See Which properties count. Not settled: how Apostra matches a screen or venue identifier to a product. A product can declare identifiers of every AdCP type, but Apostra’s property lists do not store DOOH venue entries yet, so a venue does not match an exclusion list when buyers choose products.

What is not settled yet

Apostra is working these out with its first out-of-home sellers. Until they are, treat each as open:
  • Identifiers for screens and venues. What a buyer sees and filters on, and how Apostra matches a venue_id or screen_id to a product. See above.
  • Classic out-of-home properties. AdCP 3.2 has no property type for a panel, only identifiers inside ooh_metrics. How a classic seller declares its panels is open in AdCP itself.
  • Price per play, per hour or per slot. AdCP defines them. We have not confirmed how Apostra shows a buyer a flat_rate or time price, or compares it with a cost per thousand impressions.
  • Reporting units. What reaches a buyer when you report plays, a modelled audience estimate or a posting record. See above.
  • Production lead times for static out-of-home. Apostra does not enforce a booking deadline or a creative deadline you set. Say them in your product descriptions, and approve or refuse buys accordingly.
  • Classic out-of-home with no ad server. Apostra has no connection to a system that books posters or bus sides. Your own agent is the only route today.
If your situation is not covered here, say so when you set up. It decides what we work on next.