# Create an X ad post

Compose a promoted-only ("nullcasted") post to use as an ad creative. Works on your own X Ads account, connected through Get MCP Ads. The preview is free; the change costs $0.05 when you confirm it. Needs account id and as user id.

Compose a promoted-only ("nullcasted") post to use as an ad creative. The post never appears on the author's profile or followers' timelines and spends nothing by itself ; attach it to a line item with promote_post. Preview by default. Ask the user to approve the exact account, target and parameters before confirm:true. Agentik price: free to preview; $0.05 when the change is applied (confirm: true without validateOnly).

- Tool ID: `x-ads/create-ad-post`
- Name in the catalog: X Ads: Create ad post
- Provider: [X Ads](/providers/x-ads.md)
- Capability: [X Ads campaign management](/tools/x-ads/campaign-management.md)
- Price: free preview, $0.05 per applied change
- Workspace access is automatic. Connect a platform using the link and notice returned to your AI assistant; an owner or admin completes platform consent and returns to the conversation; see the [guide](/docs/getmcpads.md).
- Authentication: an authorised Agentik workspace is required for execution, including zero-price tools.

## Pricing contract

The provider’s price, with no markup. Billed for measured usage.


```json
{
  "model": "per_call",
  "amountUsd": 0,
  "multipliers": [
    {
      "all": [
        {
          "field": "confirm",
          "equals": true
        },
        {
          "field": "validateOnly",
          "truthy": false
        }
      ],
      "setUsd": 0.05
    }
  ]
}
```

## Complete input schema


```json
{
  "type": "object",
  "properties": {
    "account_id": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9]+$",
      "maxLength": 64,
      "description": "X Ads account ID selected in Sources."
    },
    "as_user_id": {
      "type": "string",
      "maxLength": 100000,
      "description": "User ID to post on behalf of (must be a promotable user of the account, e.g. the account's own ha..."
    },
    "card_uri": {
      "type": "string",
      "maxLength": 100000,
      "description": "Card URI to attach (e.g. a website card)."
    },
    "conversation_settings": {
      "type": "string",
      "enum": [
        "EVERYONE",
        "FOLLOWING",
        "MENTIONED_USERS"
      ],
      "description": "Who can reply to the post (default EVERYONE)."
    },
    "media_keys": {
      "type": "string",
      "maxLength": 100000,
      "description": "Comma-separated media keys of pre-uploaded media to attach (required unless text is provided)."
    },
    "text": {
      "type": "string",
      "maxLength": 100000,
      "description": "Post text (required unless media_keys is provided)."
    },
    "trim_user": {
      "type": "boolean",
      "description": "Return only the author's user ID instead of the full user object in the response (default false)."
    },
    "tweet_mode": {
      "type": "string",
      "enum": [
        "compat",
        "extended"
      ],
      "description": "Response rendering mode (default compat)."
    },
    "video_cta": {
      "type": "string",
      "enum": [
        "VISIT_SITE",
        "WATCH_NOW"
      ],
      "description": "Call-to-action button on an attached video; set the target URL with video_cta_value."
    },
    "video_cta_value": {
      "type": "string",
      "maxLength": 100000,
      "description": "Destination URL for the video_cta button; required when video_cta is set."
    },
    "video_description": {
      "type": "string",
      "maxLength": 100000,
      "description": "Description shown under an attached video (1-200 characters)."
    },
    "video_title": {
      "type": "string",
      "maxLength": 100000,
      "description": "Title shown under an attached video (1-70 characters)."
    },
    "confirm": {
      "type": "boolean",
      "default": false,
      "description": "False previews only; true applies this exact change after explicit human confirmation."
    },
    "workspace_id": {
      "type": "string",
      "description": "Authorized workspace ID from list_accounts/list_workspaces. Use the user's chosen workspace; never guess between clients. Optional when a unique account identifies it."
    },
    "reason": {
      "type": "string",
      "maxLength": 500,
      "description": "Why, in the person's words or from the evidence (e.g. CPA twice the target for 7 days). Saved with the change in the shared client journal."
    }
  },
  "required": [
    "account_id",
    "as_user_id"
  ]
}
```

## Published example

No example input is published for this tool. Ask for the inputs required by its schema.

## Execute and retrieve

Inspect again before execution, explain the price and obtain the required authority. Use MCP run_tool or POST /v1/run with this tool ID, valid input and an idempotency key. Save the returned run ID and follow the actual state. If Agentik answers that the tool is temporarily unavailable, do not retry it blindly; use discovery to propose an alternative.

A partial or uncertain result can still have consumed provider resources. Consult [billing](/docs/billing.md), [idempotency](/docs/idempotency.md) and [asynchronous results](/docs/async.md).

[REST inspection](https://api.agentik.cc/v1/tools/x-ads/create-ad-post) · [OpenAPI](/openapi.json) · [Connection guide](/connect.md)

---

[HTML page](/providers/x-ads/create-ad-post) · [Agent index](/llms.txt)
