Your campaigns, from code or from your AI assistant

Pull reports with the Reporting API, or connect the MCP server so an AI assistant can read results, pause what isn't working and add new creatives. It signs in as you and gets your permissions, nothing more.

// any MCP client with remote servers and OAuth sign-in
{
  "mcpServers": {
    "distribution": {
      "url": "https://adsmanager.daily.dev/mcp"
    }
  }
}
// No API key. You sign in and approve access.
Three ways in

Three APIs, one platform

Each one has its own token, scoped to the job it does.

For advertisers

Reporting API

Create a token in Settings, then ask for a report on up to 100 campaigns over any range up to a year. Run it once, or schedule it daily or weekly.

POST /api/reporting/v1/reports
Authorization: Bearer <reporting token>
  • CSV with impressions, clicks, spend, CTR, reach and frequency
  • Delivered as a download link or by email
  • Tokens last 90 days and can be revoked
For agencies and partners

Partner API

Create advertisers and whole campaigns in one call: budget, dates, ad sets, targeting and creatives. Pause and resume them, and read results down to each creative.

POST /api/campaigns
POST /api/campaigns/{id}/pause
POST /api/analytics/performance
  • Server to server, with a partner token
  • Daily figures for every campaign, ad set and creative
  • OpenAPI spec included
For publishers

Ads API

Ask for an ad for a placement from your server or the browser, show it, then record the impression and the click.

POST /v1/publishers/{publisher}
  • A secret token on your server
  • A publisher key and allowed origins in the browser
  • OpenAPI 3.1 spec
MCP in practice

Ask your assistant. Act on the answer.

A remote MCP server you sign in to. Read tools answer right away. Write tools need write access, which you can leave off, and only reach campaigns your account already manages.

AI assistant · distribution.dev connected
How did the Halyard campaign do last week?
● get_campaign_performance campaign: Halyard launch · last 7 days

48,200 impressions and 271 clicks, a 0.56% CTR. "Branch like code" is doing the work; one creative is well behind.

CreativeClicksCTRBranch like code1640.71%Preview DBs in CI810.52%Postgres, per PR260.24%

Want me to pause "Postgres, per PR"?

Yes, pause it.
● set_entity_status creative: Postgres, per PR · paused
ToolWhat it doesAccess
list_advertisersThe advertisers your account can accessRead
get_performance_summaryImpressions, clicks, CTR, reach, spend and CPC for a periodRead
get_campaign_performanceEach campaign with its ad sets and creatives, status and budgetRead
get_performance_time_seriesDay by day, as totals, a comparison or a breakdownRead
export_performance_csvThe same numbers as a CSV fileRead
list_campaignYour campaigns and ad sets, without picking a periodRead
set_entity_statusPause or resume a campaign, ad set or creativeWrite
create_creativeUpload a new creative with its imageWrite
add_creative_to_campaignAttach a creative to an ad set that is already runningWrite

It can't create campaigns, change budgets or targeting, or delete anything. Those stay in Ads Manager.

Access and safety

Your sign-in, your permissions

  • Sign in, no API keyThe MCP server uses your normal login and a consent screen (OAuth).
  • Read-only if you likeLeave write access off and the assistant can look but not change anything.
  • Permissions checked on every requestConnecting an assistant never adds access to an advertiser you don't already have.
  • Short-lived tokensMCP access tokens last five minutes and refresh; reporting tokens last 90 days and can be revoked.

Connect your tools to your next campaign.