Manage all types of promotable content (Tweets, media, cards, polls, etc.) for your X advertising campaigns.Documentation Index
Fetch the complete documentation index at: https://docs.x.com/llms.txt
Use this file to discover all available pages before exploring further.
Quick Links
- Full API Reference — Complete reference for all creative endpoints and objects
- Guides — Media Library, Scheduled Tweets, Identifying Cards/Media, Carousels, etc.
Overview
Creatives are any entity that can be promoted in a campaign. Posts can include text, images, GIFs, videos, or cards. Cards can include images or videos. Image, GIF, or video creatives are uploaded using either the POST media/upload — a simple upload endpoint that only supports images — or the POST media/upload (chunked) endpoints. These can be added to cards:- POST accounts/:account_id/cards Tweets:
- POST accounts/:account_id/tweets - To add cards to Tweets, use the card_uri parameter. Scheduled Tweets:
- POST accounts/:account_id/scheduled_tweets
Cards
The Ads API supports several card types that can be used in Tweets, which can then be promoted in campaigns. Note: once Tweeted, card details are publicly visible. This may include information about the user who owns the card.Image
The following image specifications apply to assets used in Cards. Images must be 3MB or less and have an a width of at least 800px. In addition, we support the following width:height aspect ratios.- Website: 1:1 and 1.91:1
- Image App Download: 1:1 and 1.91:1
- Poll: 1.91:1
- Image Conversation: 1.91:1
- Image Direct Message: 1.91:1
Video
The following video specifications apply to assets used in Cards. We support the following width:height aspect ratios.- Video Website: 16:9 and 1:1
- Video App Download: 16:9 and 1:1
- Poll: 16:9
- Video Conversation: 16:9
- Video Direct Message: 16:9
Promoted Video
This document provides a brief overview of the process for uploading and promoting video through the Ads API. The Ads API supports Promoted Video in Tweets and in the following cards: First, upload the video using the POST media/upload (chunked) endpoint. Using themedia_id, associate the video with an ads account using the POST accounts/:account_id/videos endpoint. The video’s id, sometimes referred to as the media_key, will be used in subsequent requests. This is a string that begins with an int, is followed by an underscore, and ends with a long value. As an example, see: 13_875943225764098048.
Promoted Video in Tweets
To create a Tweet, use the POST accounts/:account_id/tweet endpoint along with the video’sid. In this step, you can also provide a video title, description, and call-to-action (CTA). These values are user-facing.
Promoted Video in Cards
Video App Download and Video Conversation cards support the ability to add a poster images. Upload an image to use in these cards using the POST media/upload endpoint. Create the card using one of the following endpoints:- POST accounts/:account_id/cards/video_website
- POST accounts/:account_id/cards/video_app_download
- POST accounts/:account_id/cards/video_conversation
id and, optionally, the image’s media_id (for the poster image).
Finally, create the Tweet using the POST accounts/:account_id/tweet endpoint. Cards are attached to Tweets using the card_uri parameter.
General Information
For detailed guidance on video uploading through the API, please see the Video Upload Guide. Videos can also be promoted as pre-roll assets. See the Video Views Pre-roll Objective Guide for a detailed explanation.- (As of 2015-10-22) When uploading videos to be used in promoted content, the
media_categoryparameter must be set with a value ofamplify_videofor allINITcommand requests to the POST media/upload (chunked) endpoint. Using this new param ensures that the video is asynchronously pre-processed and prepared for use in promoted content. TheSTATUScommand can be used to check completion of asynchronous processing after video upload. - The maximum promoted video length currently allowed is 10 mins with a file size of 500MB or less.
- Uploaded video should be either mp4 or mov.
- Uploaded video generally processes quickly, but processing times can vary depending on video length and file size.
- Uploaded poster images should be in png or jpg format. There are no aspect ratio or size requirements, but the poster image will be adjusted to fit the video player.
Guides
Scheduled Tweets
Introduction
Scheduled Tweets allow an advertiser or user to create a Tweet that can be scheduled to go live at a later date. In addition to being able create and manage these Tweets, the API allows the ability to associate these Tweets with a line item, to be promoted once the Tweet goes live. This allows advertisers to stage create native Tweets and plan their campaign creatives in advance of any key initiatives. For example, staging a Tweet creative to live immediately upon a new product announcement. The full set of functionality provided by the Scheduled Tweets API endpoints are listed below:- Create, modify and view newly scheduled Tweets
- Associate a Scheduled Tweet with a line item
- Query and manage existing scheduled Tweets
- Once a Scheduled Tweet goes live, retrieve the live Tweet
id
API Endpoints
The entire set of endpoints related to the above functionality is listed below:Scheduled Tweet Management
- GET accounts/:account_id/scheduled_tweets (retrieve a list of all Scheduled Tweets)
- GET accounts/:account_id/scheduled_tweets/:scheduled_tweet_id (lookup a specific Scheduled Tweet using its
id) - POST accounts/:account_id/scheduled_tweets (create a new Scheduled Tweet)
- PUT accounts/:account_id/scheduled_tweets/:scheduled_tweet_id (modify an existing Scheduled Tweet)
- DELETE accounts/:account_id/scheduled_tweets/:scheduled_tweet_id (delete a Scheduled Tweet using its
id) - GET accounts/:account_id/scheduled_tweets/preview/:scheduled_tweet_id (preview an existing Scheduled Tweet)
Scheduled Promoted Tweets
- GET accounts/:account_id/scheduled_promoted_tweets (retreive a list of all Scheduled Promoted Tweets)
- GET accounts/:account_id/scheduled_promoted_tweets/:scheduled_promoted_tweet_id (lookup a Promoted Scheduled Tweet using its
id) - POST accounts/:account_id/scheduled_promoted_tweets (create a new Scheduled Promoted Tweet)
- DELETE accounts/:account_id/scheduled_promoted_tweets/:scheduled_promoted_tweet_id (delete an existing Scheduled Promoted Tweet using its
id)
Scheduled Tweet View
- GET accounts/:account_id/scheduled_tweets/preview/:scheduled_tweet_id (view an existing Scheduled Tweet)
Scheduled Tweet Create:
- Validate that the authenticated user has access to create organic Tweets for a given @handle Promoted-Only Tweet create privileges requires authenticated user to be an account user with Tweet composer permissions
- Validate that there are no more than 30 Tweets that are scheduled to be created within a 15 minute window of the scheduled_at time. A SCHEDULED_TWEET_LIMIT_EXCEEDED error message indicates that too many Scheduled Tweets have been scheduled within the same future, 15 minute time frame. Advertisers will need to remove an existing Scheduled Tweet or move the scheduled_at time earlier or later.
Scheduled Tweet goes “live”:
- These validation rules are run at the scheduled_at time and are identical to those applied on regular Tweet creation in the API. For example, a Scheduled Tweet will not go live and the scheduled_status will be set to FAILED if the Scheduled Tweet contains both an image and a gif
Workflow
Create a new Scheduled Tweet A new Scheduled Tweet can be created using the POST accounts/:account_id/scheduled_tweets endpoint. This endpoint has the following required parameters,scheduled_at time along with the Tweet text if no media entities are included in the Tweet. In addition, this endpoint provides a few additional options that allow you to create a scheduled Tweet on behalf of another @handle via the as_user_id param along with the ability to add a card (card_uri) and any media (media_ids). Note, a Tweet can only contain entities of the same type, i.e., either Video, Gif or Image. The nullcast param controls whether the Tweet is a “Promoted-Only” Tweet or not. All newly created Scheduled Tweets are “Promoted-Only” (nullcast=true) by default. If nullcast=false then an Organic Scheduled Tweet is created
Once a Scheduled Tweet is successfully created, the response will contain an id field, which refers to the unique identifier of the Scheduled Tweet itself. In addition to this field, another field called tweet_id is also returned. This field is null initially, however once the Tweet goes live this field is populated with the ID of the “live” Tweet.
tweet_id field will be populated with the “live” Tweet’s ID.
View a Scheduled Tweet
The GET accounts/:account_id/tweet_previews endpoint can then be used with the Scheduled Tweet id from the previous step to generate a preview of the Tweet. The API response will contain an iframe URL that is ready to be used to render a preview for the Scheduled Tweet. The relevant CSS and images will be served directly via X.
nullcast=true) Tweet either one of which can be associated with a line item. In order to facilitate this, we provide a POST accounts/:account_id/scheduled_promoted_tweets endpoint as well. This endpoint only allows a single Promoted Scheduled Tweet to be associated with a line item in a single API call. In order to associate multiple Scheduled Tweets to the same line item, multiple API calls are necessary.
Please note that it is not possible to modify an existing Scheduled Promoted Tweet.
SCHEDULED state, and that the given Scheduled Tweet is valid for the given objective, no other validations are run. Any remaining validation rules that apply to the line item and Scheduled Tweet are run when the Tweet goes “live”
In order to ensure that there are no issues with campaign serving it is recommend that the Scheduled Tweet be scheduled_at a time prior to the campaign/line item flight dates.
For example, let’s say the Scheduled Tweet is set to go live after the campaign start date (and that there is only a single Tweet associated with a single line item), then the campaign will be ACTIVE, however given that the Scheduled Tweet is not live yet, there will be no creatives available for serving.
Scheduled Tweet Management
The remaining sets of endpoints allow API consumers to manage all their Scheduled Tweets and Scheduled Promoted Tweets. These APIs can be used to either return a list of all Scheduled Tweets optionally filtered by a given state as well as lookup a given Scheduled Tweet by its id.
What happens when a Scheduled Tweet goes live?
Once a given Scheduled Tweet is about to go live, or in other words at thescheduled_at time, the following updates are made:
- The “live” Tweet is created however this may have a latency of upto 1 second
- The
tweet_idis added to the following entities: - Scheduled Tweet
- Promoted Scheduled Tweet
- A new Promoted Tweet entity is created
Best Practices
The following best practices are recommended when creating or promoting Scheduled Tweets:- Ensure that the Tweet is valid when creating the Scheduled Tweet (for example, a Tweet can only have either an Image, Video or Gif and not any combination of the three)
- Ensure that the campaign flight dates (i.e., the
start_timeandend_time) align with thescheduled_attime for the Scheduled Tweet - Scheduled Tweets should not be scheduled for more than one year in the future (365 days)
- Tweet preview is currently not supported for Scheduled Tweets (this is ability to preview Scheduled Tweets prior to creation)
Media Library
Introduction
The Media Library endpoints provide the ability to manage images, GIFs, and videos for X Ads accounts. Media assets in the library can be used in Tweets and to create cards. They can also be reused in multiple creatives, eliminating the need to upload the same asset multiple times.API Endpoints
- POST media/upload or POST media/upload (chunked) (upload media)
- POST accounts/:account_id/media_library (add media to the Media Library)
Adding to the Library
Adding media to the library is a two-step process. First, upload the asset using either the POST media/upload endpoint or the POST media/upload (chunked) set of endpoints. (See the Chunked media upload guide for details on our multi-part upload process.)Request Parameters
All Media Library POST requests require a media identifier. This value is returned during the upload step. When using the media_id, as in the example above, a media_category must also be specified. There are four possible category values: AMPLIFY_VIDEO, TWEET_GIF, TWEET_IMAGE, and TWEET_VIDEO. Optionally, name and file_name values can be set for objects in the Media Library. These attributes help users distinguish between media variants in the library. For videos, it’s also possible to set a title and a description. They values are intended to be passed as the video_title and video_description request parameters with the POST accounts/:account_id/tweet endpoint. In the Tweet, this text appears under the video.Attributes
The Media Library, formally introduces the concept of the media_key. This is the unique identifier for objects in the library. Media keys are string values in the following format: 13_875943225764098048. These are fully supported in all of our card endpoints. In addition, the Media Library response includes the media_id, represented as a string. This is included for resources that do not currently accept a media key: Tweets*, Tweet preview*, and Scheduled Tweets. We are working toward supporting media keys everywhere. The aspect_ratio attribute is returned for GIFs and videos. This can be used to filter media for use in cards that only accept particular aspect ratios. *These endpoints support the video_id parameter, which is a media key.Usage
In this section, the following image will be used in a Tweet and to create a website card.Identifying Cards
Introduction
Cards are customizable ad formats that use media and that can be associated with a website, an app, or with calls to action to drive certain user engagements, such as starting a Direct Message. They can be appended to Tweets, Scheduled Tweets, or Draft Tweets. Cards may be referenced in Tweet objects in one of two ways: by the card’s card_uri or by its preview_url. Example values for each are presented below.| card_uri | preview_url |
|---|---|
| card://1043282691834048513 | https://cards.x.com/cards/18ce54d4x5t/68w3s |
Identifying Tweets with card_uri
For Tweets created using the card’s URI value, find the reference to the card in the card_uri response attribute. The example response below uses the GET accounts/:account_id/tweets endpoint.Identifying Tweets with preview_url
For Tweets created by including the preview URL as part of the Tweet’s text, the URL can be found in entities[“urls”][i][“expanded_url”] (the text field includes a shortened t.co URL), where i is an array index (a Tweet can contain multiple URLs). For scheduled and draft Tweet objects, the preview URL will always appear in the text field.Fetching cards
To retrieve additional information about a specific card, we provide two endpoints: GET accounts/:account_id/cards/all and GET accounts/:account_id/cards/all/:card_id. The former allows a card to be fetched by card_uri and the latter by the card’s ID. The card’s ID is found at the end of the preview_url. In the example above, the ID is 68w3s.Identifying Media
Introduction
Media—images, GIFs, and videos—can be added to Tweets and cards. In addition, videos can be used as pre-roll assets and images can be promoted on the X Audience Platform. This section describes how to find media references across these entities. There are two types of media identifiers: IDs and keys. Example values for each are presented below.| Media ID | Media key |
|---|---|
| 1029825579531807971 | 13_1029825579531807971 |
Images
The following table shows the identifier types currently available in each image-related resource’s response as well as the corresponding attribute name(s).| Resource | Identifier | Attribute(s) |
|---|---|---|
| Image cards | None | |
| Tweet | Both | entities["media"]["id_str"] entities["media"]["media_key"] |
| Scheduled Tweet | Both | media_ids and media_keys |
| Draft Tweet | Both | media_ids and media_keys |
| Account Media | None | |
| Media Library | Both | media_id and media_key |
| Resource | Attribute(s) | Format |
|---|---|---|
| Image cards | image | .jpg |
| Tweet* | entities["media"][0]["media_url"] or extended_entities["media"][i]["media_url"] | .jpg |
| Scheduled Tweet | None | |
| Draft Tweet | None | |
| Account Media | media_url | .jpg |
| Media Library | media_url | .jpg |
Videos
The following table shows the identifier types currently available in each video-related resource’s response as well as the corresponding attribute name(s).| Resource | Identifier | Attribute(s) |
|---|---|---|
| Video cards | May be either | video_content_id |
| Video poll cards | None | |
| Tweet | Both | entities["media"]["id_str"] entities["media"]["media_key"] |
| Scheduled Tweet | Both | media_ids and media_keys |
| Draft Tweet | Both | media_ids and media_keys |
| Account Media | Media key | video_id |
| Media Library | Both | media_id and media_key |
| Resource | Attribute(s) | Format |
|---|---|---|
| Video cards | video_url and video_hls_url | .vmap .m3u8 |
| Tweet with video | extended_entities["media"][i]["video_info"]["variants"][j]["url"] | .mp4 |
| Scheduled Tweet | None | |
| Draft Tweet | None | |
| Account Media | None | |
| Media Library | media_url | .mp4 |
Media Library
It’s sometimes necessary to retrieve additional information about a media asset. One use case, for video cards, is retrieving the mp4 URL instead of the vmap one. This is available in the Media Library. For details on the available information, see our Media Library Guide. Most assets belonging to the ads account’s FULL promotable user can be found in the library. There are some exceptions, though. Fetching media As stated above, image cards do not contain references to either media IDs or media keys. As a result, it’s not possible to fetch their assets through the Media Library. This is also true for Account Media images. Video cards require that the video asset be part of the Media Library (or the Videos resource before it) prior to creating it. As a result, these assets will always be retrievable in the Media Library. This is also true for Account Media PREROLL assets. Finally, media in Tweets are always guaranteed to be in the Media Library. The following table summarizes which assets are retrievable in the Media Library, taking into account whether the resource response includes an identifier to use in the lookup.| Resource | In the Media Library |
|---|---|
| Image cards | No |
| Video cards | Yes* |
| Tweets (any media)** | Yes |
| Scheduled Tweets | Yes |
| Draft Tweets | Yes |
| Account media images | No |
Account media videos (PREROLL) | Yes |
video_content_id is a media key. When the value is a media ID, the asset still exists in the Media Library, but retrieving it involves appending a numeric prefix and underscore to it.
** Tweets only return media IDs. While the asset is guaranteed to exist in the Media Library, fetching it involves appending a numeric prefix and underscore to it.
Interactions with Account Media
There are two cases where media assets added to the library are automatically added to the Account Media resource.
- When an AMPLIFY_VIDEO asset is added to the Media Library, it is automatically added as an Account Media asset as a PREROLL creative type.
- When images that have specific dimensions (see “Creative Types” in our enumerations page) are added to the Media Library, they are automatically added as Account Media assets. The creative type (e.g., INTERSTITIAL) depends on the image dimensions.
Tweets
Introduction
The X Ads API supports three types of Tweets: published, scheduled, and draft.Nullcasted Tweets
Tweets may either be nullcasted (a.k.a. “Promoted-only”) or organic. Nullcasted Tweets, once published, do not appear in the user’s public timeline, though they are public. Organic Tweets, on the other hand, are served to the user’s followers and do appear in the user’s public timeline. Creating Tweets Each of the three Tweet create endpoints supports a Boolean nullcast parameter that gives the API user the option to create nullcasted or organic Tweets. Nullcasted Tweets can be created by the user or by anyone who has permission to create Tweets on the user’s behalf. Organic Tweets can only be created by the full promotable user. Updating Tweets It is possible to update the nullcast property for scheduled and draft Tweets. For scheduled Tweets, edits can be made until the Tweet’s scheduled_at time. Draft Tweets can be edited indefinitely. Once published, though, it’s not possible to change a Tweet from nullcasted to organic or vice versa.Promoting Tweets
Only published and scheduled Tweets may be promoted. These can either be nullcasted or organic; there’s no restriction. An advertiser may promote their own Tweets or another user’s Tweets as long as they’ve obtained permission to do so. (See: Promoting another user’s Tweets for more information.) Multiple Tweets can be promoted in a single campaign. Similarly, a single Tweet may be promoted in one or more campaigns. To promote published Tweets, use the POST accounts/:account_id/promoted_tweets endpoint. This associates published Tweets with a line item. To promote scheduled Tweets, use the POST accounts/:account_id/scheduled_promoted_tweets endpoint.Tweet IDs
Published, scheduled, and draft Tweet IDs are numeric—they are 64-bit unsigned integers. For example, the following published Tweet’s ID is 1166476031668015104. When published or scheduled Tweets are promoted, a corresponding promoted Tweet entity is created. These entities have their own IDs, which are alpha-numeric and are represented as base-36-encoded values. For example, promoting the published Tweet above—that is, associating it a line item 6c62d—returns the following API response.Carousels
Introduction
The X Ads API supports creating and retrieving video carousels and image carousels. The carousel is a card type that can contain between 2 and 6 media assets. The carousel card can direct a user to a website or encourage them to install a mobile app. For more information about carousels, their benefits, best practices, and FAQs, see our Carousel Ads on X page. A carousel, like any other card type, can be used in Tweets and those Tweets can then be promoted. The workflow is the same as what you’re already used to:- Upload media
- Create the card
- Create the Tweet
- Promote the Tweet
Endpoints
The Ads API supports creating and retrieving carousels. To create a carousel—any kind—use the POST accounts/:account_id/cards endpoint. To retrieve carousels, use the GET accounts/:account_id/cards endpoint.JSON POST Body
Carousels are created using two components. The first specifies the media assets that will be used. The second specifies information about either the website or the app. Specifically, a carousel card is created by using the following components, in order:- One
SWIPEABLE_MEDIAcomponent, which accepts an array of media keys - One of the following:
- A
DETAILScomponent to specify website information - A
BUTTONcomponent to specify app information
SWIPEABLE_MEDIA component must include a media_keys array where you can specify between 2 and 6 images or videos. The order in which the media keys are passed in determine the order in which they will be rendered.
| Website | App | |
|---|---|---|
| Specify the component type | "type": "DETAILS" | "type": "BUTTON" |
| Title/Label | "title": "X" | "label": { "type": "ENUM", "value": "INSTALL" } |
| Destination | "destination": { "type": "WEBSITE", "url": "https://www.x.com" } | "destination": { "type": "APP", ... } |
BUTTON components require a country code and at least one app identifier. They optionally accept deep links. For a description of these fields, see the reference documentation.
Putting this together, an example app carousel JSON POST body is shown below.
Example
This section demonstrates how to create a video website carousel card and how to use it in a Tweet. As mentioned above, the workflow is the same as what you’re already used to: upload media, create the card, create the Tweet. The only difference is how the card is created. Media To start, either upload new media assets or use existing ones. For details on how to upload new media assets and add them to the Media Library, see our Media Library Guide. Once your media assets are in the Media Library, fetch them using the GET accounts/:account_id/media_library endpoint. Use themedia_type request parameter to scope the results to a particular media type.
card_uri, which will be used when creating a Tweet.
Tweet
Use the POST accounts/:account_id/tweet endpoint to create your Tweet. Use the card_uri from the previous request. (Response truncated for readability.)
creative-metadata-tagging
Introduction
This guide is for creative partners, agencies and creative developers to tag assets used within X campaigns to better understand individual asset value and performance. Note: Media assets must only be tagged by the partner or developer creating the media asset. If the user of the media asset did not create the media asset, do not implement metadata tagging. Creative Metadata Tagging provides attribution of images and videos created by Creative Partners wherever the asset is uploaded to X, or whomever the entity that is uploading the asset. To create the connection between the creative asset and the creative partner, the XMP standard is used.Tagging Creative Assets
The following table shows the identifier types currently available in each image-related resource’s response as well as the corresponding attribute name(s). A tagging tool is needed to tag creative assets. ExifTool, a platform-independent Perl library plus a command-line application for reading, writing, and editing meta information, is recommended. See all supported file types. Follow the provided instructions to install ExifTool. There are also software packages offered by Homebrew to further simplify the installation by providing the exiftool install command for macOS and Linux. Confirm your tool is properly installed by entering exiftool -ver in the command line to return the tool’s version number. Learn more about ExifTool command parameters in ExifTool documentation. Creative partners can assign metadata tags on new or existing creative assets with their X app_id to the contributor XMP tag, and date tag. The creative assets will follow the existing size restrictions when Uploading Media. Note: X’s use of the contributor XMP tag ensures metadata captures values for campaigns on X exclusively.exiftool -contributor="<YOUR APP ID>" -creative_file.jpg
exiftool -date="<date>" -creative_file.jpg
The app_id can be found in the Developer Console under Projects & Apps. Example: 16489123
The following example adds app_id as the contributor tag and date as the date tag for an image:
exiftool -xmp:all -G1 <filename>
Example:
exiftool -xmp:all -G1 eiffel_tower.jpg