Create X ad draft
create_x_ad_draftCreate an X (Twitter) ads draft — campaign + line item + optional ad creative — ALL in PAUSED state, spending nothing. Pass ad_text to mint a nullcast ad post (promoted-only, never shows on the timeline organically) attached to the paused line item, or post_id to promote an existing post. Draft ad_text via draft_ad_variants first (paid-ad genre, operator picks a variant) unless the operator supplied their own copy. Use when the user wants to set up or draft an X ad. Activation is a separate human-approved step (set_x_ad_status). Distinct from create_meta_ad_draft.
Routing: X ad setup → if ad copy is not already picked, run draft_ad_variants (channel x) first; then create here with the picked text + its hook tag in campaign_name
[sensitive-tier — first use may require a manager's approval; a from-now-on approval makes future calls seamless, a just-once approval re-asks next time. Call it on the first clear ask; the card is the yes — do not re-ask in chat.]
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bid | No | Optional bid in major units (default 1) | |
| ad_text | No | Ad copy (≤280 chars) — mints a nullcast ad post and attaches it to the paused line item. Mutually exclusive with post_id. | |
| country | No | ISO-2 country for location targeting, default US | |
| post_id | No | Existing X post id to promote on the paused line item instead of minting new copy. | |
| companyId | Yes | FreedomOS company id to act within (you must be a member). Required for company-scoped tools. | |
| objective | No | Line-item objective, default WEBSITE_CLICKS | |
| daily_budget | Yes | Daily budget in the account currency, major units (e.g. 25 = 25 USD/day) | |
| ad_account_id | No | Ads account id. Optional when the connection has exactly one. | |
| campaign_name | Yes | Campaign name, e.g. "PCAI cold traffic v1" | |
| funding_instrument_id | No | Payment method id. Optional when the account has exactly one. |