X Ads joins as a full platform — on X's own Ads MCP, because the REST Ads API answered 403
X Ads is now a connected platform with 9 reads and 8 approval-gated writes, and it runs on X's own Ads MCP server rather than the REST Ads API. That choice was measured, not preferred: on X's Ads Starter plan the REST API answered every call with an empty 403.
What the first live connect showed
- The OAuth 2.0 sign-in works (authorization code with PKCE, scopes
ads.read,ads.write,offline.access), and the refresh token rotates on every renewal. - The REST Ads API (
ads-api.x.com/12/accounts) returned an empty HTTP 403. X's developer console puts the Ads product on the "Ads Starter" plan, which it describes as MCP access only. - The same token against X's Ads MCP server listed 74 tools. So that server is the family's one transport; a 403 now says plainly that the developer app is not enrolled in the Ads project, and where to fix it.
- The test login had no ads account yet, so the connection stays pending until one exists at ads.x.com and Sync accounts runs. The write rules below come from the server's own tool definitions; they have not yet run against a live account.
How X's ad model differs from the others
- A campaign carries no budget. Daily and total budget, bid, schedule, pacing and placements all live on the line item; a campaign is a name and a funding instrument.
- Pausing and activating are different calls. An update can pause a campaign but never activate it; activation is X's separate step, and a line item serves only once its campaign is active too.
- There is no campaign or line-item delete on X's Ads MCP. Pause is the stop, and a status of DELETED is refused outright.
- Stats come seven days and twenty ids at a time. A longer question is split into windows and merged, in the ads account's time zone.
- Money arrives in micro-units and is converted once at the boundary, so every amount the agent shows or accepts is in whole account currency.
What waits for a person
By default every X Ads write waits for your approval, and creates always start paused. Under opt-in auto-approve, a budget or bid change far outside the current value is still withheld. The deletes X's server does offer — a custom audience, a card, a pixel, a media item, a tag, an app list — and removing a targeting criterion (a line item with no criteria serves broadly) wait for a person on every lane, never inside a batch.
Frequently asked questions
- Does Agent Planners support X (Twitter) Ads?
- Yes, since 2 October 2026: 9 reads and 8 approval-gated writes on X's Ads MCP cover accounts, funding, campaigns, line items, promoted posts, targeting, stats, status, line-item budgets, bids, paused creates and the server's other tools by name.
- Why does the X Ads API return 403?
- On X's Ads Starter plan the developer console grants the Ads product as MCP access only, and the REST Ads API answered our first live connect with an empty HTTP 403. The same token worked against X's Ads MCP server, which listed 74 tools.
- Where is the budget on an X Ads campaign?
- On the line item. On X's Ads MCP a campaign carries only a name and a funding instrument; daily and total budget, bid, schedule, pacing and placements are line-item fields.