Last updated: October 22, 2026

Can X bot accounts post tweets?

Not as documented. The bot accounts X introduced with the X Chat API (POST /2/bots) are real X accounts with an "Automated by @owner" label, but their token scopes are limited to dm.read, dm.write, tweet.read, users.read and media.write. There is no tweet.write, and asking for a scope outside that set returns a 400. They are built to answer direct messages, not to publish posts.

To run a bot that posts to its timeline, you still use a normal X account with the automated label turned on. Details below are taken from X's bot accounts guide and the create a bot reference.

What an X bot account is

X launched the API in late August 2026 (Social Media Today reported it on August 27) so businesses can build chat assistants inside X Chat, the rebuilt messaging product. In X's words, a bot is a programmatic account that belongs to your project: it has a user ID, an @handle and a display name, but no password and no login. The only way to act as it is its bearer token, which starts with xcbot_ and is shown once.

Creating one is an app-only call with your app's bearer token. Six endpoints cover the whole lifecycle:

Method
Path
What it does
POST
/2/bots
Create a bot. Body: handle (5 to 15 letters, digits or underscores), optional display_name (up to 50 characters) and scopes. Returns the bot and an xcbot_ token, once.
GET
/2/bots
List your project's bots. meta.max_bots is your allowance (default 1).
PUT
/2/bots/:id
Change the handle, display name, or who may DM it (everyone, premium, no_one).
POST
/2/bots/:id/token
Rotate the token. The old one stops working.
DELETE
/2/bots/:id/token
Revoke the token and keep the account.
DELETE
/2/bots/:id
Revoke the token and permanently delete the bot's X account.

Calling POST /2/bots again with a handle you already own returns the same bot with a new token and revokes the old one. Rate limits are per app in 15-minute windows; X does not list the numbers on the bots page.

Why it cannot post: the scope list

Every bot token gets the X Chat scope set by default: dm.read, dm.write, tweet.read, users.read, media.write. You may ask for fewer. You may not ask for more: the docs say a request outside that set returns a 400. The only extra scopes mentioned are broadcast.read and broadcast.write for broadcast moderation.

Publishing a post on X needs tweet.write. Without it, a bot can read posts, look up users, upload media for its messages and send DMs, which is exactly what a support or ordering assistant needs, and nothing a timeline bot needs.

This can change

The scope set is what X documents as of October 22, 2026. If X adds tweet.write for bots, this answer changes, and we will update the page. Check the X developer changelog before you build on either assumption.

Bot account or normal account?

Pick by what the bot has to do. Conversations in DMs suit the new bot accounts. Anything that publishes, like news, alerts, scheduled posts or threads, needs a normal account.

You need to
Bot account (/2/bots)
Normal account, labelled
Answer DMs as a branded assistant
Yes, the intended use
Yes, with DM endpoints
Publish posts to its timeline
Not documented (no tweet.write)
Yes
Schedule posts and threads
No
Yes, with your own scheduler or a tool
Log in on x.com
No, token only
Yes
Automated label
Always, "Automated by @owner"
Optional, turn it on in settings
Needs an X developer project
Yes
Only if you call the X API yourself

How to run a bot that posts to the timeline

  1. Create a normal X account for the bot, with its own email.
  2. In the account's settings, open your account information and turn on the Automation label, naming the account that runs it. The profile then shows it is automated.
  3. Post through one of two routes. The X API with user-context OAuth 2.0 and tweet.write, billed pay-per-use at $0.015 a post and $0.20 a post with a link. Or connect the account to OpenTweet with a normal login and call POST https://opentweet.io/api/v1/posts with one bearer key, no developer app, on a flat plan.
curl -X POST https://opentweet.io/api/v1/posts \
  -H "Authorization: Bearer ot_your_key" \
  -H "Content-Type: application/json" \
  -d '{"text": "Daily update: all systems normal.", "publish_now": true}'

OpenTweet Pro is $19.99 a month with 1 link post a day, Advanced $29 with 10. Ready-made recipes: the alert bot, the AI news account, the GitHub trending bot and the Pokemon restock bot.

Use both if you need both

A business can run a /2/bots assistant for DMs and a normal labelled account for posts. They are separate accounts with separate handles, so plan the names together.

7-day free trial with a few limits, or pay now for full limits.

Frequently asked questions

Can X bot accounts created with POST /2/bots post tweets?

Not according to X's docs as of October 22, 2026. A bot token's scopes default to dm.read, dm.write, tweet.read, users.read and media.write, and the docs say requesting any scope outside that set returns a 400. tweet.write is not in the set, and no tweet-posting capability is documented for bot accounts. They are built for X Chat: answering and sending direct messages.

What is an X bot account?

A programmatic X account that belongs to your developer project. X's docs describe it as a real account with a user ID, an @handle and a display name, but no password and no login. The only way to act as it is its bearer token, which starts with xcbot_ and is shown once when the bot is created or the token is rotated.

When did X launch the bot account API?

Social Media Today reported the launch on August 27, 2026, as an API for automated task accounts in X Chat, the rebuilt messaging product. The endpoints live under /2/bots in the X API reference.

What does the "Automated by" label mean?

Bot accounts carry an "Automated by @owner" label that points to the X account that owns the developer app. Regular accounts can show a similar automated label: in your X settings, under your account information, the Automation option lets you name the account that runs it. X has labelled automated accounts this way since 2022.

How many bot accounts can one developer project create?

Each project has a bot allowance set by its plan. The list endpoint (GET /2/bots) reports it as meta.max_bots, and the default is 1. Creating a bot past the cap returns an error. X does not publish the allowance per plan on the bots page.

How do I run a bot that posts to the X timeline, then?

Use a normal X account. Turn on the automated label in its settings, then post through the X API with user-context OAuth (pay-per-use: $0.015 per post, $0.20 per post with a link), or connect the account to OpenTweet and post with one bearer key and no developer app. OpenTweet is flat-fee: Pro is $19.99 a month, Advanced $29.

Can I delete an X bot account?

Yes. DELETE /2/bots/:id revokes its tokens and permanently deletes the bot's X account. DELETE /2/bots/:id/token only revokes the token and keeps the account, and POST /2/bots/:id/token rotates it.

Need a bot that actually posts?

Connect a normal X account, create a key, and post, schedule or thread from any script or AI agent. No developer app.

7-day free trial with a few limits, or pay now for full limits.