Zapier Tutorial

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.

What Webhooks by Zapier sends
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

1

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.
2

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.
3

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.

Webhooks by Zapier fields
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/json

To schedule instead of posting live, drop publish_now and send a scheduled_date in ISO 8601. The two fields are mutually exclusive.

Schedule instead of post now
Data:
  text             {{trigger step value}}
  scheduled_date   2026-07-10T09:00:00Z

publish_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.
4

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.

Reading the response in Zapier
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/min

Do 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.
5

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.

Optional: thread body
{
  "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.

Start posting from Zapier today

Get your ot_ key in 2 minutes. Wire one Webhooks by Zapier step and any trigger can tweet.