AdCP sales agent
Discovery is open to any agent. Buying needs an API key created in an advertiser account; every key carries a per-booking maximum, a daily cap, a total cap and an approval threshold. Prices, weeks and rules are the ones on the rate card.
https://batchandrelease.com/adcpDiscovery
- MCP
POST https://batchandrelease.com/adcp· JSON-RPC 2.0 · protocol 2025-06-18
Authentication
This publication runs its own AdCP sales agent over MCP. Discovery is open; buying uses an API key you create in your account, with a per-booking maximum, a daily cap, a total cap and a threshold above which you approve each booking yourself.
Authorization: Bearer pk_… · Advertiser account →
Tools
get_productspublicList this publication's ad products with fixed prices, formats and the ISO weeks still free for the next 12 weeks. Prices are final; there is no auction or negotiation.
list_creative_formatspublicCreative formats accepted, with sizes and text limits.
create_media_buyBearerBook one or more products. Money is held from the prepaid balance and charged only when the editorial desk approves every creative. Bookings above the key's approval threshold wait for the account owner. Send an idempotency_key (16+ characters) so retries never double-book.
sync_creativesBearerAttach creatives to the packages of a media buy. Each creative names its package_id. Assets are https URLs and text; the desk reviews them before anything is charged or shown.
get_media_buysBearerList this account's media buys, or one by media_buy_id.
get_media_buy_deliveryBearerDelivery for one media buy. Reports measured:false until impression counting is live; it never reports estimates as delivery.
Example: list products
curl -s https://batchandrelease.com/adcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_products","arguments":{}}}'curl -s https://batchandrelease.com/adcp \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer pk_…' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_media_buy",
"arguments": {
"idempotency_key": "2f6c1a9e-week43-home",
"packages": [
{
"product_id": "home_top",
"pricing_option_id": "flat_usd",
"start_time": "YYYY-MM-DDT00:00:00Z",
"end_time": "YYYY-MM-DDT00:00:00Z"
}
]
}
}
}'Rate card
| product_id | Price | format_id |
|---|---|---|
home_topHome page, top | $150 / week | billboard_970x250 |
article_inlineInside articles | $120 / week | rectangle_300x250 native_card |
article_railArticle side rail | $90 / week | halfpage_300x600 |
section_sponsor_inferenceSection sponsor · Inference | $100 / week | native_card |
sponsored_articleSponsored article | $450 / article | sponsored_article |
run_of_siteRun of site | $8 CPM · min. $50 | rectangle_300x250 halfpage_300x600 |
newsletter_sponsorNewsletter sponsor | Opens with the first issue | newsletter_sponsor |
dedicated_emailDedicated email | Opens with the first issue | dedicated_email |
Rules agents must follow
- Flat-rate placements are sold by ISO week: start and end on a Monday at 00:00 UTC.
- Book at least 3 days ahead and at most 26 weeks ahead.
- Send an idempotency_key of 16+ characters with every create_media_buy; a retry returns the same booking.
- Money is held at booking and charged only when the desk approves every creative; refused or expired bookings are released in full.
- Above the key’s approval threshold the booking waits for the account owner.
Media buy statuses
pending_approval- Waiting for your approval
pending_creatives- Waiting for creatives
pending_review- In review
creatives_rejected- Creative refused
pending_start- Approved, scheduled
active- Running
completed- Finished
canceled- Cancelled
expired- Expired, released