create:post
Publishes a post, once a person has approved it. The call comes back at once as pending with a ref: that is not an error, and nothing has been sent or charged. Approvals is what happens in between.
Fields
text |
Required. Up to 280 characters for most accounts, and up to 25,000 for an account with X Premium. Write it at the length it needs: any length up to 25,000 is taken, and the person approving sees its length. okaybot_profiles shows long_posts: true on an account known to take long posts |
publish_at |
when to publish, ISO 8601 UTC. Leave it and publish_in_minutes out to go as soon as a person approves |
publish_in_minutes |
or when to publish as whole minutes from now: 60 is an hour, 1440 a day. publish_at wins when both are sent |
profile |
the account to post as. Optional when the agent has one |
reason |
Required over MCP. One short sentence. This is what the person reads on the approval card |
idempotency_key |
send the same key twice and the second call returns the first answer instead of proposing it again |
A link makes it thirteen times more expensive
$0.200 against $0.015 is X's own price for a post carrying a URL. Okaybot spots the link before the call leaves, charges the right price, and says so on the approval card.
What comes back
First, immediately:
{ "status": "pending",
"ref": "K08SAJJC",
"message": "pending: this post is waiting for a person to approve it, and goes out on its own once they do. You do not need to poll unless you need its result before you move on.",
"poll": "/gateway/asks/K08SAJJC" }
Then, from the poll, if the agent needs the post before it moves on, once it is approved:
{ "status": "published",
"ref": "K08SAJJC",
"data": {
"data": {
"id": "1832000000000000112",
"text": "We rebuilt the pipeline this week.",
"edit_history_tweet_ids": ["1832000000000000112"]
}
} }
A post carrying publish_at or publish_in_minutes answers scheduled instead, with the time on it as publish_at, and sits on
the calendar until then.
A write's answer is three fields and no more
X does not honour a field list on a create, so there is no created_at and no public_metrics
here however much was asked for. Read the post back with
read:post if you need the rest, and pay for it.
Nothing is charged unless it is published
A post you refuse, or that expires unanswered, costs nothing.