Skip to content
Platforms

X (Twitter): posting rules and settings

What a X (Twitter) channel accepts in Postemi: media, limits, required fields, and the fields of the settings object for the API.

Basics

Platform
X (Twitter)
Character limit
280 (the connected account may have a different limit)
Media
Up to 4 images, or one video. GIFs are allowed too.
settings.__type
x
Required fields
who_can_reply_post
Platform page

Post types

The same channel accepts more than one kind of post, and each kind has different requirements. The table shows what you need for each.

TypeMediaNotes
TextnoneThe most common. Only the text counts toward the character limit.
Imageup to 4 imagesThe four images appear in one post, as a grid.
Video1 videoYou cannot attach an image with a video.
Threadeach part has its ownThe remaining items in the value array are attached as replies to the first.

Rules

  • You write a thread as extra parts of the post: the first part is the post, the rest attach as replies below it.
  • The character limit depends on the account type, so the editor shows the value unlocked for the connected account.
  • Postemi does not send links to X, because X charges for every post with a link. Links (https://…, www.…, postemi.com/pricing and the like) are removed from the post and every thread part when it is saved, and the API response lists them in the notices field. To share a link, post it directly on X.

Settings fields

These fields go into the post's settings object, alongside the __type field. In the UI, you fill in the same ones in the channel's settings section.

FieldTypeRequiredWhat it does
who_can_reply_post"everyone" | "following" | "mentionedUsers" | "subscribers" | "verified"yesWho can reply to the post. These are the values the X API offers; X has no "followers" or "followers of followers" option.
communitystringnoThe full URL of an X Community, in the form https://x.com/i/communities/<number>. Leave it empty to post to your own timeline.
made_with_aibooleannoMarks the post as made with AI.
paid_partnershipbooleannoMarks the post as a paid partnership.
active_thread_finisherbooleannoThread finisher: when true, Postemi publishes the thread_finisher text as the LAST post of the thread (after every thread part, or as a reply to the post when there is no thread). The same character limit applies and it gets no links. The channel remembers it: it stays on for the next posts until you switch it off.
thread_finisherstringnoThe text of the thread finisher. Write it without a link, Postemi sends no links to X.

Allowed values

The fields below only accept these values. Any other value returns a 400, and the response names the field.

who_can_reply_post

ValueMeaning
everyoneAnyone can reply.
followingOnly people you follow.
mentionedUsersOnly people mentioned in the post.
subscribersOnly your subscribers.
verifiedOnly verified accounts.

Examples

Each example is one item in the POST /public/v1/posts request's posts array. The envelope around it is always this:

{
  "type": "schedule",
  "date": "2026-09-15T09:00:00.000Z",
  "shortLink": false,
  "posts": [ /* the item below */ ]
}

Text post

{
  "integration": { "id": "<x-channel>" },
  "value": [{ "content": "<p>We shipped a new feature today.</p>", "image": [] }],
  "settings": { "__type": "x", "who_can_reply_post": "everyone" }
}

Post with two images

The path values come from the media upload. An arbitrary URL from the internet will not work.

{
  "integration": { "id": "<x-channel>" },
  "value": [{
    "content": "<p>Two images in one post.</p>",
    "image": [
      { "id": "<media-1>", "path": "https://uploads.posty.hu/one.png" },
      { "id": "<media-2>", "path": "https://uploads.posty.hu/two.png" }
    ]
  }],
  "settings": { "__type": "x", "who_can_reply_post": "everyone" }
}

Thread, with a two-minute delay

The first item is the post, the rest are attached as replies below it. delay is in minutes.

{
  "integration": { "id": "<x-channel>" },
  "value": [
    { "content": "<p>1/3 Let's start with a short thread.</p>", "image": [] },
    { "content": "<p>2/3 The second part.</p>", "image": [], "delay": 2 },
    { "content": "<p>3/3 And the wrap-up.</p>", "image": [], "delay": 2 }
  ],
  "settings": { "__type": "x", "who_can_reply_post": "everyone" }
}

Post to a community

The community field expects the full URL of the X community.

{
  "integration": { "id": "<x-channel>" },
  "value": [{ "content": "<p>A question for the community.</p>", "image": [] }],
  "settings": {
    "__type": "x",
    "who_can_reply_post": "everyone",
    "community": "https://x.com/i/communities/1493446837214187523"
  }
}

The channel ID comes from the channel list, and the path values for images and videos from media upload. The exact schema for the connected account comes from the settings schema endpoint. From the command line, the same thing is the --settings flag. See the CLI examples.

Is something missing from this page? Email [email protected] or use the form on the Help page.