X API for developers

The X API,without a developer app

Publish posts, threads and polls to X. Answer DMs and read what every post did. One API key, on OmniSocials’ own X app.
Webhooksyour-app.com/hooks
post.scheduledpost 1024just now200
post.publishedpost 10192 h ago200
post.approvedpost 10193 h ago200
POST/v1/posts/createapplication/json
01{
02 "content": "Post from your own code: SDKs in 8 languages.",
03 "accounts": ["x"],
04 "media_urls": [
05 {
06 "url": "https://cdn.example.com/sdk.png",
07 "alt": "SDK code"
08 }
09 ],
10 "x": { "reply_settings": "following" },
11 "schedule_at": "2026-10-22T18:00:00Z"
12}
Sending201 Created412 ms
Send
13{
14 "data": {
15 "id": "1024",
16 "status": "scheduled",
17 "app_url": "https://app.omnisocials.com/create-post/1024"
18 }
19}
A request schedules an X post with an image for Thu at 18:00; it appears in the OmniSocials calendar and the webhook post.scheduled fires.
Your coding agent runs the same calls through the CLI

Skip the X developer app

X’s own API needs a developer app, pay-per-use billing on every call, OAuth with two-hour tokens and a chunked media upload. OmniSocials already did that work.
On your own
tweet.readtweet.writeusers.read
media.writeoffline.accessdm.read
dm.write
X appBillingOAuthTokensUploadsPollingChar countThreadsFirst post
On OmniSocials
Sign inAPI keyPOSTFirst postOne sign-in grants all 7 scopes

Posts, threads and polls, one request

Every X format shares one request shape. Add media with alt text, split a long text into a thread or ask a question with a poll. OmniSocials counts characters the way X does before anything is sent.
OmnisocialsX Premium@OmniSocials_· 1m
Post from your own code: SDKs in 8 languages.
SDK code
POST/v1/posts/create
01{
02 "content": "Post from your own code: SDKs in 8 languages.",
03 "accounts": ["x"],
04 "media_urls": [
05 {
06 "url": "https://cdn.example.com/sdk.png",
07 "alt": "SDK code"
08 }
09 ],
10 "x": { "reply_settings": "following" },
11 "schedule_at": "2026-10-22T18:00:00Z"
12}
201 Createdstatus: "scheduled"
Posts and long posts
Up to 4 images or one video, each image with alt text. Basic and Premium accounts post up to 25,000 characters, counted the way X counts.
media_urlsalt
Threads
2 to 25 tweets in one request, each with its own text and media. OmniSocials posts them in order as one thread.
x.thread_parts
Polls, replies and labels
Polls of 2 to 4 options for 5 minutes to 7 days. Choose who can reply, and add the Paid partnership or Made with AI label.
x.pollx.reply_settingsx.made_with_ai

Threads, chained for you

Send 2 to 25 parts in one request. OmniSocials uploads each part’s media, posts the first tweet and adds every next part as a reply to the one before. Each tweet’s id and link come back on the post.
POST/v1/posts/create-and-publishapplication/json
01{
02 "content": "",
03 "accounts": ["x"],
04 "x": {
05 "thread_parts": [
06 {
07 "text": "New: Alt text on every image",
08 "media_urls": [
09 {
10 "url": "https://cdn.example.com/alt-text.png",
11 "alt": "The ALT button in the composer"
12 }
13 ]
14 },
15 { "text": "Add accessibility descriptions to your media with the ALT button on each image in the composer. They publish natively to Mastodon, Bluesky, X and Pinterest." },
16 { "text": "It works in the API and MCP too: any media entry can now be { url, alt }, including per-tweet and per-toot media in threads." }
17 ]
18 }
19}
Sending201 Created388 msstatus: "posting"Authorization: Bearer $OMNISOCIALS_API_KEY
0 of 3 tweets out
One request with x.thread_parts publishes a three-part thread on X; each tweet is a reply to the one before, and the post then lists every tweet in x.thread_tweets.
Chained in order
Each part replies to the one before it, so X shows one thread. A poll, reply settings and labels go on the first tweet.
x.thread_parts
Media on every tweet
Up to 4 images or one video per part, by URL or library id, each image with its own alt text.
media_urlsmedia_idsalt
Every tweet’s link
Once it is live, the post lists each tweet’s id and URL. If X stops halfway, the tweets that went out stay up and are listed.
x.thread_tweetspublished_urls.x

