Twitter/X Ads Creative
Create and manage promoted tweet copy, media cards, and creative variants for X Ads campaigns
Instructions
Twitter/X Ads Creative
Create promoted tweet variants and media cards optimized for B2B engagement on X. X ads perform best when they look like organic content — no stock photos, no corporate jargon.
Promoted Tweet Types
Text-only promoted tweets
Best for engagement and thought-leadership positioning:
POST /12/accounts/{account_id}/tweet
{
"text": "We analyzed 500 deploys across 47 teams.\n\nThe #1 predictor of deploy failure? Not code quality.\n\nIt's whether the team has a rollback plan before they start.\n\nFull breakdown: {LANDING_PAGE_URL}?utm_source=twitter&utm_medium=paid&utm_campaign={CAMPAIGN_SLUG}",
"as_user_id": "{USER_ID}"
}
Then promote:
POST /12/accounts/{account_id}/promoted_tweets
{
"line_item_id": "{LINE_ITEM_ID}",
"tweet_ids": ["{TWEET_ID}"]
}
Character limit: 280. Links use up to 23 characters (X shortens all URLs).
Image cards (Website Cards)
Drive clicks with a preview image and CTA:
POST /12/accounts/{account_id}/cards/website
{
"name": "Deploy Checklist Card",
"website_title": "Free Deploy Checklist - Used by 200+ Teams",
"website_url": "{LANDING_PAGE_URL}?utm_source=twitter&utm_medium=paid&utm_campaign={CAMPAIGN_SLUG}",
"media_key": "{MEDIA_KEY}"
}
First upload the image:
POST https://upload.x.com/1.1/media/upload.json
Content-Type: multipart/form-data
media_data: {BASE64_IMAGE}
media_category: tweet_image
Image specs: 800x418px (1.91:1) or 800x800px (1:1). Max 5MB. PNG or JPG.
Use the returned media_key in the card creation.
Video cards
For short-form video ads (15-30 seconds):
POST /12/accounts/{account_id}/cards/video_website
{
"name": "Product Demo 15s",
"title": "See how teams deploy 10x faster",
"video_url": "{VIDEO_URL}",
"website_url": "{LANDING_PAGE_URL}?utm_source=twitter&utm_medium=paid&utm_campaign={CAMPAIGN_SLUG}",
"media_key": "{VIDEO_MEDIA_KEY}"
}
Video specs: MP4, H.264, AAC audio. 15s ideal, 2:20 max. Minimum 720x720px. Add captions — 85% of X video is watched muted.
Creative Best Practices for B2B
Hook patterns that work on X
- Data hook: "We analyzed [N] [things]. Here's what we found:" — works because X users love data and contrarian takes
- Question hook: "Why do [ICP role] still [painful manual process] when [better alternative exists]?" — works when the question triggers recognition
- Contrarian hook: "Hot take: [common industry belief] is wrong. Here's the data:" — works for engagement and shares
- Thread-style hook: Open with a bold claim, deliver in subsequent lines. Even single tweets can use line breaks to create a thread feel.
Copy structure for promoted tweets
Line 1: Hook (data point, question, or bold claim) — grabs attention in the timeline
Line 2-3: Context (why this matters to the reader)
Line 4: CTA + link (what to do next)
What to avoid
- Corporate jargon: "synergize", "leverage", "best-in-class"
- Stock photo image cards — use screenshots, data charts, or plain text on colored background
- Hashtags in promoted tweets (they leak clicks away from your CTA)
- Asking for a demo in an awareness-stage ad (offer value first: guide, checklist, benchmark)
A/B Testing Creative
Create 3-5 variants per ad group to test:
| Variant | Hook Type | CTA | Goal | |---------|----------|-----|------| | A | Data hook | "Get the guide" | Test if data resonates | | B | Question hook | "See the breakdown" | Test if question triggers curiosity | | C | Contrarian take | "Read the full analysis" | Test if controversy drives clicks | | D | Social proof | "Join 200+ teams" | Test if proof builds trust |
X Ads auto-optimizes toward the best performer within an ad group. After 500+ impressions per variant, pause variants with CTR below 0.5%. After 2,000 impressions, declare a winner and create 3 new variants inspired by the winning angle.
Reporting on Creative Performance
GET /12/stats/accounts/{account_id}/promoted_tweets?granularity=DAY&metric_groups=ENGAGEMENT,BILLING
&start_time=2026-04-01T00:00:00Z&end_time=2026-04-08T00:00:00Z
&promoted_tweet_ids={PT_ID_1},{PT_ID_2}
Key metrics:
impressions: Total viewsengagements: Likes + retweets + replies + clicksurl_clicks: Clicks to your landing pageengagement_rate: engagements / impressions (target >1% for B2B)cost_per_engagement: Total spend / engagementscost_per_url_click: Total spend / url_clicks
Error Handling
MEDIA_NOT_FOUND: Media upload failed or expired. Re-upload.TWEET_TEXT_TOO_LONG: Over 280 characters. Shorten.CARD_ALREADY_ATTACHED: Tweet already has a card. Create a new tweet.INVALID_MEDIA_CATEGORY: Wrong media type for the card. Usetweet_imagefor images,tweet_videofor videos.