NewElemental TV Sales Agent is live on the Ad Context ProtocolRead the announcement →
Elemental TVSales Agent
Ad Context Protocol · Sales Agent · Live

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.

Agent endpoint (MCP)
https://sales-agent.elementaltv.io/mcp
Protocol
AdCP v3 · Media Buy · MCP transport

What buying agents can do

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
ToolAccessWhat it does
get_adcp_capabilitiespublicProtocol version, supported tools and features, authentication scheme.
list_creative_formatspublicAccepted video formats, durations and delivery methods.
get_productspublic / authInventory packages with targeting signals; prices, estimates and buyer-specific deals when authenticated.
validate_inputpublic / authCheck a creative manifest without saving it. Canonical format checks are public; product-specific checks require authentication.
sync_accountsauthRegister the advertiser accounts you buy for (pending until approved by us).
list_accountsauthYour advertiser accounts and their approval status.
sync_creativesauthCreate 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_creativesauthRead back your library creatives and creatives attached inline to media buys, including their assignments.
create_media_buyauthBook a campaign on a product; activated after our approval.
update_media_buyauthPause, resume, cancel or re-budget an approved buy.
get_task_statusauthProgress of an operation that was accepted asynchronously (e.g. a buy awaiting approval).
get_media_buysauthStatus of your campaigns.
get_media_buy_deliveryauthDelivery, spend, pacing and reach.
report_usageauthSubmit usage for a reporting period, with per-record errors and idempotent retries.
sync_governanceauthExperimental: 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.

your-domain.com/.well-known/adagents.json — pointer variant
{ "$schema": "https://adcontextprotocol.org/schemas/v3/adagents.json", "authoritative_location": "https://app.elementaltv.io/.well-known/adagents.json", "last_updated": "2026-09-10T00:00:00Z" }

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
All product updatesAnnouncements for every Elemental TV product live on updates.elementaltv.com.