Connect X once, post from code

Sign in with X once inside OmniSocials. Create an API key, and your code posts, replies and reports for that account.
OmniSocials
Name, icon, social channels and who can open this workspace.
GeneralMembersClientsApproval workflowsAPI
Workspace iconJPG or PNG, up to 2 MB.
Workspace nameOmniSocials
Social channels
The accounts this workspace posts to.
Connected
@omnisocials_
Instagram
@omnisocials_
Threads
OmniSocials
LinkedIn Page
Add a channel
XPosts & Threads
FacebookPosts, Stories & Reels
LinkedIn ProfilePosts & Carousels
YouTubeShorts
TikTokVideos & Photo posts
PinterestPins & Carousels
BlueskyPosts & Threads
MastodonAny server
Google BusinessUpdates, Events & Offers
TelegramChannels and groups
Coming soonDiscordTumblrWordPressWhopSlack
Danger zone
Delete workspace
Deletes this workspace with its posts, media and settings for good. This cannot be undone.
OmniSocials
Name, icon, social channels and who can open this workspace.
GeneralMembersClientsApproval workflowsAPI
API keys
Keys that can only reach this workspace.
NameKeyLast used
Claude
omsk_live_••••7c2eOct 20, 2026
GET/v1/accounts?platform=x
200 OK88 ms
01{
02 "data": [
03 {
04 "id": "4127_x",
05 "platform": "x",
06 "display_name": "Omnisocials",
07 "content_types": ["post"],
08 "status": "active",
09 "platform_details": {
10 "subscription_type": "Premium"
11 }
12 }
13 ],
14 "workspace_name": "OmniSocials"
15}
Authorization: Bearer $OMNISOCIALS_API_KEY
Sign in with X
X’s own sign-in, once, in the app. OmniSocials renews X’s two-hour tokens before they run out.
A key per workspace
A key only reaches its own workspace. Inbox access is switched on per key.
Premium, detected
The accounts call returns the X subscription: any paid tier raises posts to 25,000 characters, and Premium also allows longer videos.
GET /v1/accountssubscription_type

Answer X DMs from your code

Switch on X DMs in the Social Inbox, then list conversations and reply from your own code. X bills every DM, so they run on credits at X’s own rates.
Social Inbox
AllUnread3CommentsDMs
X DMs164 credits left·
XDaan Lindqvist2mWe want to post them from our own CMS.XHana Park14mDo threads take an image on every tweet?XRavi Menon1hThanks, the poll went out fine.XSara Ortiz3hIs the inbox API on every plan?XLeo Vik5hCan our helpdesk answer these DMs?
Daan Lindqvist@daanbuilds · X DMView profile
Daan Lindqvistdaanbuilds · X
Hi! Can the API post threads to X?
Daan Lindqvist
We want to post them from our own CMS.
Type a message...
GET/v1/inbox/conversations?platform=x&type=dm
200 OK104 ms
01{
02 "data": [
03 {
04 "conversation_id": "8812",
05 "platform": "x",
06 "type": "dm",
07 "participant": {
08 "name": "Daan Lindqvist",
09 "username": "daanbuilds"
10 },
11 "unread_count": 2,
12 "last_message": {
13 "direction": "incoming",
14 "text": "We want to post them from our own CMS."
15 }
16 }
17 ]
18}
Authorization: Bearer $OMNISOCIALS_API_KEY
X DMs
List conversations and reply from your own code. Comments and mentions on X stay out of the inbox.
type=dm/conversations/:id/reply
Opt-in
Someone with billing access switches X DMs on in the Social Inbox, with at least 25 credits on the balance.
At X’s rates
1 credit per received DM and 2 per reply. At zero credits the X inbox pauses; top up and switch it back on.
402 x_inbox_suspended

