Create Post
twitter.create_post
ActionChat & messagingconnection required
Calls the X (Twitter) API with the connection's credentials.
Create a post with media, a poll, a quote or a reply. The original twitter.post_tweet node stays for text-only posts.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Bearer token
- Providers
- X (Twitter)
- Secret shape
- the X OAuth2 user-context access token, or {"access_token": "…"}
- Resolved by
- config.connection_id, else node.connection_id
Configuration
10 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
text Post text. 280 characters on a standard account; X Premium allows longer. Optional when media_ids is set. Supports {{ }}. | string | No | — | — | Deploy shipped. |
media_ids 1-4 media ids from twitter.upload_media, as a JSON array or comma-separated. | array | No | — | array of string | — |
reply_to Id of the post this one replies to. | string | No | — | — | — |
quote_tweet_id Id of the post to quote. X gates quote posts to the enterprise plan. | string | No | — | — | — |
poll_options 2-4 poll choices. Requires poll_duration_minutes; cannot be combined with media. | array | No | — | array of string | — |
poll_duration_minutes How long the poll runs, 5 to 10080 minutes (7 days). | number | Conditional | — | 5–10080; only with poll_options | — |
reply_settings Who may reply. Leave blank for everyone. | string | No | — | one of "following", "mentionedUsers", "subscribers", "verified" | — |
community_id Post into an X Community rather than the author's timeline. | string | No | — | — | — |
for_super_followers_only Restrict the post to the author's Super Followers. | boolean | No | — | — | — |
nullcast Promoted-only: create the post without showing it on the public timeline. | boolean | No | — | — | — |
- At least one of text, media_ids must be set.
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"text": "Deploy shipped."
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
id Id of the created post. | string | — |
text The text X stored. | string | — |
edit_history_post_ids Every id this post has had, newest last. | array | — |
{
"edit_history_post_ids": [],
"id": "",
"text": ""
}Notes
- X API access is tiered and metered: most read endpoints need a paid plan, and since 6 February 2026 new developers get pay-per-use credits rather than a free tier. A 403 here usually means the plan, not the code.
- The connection's access token must already carry the scopes this node needs; X does not grant them per call, so a missing scope is a 401 on every run.
- Needs the OAuth2 scopes tweet.write, tweet.read, users.read.
See Create Post run in a workflow.
In a technical demo we add the X (Twitter) connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.