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
Send13{
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 postOn OmniSocials
Sign inAPI keyPOSTFirst postOne sign-in grants all 7 scopesPosts, 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.
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 outOne 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
Coming soon




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.
| Name | Key | Last used | |
|---|---|---|---|
Claude | omsk_live_••••7c2e | Oct 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·
Hi! Can the API post threads to X?
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
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 | |
|---|---|---|---|---|---|---|---|---|---|
![]() New: Manage the Social Inbox through the API Oct 21, 2026 | 92 | 3 | 1 | 1 | 2 | 2 | 13.0% | ||
New: Mastodon threads Oct 20, 2026 | 54 | 2 | 0 | 0 | 1 | 0 | 9.3% | ||
![]() New: 1GB video uploads Oct 20, 2026 | 71 | 2 | 1 | 1 | 1 | 1 | 12.7% | ||
New: PDF uploads Oct 19, 2026 | 48 | 1 | 0 | 0 | 1 | 0 | 8.3% | ||
![]() New: Best times to post Oct 19, 2026 | 83 | 3 | 1 | 1 | 2 | 2 | 15.7% | ||
![]() New: Bluesky threads Oct 14, 2026 | 66 | 2 | 0 | 1 | 1 | 1 | 10.6% | ||
![]() Sidebar update Oct 8, 2026 | 59 | 2 | 1 | 0 | 1 | 0 | 10.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.
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 › APIStep 1
Connect your X account
Sign in with X in OmniSocials once. Then list the account from your code.
GET /v1/accountsStep 2
Send your first post
Post now with create-and-publish, or add schedule_at to plan it.
POST /v1/posts/createStep 3
Frequently
Asked Questions
Robert LigthartFounder of OmniSocials
Ship your X
integration this week.
From $10 per seat a month, API included. 14-day free trial.
https://docs.omnisocials.com