“The MCP is the real game changer for me. It makes the whole workflow feel much faster and less messy.”

Ansub Khan
Founder of Supafast

Read what X reports

Views, likes, replies, reposts, quotes and bookmarks per post, with link clicks and profile visits for the first 30 days. The API returns the same numbers the app charts.
AnalyticsReports
AllInstagramFacebookTikTokThreadsBlueskyLinkedIn PageX
AddEdit
Last 30 days
Impressions
47317.7%
Engagements
5614.3%
Link clicks
620.0%
Engagement Rate
11.8%0.3pt
Posts7Accounts7
Post
Channels
Impressions
Likes
Comments
Shares
Saves
Link clicks
Eng. rate
Post thumbnail
New: Manage the Social Inbox through the API
Oct 21, 2026
x
923112213.0%
New: Mastodon threads
Oct 20, 2026
x
54200109.3%
Post thumbnail
New: 1GB video uploads
Oct 20, 2026
x
712111112.7%
New: PDF uploads
Oct 19, 2026
x
48100108.3%
Post thumbnail
New: Best times to post
Oct 19, 2026
x
833112215.7%
Post thumbnail
New: Bluesky threads
Oct 14, 2026
x
662011110.6%
Post thumbnail
Sidebar update
Oct 8, 2026
x
592101010.2%
GET/v1/analytics/posts/1019
Authorization: Bearer $OMNISOCIALS_API_KEY
200 OK143 ms
01{
02 "data": {
03 "post_id": "1019",
04 "platforms": {
05 "x": {
06 "metrics": {
07 "views": 92, "likes": 3,
08 "comments": 1, "reposts": 1,
09 "quotes": 0, "bookmarks": 2,
10 "link_clicks": 2,
11 "profile_visits": 3,
12 "engagement": 12
13 },
14 "thread_parts": 1
15 }
16 }
17 }
18}
Per post
Views, likes, replies, reposts, quotes and bookmarks. A thread comes back as one entry, its parts added up.
/analytics/posts/:idthread_parts
The first 30 days
Link clicks, profile visits and X’s own engagement count while a post is under 30 days old. Polls add their votes.
link_clicksprofile_visits
Per account
Followers, following, posts and lists, saved once a day, so you can read any past day by date. X reports no reach.
/analytics/accountsdate
Under the hood

Built for production

Signed webhooks, automatic retries, SDKs in 8 languages and a key per workspace. Create a key and send your first request in minutes.
Webhooks
Signed events for every post
Retries
Failed posts retry on their own
SDKs
One request shape in 8 languages
API keys
One key per workspace
Agents
Your coding agent posts too

X’s rules, in one place

OmniSocials checks every post against them before it reaches X, so a post that is too long fails in your request, not at publish time.
Text280 characters, 25,000 on Basic or Premium
CountingA link counts 23, an emoji 2, like on X
MediaUp to 4 images or one video, not both
ImagesJPEG, PNG or WebP up to 5 MB, alt text
Video140 seconds, 125 minutes with Premium
Thread2 to 25 tweets, up to 4 media each
Poll2 to 4 options, 5 minutes to 7 days
Link posts20 credits per tweet, X’s fee at cost
X DMs1 credit per DM, 2 per reply
Rate limit100 requests a minute per API key

Your first post in three steps

About five minutes from sign-up to a scheduled post on X. Then hand the key to your coding agent.
Create an API key
Start your trial, open Settings, API and create a key. It is shown once.
Settings › API
Step 1
Connect your X account
Sign in with X in OmniSocials once. Then list the account from your code.
GET /v1/accounts
Step 2
Send your first post
Post now with create-and-publish, or add schedule_at to plan it.
POST /v1/posts/create
Step 3

Frequently
Asked Questions

Robert Ligthart
Robert LigthartFounder of OmniSocials
Ask me a question

Robert Ligthart
Still have a question?Ask Robert, the founder
Ask

Ship your X
integration this week.

From $10 per seat a month, API included. 14-day free trial.
https://docs.omnisocials.com