> ## 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 Carousel Ad

> Creates a swipeable carousel ad in an X Ads account end to end: uploads 2 to 6 images or videos, builds the carousel card with its website or app destination, creates the Promoted-only post, and pr...

Creates a swipeable carousel ad in an X Ads account end to end: uploads 2 to 6 images or videos, builds the carousel card with its website or app destination, creates the Promoted-only post, and promotes it. For per-slide destinations use x\_ads\_create\_card with slides. 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_carousel_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. |
| `media_urls` | string or array of string | No | - | The 2 to 6 images or videos to swipe through, in order (list or comma-separated). Accepts direct URLs, Google Drive share links with sharing set to 'Anyone with the link', or files uploaded through Markifact. |
| `media_keys` | string or array of string | No | - | Already-uploaded media keys to use instead of media\_urls, 2 to 6, in order. |
| `website_url` | string | No | - | Landing page every slide opens. Setting this builds a website carousel with the headline below. For per-slide destinations use x\_ads\_create\_card with slides instead. |
| `headline` | string | No | - | Carousel headline. Required with website\_url. |
| `call_to_action` | enum (`BOOK`, `CONNECT`, `INSTALL`, `OPEN`, `ORDER`, `PLAY`, `SHOP`) | No | - | App carousel 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. Setting it builds an app carousel. |
| `googleplay_app_id` | string | No | - | Google Play package name. Setting it builds an app carousel. |
| `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 carousel 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: media\_urls or media\_keys (2 to 6 each), plus optional text, ad\_group\_id, ad\_name, website\_url, headline, and the app fields. 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)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.