X Organic: post, schedule and measure on X with an AI agent
X Organic connects over OAuth 2.0 to the X API v2 as your X profile, separate from X Ads. The agent uses the social tools: reads, drafts, scheduling through Agent Planners' queue, publishing, edits within X's window and deletes. Publishing, scheduling, editing and deleting always wait for a person; reading, drafting and cancelling follow your approval setting (by default every change waits for your approval; auto-approve is opt-in). X bills per request and those calls are billed in credits.
Connect
- 1Once per app, on developer.x.com: open the app, turn on User authentication settings with OAuth 2.0, set App permissions to Read and write, and add the callback https://www.agentplanners.com/api/oauth/x-organic/callback.
- 2Once per app: buy pay-per-use credits in the X Developer Console. Without credits X refuses every read and post.
- 3On Integrations, press Connect on the X Organic card and authorize the app on X. Your profile becomes an account row; Re-authorize renews the sign-in and keeps the row.
Tools
| Tool | Kind | On X |
|---|---|---|
| social.list_accounts | Read | Your connected X profile(s), whether each can post |
| social.check_permissions | Read | The scopes the connection holds and what is missing — sends nothing |
| social.get_publishing_limits | Read | What X allows: text and media limits, the edit window, no native scheduling |
| social.list_posts / social.get_post | Read | Recent posts, or one post, with public metrics, edit history and editable-until |
| social.get_post_insights | Read | A post's impressions, likes, replies, reposts, quotes and bookmarks |
| social.generate_post | Read | Draft text from a brief, measured against 280 weighted characters — nothing is sent |
| social.list_scheduled_posts | Read | Drafts and scheduled / published / failed posts in the queue |
| social.create_draft | Write | Save a draft in the queue (nothing goes to X) |
| social.upload_media | Write | Upload an image or video to X for a later post (not public) |
| social.schedule_post | Write | Queue a post for a time — always waits for a person |
| social.publish_post | Write | Post now — always waits for a person |
| social.update_scheduled_post / social.cancel_scheduled_post | Write | Change (waits for a person when it changes text, media or time) or cancel a queued post |
| social.edit_post | Write | Edit within X's window for the post — always waits for a person |
| social.delete_post | Write | Delete a post (and its edit chain) — always waits for a person |
What X does not support
- Profile changes (name, bio, picture): X API v2 has no profile-update endpoint — social.update_profile answers so and sends nothing.
- Native scheduling: X's API cannot schedule; Agent Planners' queue publishes at the approved time.
- Drafts or hidden posts on X: a draft exists only in Agent Planners; published:false is a Facebook-only option and is refused for X.
- Edits outside the window: X sets the window per post (30 minutes in its docs, an hour measured), at most five edits, each a new post id; replies to others, polls and reposts cannot be edited.
Approvals and duplicates
- Publishing, scheduling, editing and deleting always wait for a person — in the app, schedules, projects, MCP and the REST API — even with auto-approve on.
- One queue serves every lane, so the same post for the same account is never published twice; an uncertain send is read back against your recent posts before any retry.
- Forbidden Rules apply to every social tool.
Billing
Prices are X's pay-per-use rates (docs.x.com/x-api/getting-started/pricing, read 26 October 2026; X says they can change). X's lower owned-reads price is not applied to an account read through its sign-in, so your own timeline is billed at the post-read price. A call is billed only when X accepted it, a retry of the same call is never billed twice (a new read is a new call), and the credit price keeps at least a 70 % margin over X's cost on every plan. Each tool call also carries the usual per-call charge (7 credits for a read, 34 for a write over MCP and REST).
| X API call | X's price | Credits |
|---|---|---|
| Post created | $0.015 / request | 100 |
| Post created with a link | $0.20 / request | 1,334 |
| Post read (any post, your own included) | $0.005 / post returned | 34 per post |
| User read (the connected profile) | $0.010 / user returned | 67 |
| Delete | $0.010 / request | 67 |
| Media upload | not listed by X | 0 |
Troubleshooting
| Answer | Meaning | What to do |
|---|---|---|
| 402 / "credits" | The X app has no pay-per-use credits left | Buy credits in the X Developer Console |
| 401 / Re-authorize | The X sign-in expired or was revoked | Re-authorize on the X Organic card |
| 429 | X's rate limit | The tool waits for X's reset time; try later |
| Missing scope | The connection lacks tweet.write or media.write | Re-authorize and accept every permission |
From MCP or the REST API
Over MCP, call the social__* tools (or search_tools "post to X"). Over REST, POST /api/v1/tools/{tool} with a bearer credential. A write that waits for a person answers 202 with a request id to poll.
curl -X POST https://www.agentplanners.com/api/v1/tools/social__schedule_post \
-H "Authorization: Bearer $AGENTPLANNERS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-post-1" \
-d '{"accountId":"<x account id from social__list_accounts>","text":"We just shipped one-click UTM links.","scheduledAt":"2026-11-02T09:00:00Z"}'Frequently asked questions
- Can the agent post to X without my approval?
- No. Publishing, scheduling, editing and deleting always wait for a person, even with auto-approve on.
- Why does X refuse every call?
- Usually the X app has no pay-per-use credits: buy credits in the X Developer Console. A 401 means re-authorize the X Organic card.
- Can it change my X bio or profile picture?
- No — X API v2 has no profile-update endpoint; change it in X.