> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markifact.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Image Ad

> Creates an image ad in an X Ads account end to end: uploads up to 4 images (GIFs too), builds a website or app card when a destination is given, creates the Promoted-only post, and promotes it

Creates an image ad in an X Ads account end to end: uploads up to 4 images (GIFs too), builds a website or app card when a destination is given, creates the Promoted-only post, and promotes it. A destination allows exactly one image. X ads have no status of their own, so keep the ad group or campaign paused until you are ready to spend. Enable post\_only to build the creative without promoting it.

|                       |                         |
| --------------------- | ----------------------- |
| **App**               | X Ads                   |
| **Operation ID**      | `x_ads_create_image_ad` |
| **Type**              | Action                  |
| **Connection**        | `x_ads` (required)      |
| **Credits per run**   | 1                       |
| **Agent / MCP tool**  | Yes                     |
| **Requires approval** | Yes (write operation)   |

## Inputs

| Field                      | Type                                                                 | Required | Default | Description                                                                                                                                                                                                                                                                                                                          |
| -------------------------- | -------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `account`                  | DynamicAccount                                                       | Yes      | -       | Select the X Ads account to create the ad in.                                                                                                                                                                                                                                                                                        |
| `update_type`              | string or SelectableOption                                           | Yes      | -       | Choose whether to create a single ad or multiple at once. Options: single or bulk.                                                                                                                                                                                                                                                   |
| `ad_group_id`              | string or SelectItem                                                 | No       | -       | Ad group (line item) to run the ad in. Required unless post\_only is enabled. Keep the ad group or campaign paused until you are ready, since X ads have no status of their own and go live with their ad group.                                                                                                                     |
| `ad_name`                  | string                                                               | No       | -       | Internal name for the post and card, up to 80 characters.                                                                                                                                                                                                                                                                            |
| `text`                     | string                                                               | No       | -       | The post's text, up to 280 characters. Required unless media is attached.                                                                                                                                                                                                                                                            |
| `image_urls`               | string or array of string                                            | No       | -       | Images to upload (list or comma-separated), up to 4. GIFs work here too, one per post. Accepts direct URLs, Google Drive share links with sharing set to 'Anyone with the link', or files uploaded through Markifact. Exactly one image is allowed when a website or app destination is set, because an X card holds one media item. |
| `media_keys`               | string or array of string                                            | No       | -       | Already-uploaded media keys to use instead of image\_urls, e.g. from x\_ads\_upload\_media or x\_ads\_list\_media.                                                                                                                                                                                                                   |
| `website_url`              | string                                                               | No       | -       | Landing page URL. Setting this builds a website card with the headline below, which is what X's composer calls a Website destination.                                                                                                                                                                                                |
| `headline`                 | string                                                               | No       | -       | Card headline shown under the image. Required with website\_url.                                                                                                                                                                                                                                                                     |
| `call_to_action`           | enum (`BOOK`, `CONNECT`, `INSTALL`, `OPEN`, `ORDER`, `PLAY`, `SHOP`) | No       | -       | App card button label: BOOK, CONNECT, INSTALL, OPEN, ORDER, PLAY, or SHOP. Required with app store identifiers.                                                                                                                                                                                                                      |
| `country_code`             | string                                                               | No       | -       | ISO alpha-2 country of the app store, e.g. US. Required for app destinations.                                                                                                                                                                                                                                                        |
| `ios_app_store_identifier` | string                                                               | No       | -       | Numeric App Store id, e.g. 333903271. Setting it builds an app card.                                                                                                                                                                                                                                                                 |
| `googleplay_app_id`        | string                                                               | No       | -       | Google Play package name, e.g. com.example.app. Setting it builds an app card.                                                                                                                                                                                                                                                       |
| `ios_deep_link`            | string                                                               | No       | -       | Deep link opened on iOS; only sent alongside the App Store id.                                                                                                                                                                                                                                                                       |
| `googleplay_deep_link`     | string                                                               | No       | -       | Deep link opened on Android; only sent alongside the Google Play id.                                                                                                                                                                                                                                                                 |
| `conversation_settings`    | enum (`EVERYONE`, `FOLLOWING`, `MENTIONED_USERS`)                    | No       | -       | Who can reply: EVERYONE (default), FOLLOWING, or MENTIONED\_USERS.                                                                                                                                                                                                                                                                   |
| `post_only`                | boolean                                                              | No       | `False` | Create the Promoted-only post and card without promoting, so they can be reused across ad groups with x\_ads\_create\_ad\_from\_post.                                                                                                                                                                                                |
| `return_detailed_results`  | boolean                                                              | No       | `False` | Include the full post and ad objects in the output.                                                                                                                                                                                                                                                                                  |
| `structured_data`          | array (also accepts a comma-separated string)                        | No       | -       | Use only when update\_type is bulk. Columns: image\_urls or media\_keys, plus optional text, ad\_group\_id, ad\_name, website\_url, headline, call\_to\_action, country\_code, ios\_app\_store\_identifier, googleplay\_app\_id and the deep links. Up to 100 rows.                                                                  |

### SelectItem

| Field   | Type   | Required | Default | Description                                                                                          |
| ------- | ------ | -------- | ------- | ---------------------------------------------------------------------------------------------------- |
| `value` | string | Yes      | -       | The value of the selectable item.                                                                    |
| `label` | string | Yes      | -       | The label of the selectable item, used for display purposes. If not provided, defaults to the value. |

### SelectableOption

| Field   | Type   | Required | Default | Description |
| ------- | ------ | -------- | ------- | ----------- |
| `value` | string | Yes      | -       |             |
| `label` | string | Yes      | -       |             |

## Output

**Type**: `Dict`

Returns the created post id, card id when one was built, and ad id. Bulk runs return one entry per row.

**Fields**: dynamic (depend on the inputs)
