Post to Twitter from Zapier
with Webhooks by Zapier
Zapier retired its native X action. Send a Webhooks by Zapier POST to OpenTweet instead. A Bearer key, a JSON body, and any trigger can tweet.
7-day free trial • No credit card required
The native X action is gone, so use a webhook
Zapier removed its built-in Twitter and X posting action, which is why the app no longer shows a "Create Tweet" step. The reliable replacement isWebhooks by Zapierpointed at OpenTweet's REST API.
You add a POST step, set the URL tohttps://opentweet.io/api/v1/posts, paste your ot_ key into an Authorization header, and send the tweet text as JSON. No X developer account, no OAuth app, and no request signing.
OpenTweet handles the actual posting to X, plus scheduling, threads, and multiple accounts, so Zapier only needs to fire one HTTP request per trigger.
POST https://opentweet.io/api/v1/posts
Authorization: Bearer ot_your_key
Content-Type: application/json
{
"text": "New post from Zapier!",
"publish_now": true
}Step-by-Step: Zapier to Twitter
Get an ot_ API key
Sign up for OpenTweet, connect your X account, and open the developer page at opentweet.io/developer. Generate an API key. It starts with ot_ and is the only credential Zapier needs. Copy it somewhere safe for the next step.
One key, no OAuth
The ot_ key replaces the whole X developer account and OAuth flow. You will paste it into a single Zapier header, nothing else.Add a Webhooks by Zapier (POST) action
In your Zap, keep whatever trigger you like (a new row, a form submission, a schedule). Add an action step, search for Webhooks by Zapier, and choose the POST event. This is the step that talks to OpenTweet.
Webhooks is a premium built-in
Webhooks by Zapier requires a paid Zapier plan. If you do not see it, upgrade the Zapier account, or drive the same request from code with the OpenTweet REST API.Set the URL, header, and JSON body
Fill in the POST step. Set the URL, switch the payload type to JSON, add the Bearer header, and map your trigger data into the text field. Use the exact values below.
URL: https://opentweet.io/api/v1/posts
Method: POST
Payload Type: JSON
Data:
text {{trigger step value}}
publish_now true
Headers:
Authorization Bearer ot_your_key
Content-Type application/jsonTo schedule instead of posting live, drop publish_now and send a scheduled_date in ISO 8601. The two fields are mutually exclusive.
Data:
text {{trigger step value}}
scheduled_date 2026-07-10T09:00:00Zpublish_now and scheduled_date are exclusive
Send one or the other, never both in the same request. Leave both out and OpenTweet saves the post as a draft you can edit later.Test the step
Run Zapier's test. A 201 status with the created post means it worked, so check your X profile. If it fails, OpenTweet returns a JSON error body like {"error":"...","code":"..."} that tells you what to fix.
201 created -> success, the post object comes back
400 validation_failed / invalid_json -> fix the body or JSON
401 missing or invalid key -> check the Bearer header
403 subscription_required -> plan or account cannot post
429 rate limit -> Pro 60, Advanced 300, Agency 600 req/minDo not blindly retry 4xx
401, 403, and 400 are permanent until you fix the request, so retrying wastes runs. Only retry 429 and 5xx, and add a Zapier delay so retries back off instead of hammering.Turn on the Zap
Publish and turn on the Zap. Every trigger event now posts to X through OpenTweet. To post to a specific account when you run more than one, add an x_account_id field to the JSON body. To post a thread, send is_thread and thread_tweets.
{
"is_thread": true,
"thread_tweets": [
"Thread: automating X from Zapier.",
"One Webhooks by Zapier POST, no OAuth.",
"OpenTweet chains these into a native thread."
],
"thread_media": [[], [], []],
"publish_now": true
}Pro Tips
Store the key in Zapier, not the URL
Keep the ot_ key in the Authorization header only. Never put it in the URL or in trigger data, where it can end up in logs and task history.
Let OpenTweet do the scheduling
Send scheduled_date instead of using a Zapier Delay step. OpenTweet publishes at the exact time, so your Zap finishes instantly and does not hold a task open.
Reuse the step across Zaps
Once one Webhooks by Zapier POST works, copy it into other Zaps. Same URL, same header, just change what maps into the text field.
Feed AI output straight in
Have an earlier step generate copy, then map it into text with publish_now true. You get a content pipeline without leaving Zapier.
Common Mistakes to Avoid
Leaving payload type as Form
Webhooks by Zapier defaults to form encoding. Switch the payload type to JSON, or OpenTweet rejects the body with a 400 invalid_json error.
Sending publish_now and scheduled_date together
They are mutually exclusive. Send one or the other. Include both and the request fails. Omit both only when you want a draft.
Using api.opentweet.io
That host does not resolve. The REST base is https://opentweet.io/api/v1. Point the webhook there and keep your ot_ key in the Authorization header.
Frequently Asked Questions
How do I post to Twitter from Zapier now that the native X action is gone?
Add a Webhooks by Zapier action, choose the POST event, and point it at https://opentweet.io/api/v1/posts. Set the payload type to JSON, add an Authorization header of Bearer ot_your_key, and send a body like {"text":"Hello","publish_now":true}. Zapier posts to X through OpenTweet without the removed native action.
Do I need a Twitter developer account to tweet from Zapier?
No. OpenTweet uses a single ot_ Bearer key, so there is no X developer account, no OAuth app, and no request signing. You paste the key into the Webhooks by Zapier Authorization header and you are done.
Can I schedule tweets from Zapier?
Yes. Instead of publish_now, send a scheduled_date in ISO 8601 format like 2026-07-10T09:00:00Z. The two fields are mutually exclusive. OpenTweet publishes the tweet at that time, so Zapier does not need to hold the step or run a delay.
Which Zapier plan do I need for Webhooks by Zapier?
Webhooks by Zapier is a premium built-in app, so you need a paid Zapier plan. The OpenTweet side works on any plan with API access. If a step returns HTTP 429, you hit the OpenTweet rate limit for your plan, so add a short delay and retry with backoff.
Keep exploring
OpenTweet vs the X API
Post, schedule, and automate X without a developer account or the $200/mo minimum.
Post to X without an API
The clean, account-safe way to post to X from your code or an AI agent.
Twitter MCP Server
Give Claude, Cursor, and OpenClaw the ability to post to X. 36 tools included.
Developer docs
Quickstart, API keys, MCP setup, and the REST reference for posting to X from code or an agent.
XMCP vs OpenTweet
X's official MCP server bills per API call and cannot schedule. Compare it with the flat-fee hosted MCP.
MCP for AI agents
Connect your AI client to X in under two minutes, no X developer account.
Developer API and keys
REST endpoints, one bearer key, and usage tracking. Build on OpenTweet.
OpenTweet for AI agents
The posting layer for autonomous agents and automations that live on X.
Build an AI Twitter persona
Give your AI agent its own X account. Setup, cadence, and the rules that keep it safe.
Start posting from Zapier today
Get your ot_ key in 2 minutes. Wire one Webhooks by Zapier step and any trigger can tweet.