CTV inventory for AI buying agents, on the Ad Context Protocol
Elemental TV runs a Sales Agent on AdCP. Buying agents discover the CTV inventory we represent, read products with prices and impression estimates, and create and manage media buys over a standard MCP endpoint — with every campaign approved by our team before it goes live.
Standard AdCP tools over one endpoint — public discovery, authenticated transactions
Discover
•
Products — the inventory packages we sell: fixed-price CTV deals across the publishers we represent, with targeting described as readable signals (content, geo, device, audience).
•
Prices and estimates — CPM and a weekly impression estimate (low / mid / high) once you are authenticated.
•
Creative formats — accepted video durations and delivery methods, so your creative can be validated before you buy.
•
Authorization chain — every property we sell is declared in our adagents.json and matched by the publisher's own file, so your agent can verify we are allowed to sell it.
Transact
•
Prepare creatives before a buy with sync_creatives, which creates or updates creatives in your advertiser library. Use list_creatives to read back library creatives and creatives attached inline to your buys. Library access requires a buyer account with creative-library permissions.
•
Create a media buy on a product with a budget, flight dates and an approved advertiser account. Send creatives inline as a VAST tag or hosted video; they are validated at intake. Library creatives cannot yet be assigned to packages by ID. The campaign starts once our team approves it.
•
Manage it yourself — pause, resume, cancel or change the budget of an approved buy, synchronously, with optimistic concurrency so two agents never overwrite each other.
•
Track delivery — impressions, spend, pacing and reach at media-buy, package and creative level, from the same reporting we use.
•
Advertiser accounts — register the brands you buy for; each account is reviewed and approved by us before its first campaign.
Human in the loop, by design. Access is granted per buyer, advertiser accounts are approved individually, budgets are checked against a funded balance, and every campaign is approved before it delivers. After approval, day-to-day changes are self-serve for your agent.
How to connect
From first contact to first campaign — typically within a few business days
Say hello. Email support@elementaltv.com with your operator domain (where your brand.json lives) and the advertisers you plan to buy for. We agree commercial terms and sign a buyer agreement.
We create your access. A buyer seat, an API user and a bearer token, handed over on a secure channel. Your seat is funded per the agreement.
Register advertisers. Your agent calls sync_accounts; we approve each advertiser account. Only approved accounts can be used in a buy.
Prepare creatives. Use validate_input to check a creative manifest. If your account has library access, use sync_creatives to store creatives before a buy. Send creatives inline when booking the campaign.
Buy. Authenticated get_products now shows prices and estimates; create_media_buy books the campaign; we approve it; your agent manages it from there.
Try the public surface — no credentials needed
MCP endpoint https://sales-agent.elementaltv.io/mcp (Streamable HTTP)
Public tools get_adcp_capabilities · list_creative_formats · get_products
Preflight validate_input — public for canonical formats; auth for product targets
Authenticated Authorization: Bearer <token> → prices, estimates, accounts, creatives, media buys, delivery
Tools
Buyer-facing tools on the live endpoint — check tools/list for schemas and get_adcp_capabilities for supported features and limits
Tool
Access
What it does
get_adcp_capabilities
public
Protocol version, supported tools and features, authentication scheme.
list_creative_formats
public
Accepted video formats, durations and delivery methods.
get_products
public / auth
Inventory packages with targeting signals; prices, estimates and buyer-specific deals when authenticated.
validate_input
public / auth
Check a creative manifest without saving it. Canonical format checks are public; product-specific checks require authentication.
sync_accounts
auth
Register the advertiser accounts you buy for (pending until approved by us).
list_accounts
auth
Your advertiser accounts and their approval status.
sync_creatives
auth
Create or update advertiser-library creatives, with a result for each creative, dry-run validation and idempotent retries. Requires library permissions; package assignments are not supported.
list_creatives
auth
Read back your library creatives and creatives attached inline to media buys, including their assignments.
create_media_buy
auth
Book a campaign on a product; activated after our approval.
update_media_buy
auth
Pause, resume, cancel or re-budget an approved buy.
get_task_status
auth
Progress of an operation that was accepted asynchronously (e.g. a buy awaiting approval).
get_media_buys
auth
Status of your campaigns.
get_media_buy_delivery
auth
Delivery, spend, pacing and reach.
report_usage
auth
Submit usage for a reporting period, with per-record errors and idempotent retries.
sync_governance
auth
Experimental: register a governance agent for an account. Media buys that include a plan are checked with that agent before submission.
Inventory is CTV video: FAST channels and CTV apps of the publishers we represent. Accepted creative durations are published per product (typically 15–90 seconds); creatives are delivered as a VAST tag or a hosted video file.
Creative sync. Each creative returns a created, updated or failed result. A dry run validates without writing. Strict validation is the default: one invalid creative prevents all writes; lenient validation writes the creatives that pass. Completed requests can be replayed with the same body and idempotency key within 24 hours. Sync does not assign creatives to packages or delete creatives omitted from a request.
Creative provenance. Checks follow declared product policies, including required disclosures and accepted verifiers. A verifier's high-confidence AI finding rejects a conflicting non-AI claim. Permitted audit observations do not reject the creative. The current live catalog does not declare provenance policies, so these checks are not active for its products.
For publishers
Represented inventory becomes discoverable and buyable by every AdCP agent — one line on your side
What we do
•
Declare your properties and our authorization in our adagents.json and brand.json, generated from your configuration — no hand-edited files.
•
Declare channels, series and event series as collections under a publisher property. Distribution rows describe where each collection is carried, on owned properties or third-party hosts. Eligible configured collections appear in the generated adagents.json.
•
Publish your deals as AdCP products with truthful prices, estimates and formats.
•
Vet every buyer and approve every campaign before it delivers on your inventory.
•
List the relationship in the AdCP registry so buyers can verify the authorization chain end to end.
What you host
•
One file at https://<your-domain>/.well-known/adagents.json — either a three-line pointer to our managed file (deploy once, never touch again) or an inline entry pasted into a file you already run.
•
Served over HTTPS with Content-Type: application/json and HTTP 200 — no redirects; AdCP validators refuse them.
Collection settings are available in the ElementalTV App and 1Audience. In the ElementalTV App, configuration requires AdCP access and the relevant seat and deal permissions. In 1Audience, existing seat and role permissions apply.
Onboarding is one call to agree the relationship and properties, about half an hour of configuration on our side, and one deploy on yours. Write to support@elementaltv.com.
Roadmap: buying by collection
Our contribution to the protocol, and what it enables next
A FAST channel can play inside apps its owner does not control. Collections describe the program; distribution describes where it is carried. Collection declarations are now supported. Product selection by collection and registry confirmation of carriage remain future work.
What we are building next
•
Product collection selectors — select a channel across its distribution or on a specific platform.
•
Registry host confirmation — verify carriage claims against host platforms' files and show the results in the AdCP registry.
Why it matters
•
Channel owners can describe carriage without claiming ownership of the host platform.
•
Planned collection selectors would let buyers target a channel across the platforms that carry it.
•
Hosts keep control of their own inventory; who sells which ad breaks stays a commercial agreement, as it should.
Changelog
This page is kept current as the agent evolves
Creative library and collection declarations. Added creative sync and library readback, with per-creative results, dry runs and idempotent retries. Collections describe channels, series, event series and their distribution. Media buys still take creatives inline; product collection selectors and registry host confirmation remain on the roadmap.
Creative preflight and reporting tools.validate_input, report_usage, inline creative readback through list_creatives, and experimental sync_governance were introduced in the September update. Read the announcement →
Self-serve buy management.update_media_buy: pause, resume, cancel and re-budget approved buys with optimistic concurrency. Products now carry weekly impression estimates as a range and exact accepted creative durations; creatives are validated at intake. Per-deal listing lets publishers choose what is public, buyer-specific or off-menu. Read the announcement →
AdCP spec: FAST channels as collections. Our working-group proposal to model programmed channels and their carriage was merged into the protocol (pre-release 3.2).
Production launch. Sales Agent live at sales-agent.elementaltv.io/mcp; discovery files published; listed in the AdCP registry; first publisher and first buyer onboarded.
All product updatesAnnouncements for every Elemental TV product live on updates.elementaltv.com.