The moment it happens
Post a tweet by sending text to a link
Send text and an optional image from any tool and it's posted on X, with the tweet URL sent back.
- Runs
- The moment it happens
- Apps
- X
- AI
- Not needed
- Access
- tweet.write media.write
Send this to your assistant
Create a ClickRuntime automation: give me a link I can send text and an optional image URL to. Post each one as a tweet and reply with the tweet link.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Posting to X from wherever you work is surprisingly awkward. A shop owner wants a new product photo to go out the moment it is uploaded, a coach wants a form on their site to post a customer win, and a developer wants a script to tweet when a build is released. Each of them ends up opening X and doing the post by hand.
The automation gives you a trigger link. When text, and optionally an image URL, is sent to it, the image is downloaded and uploaded to X, the post is created, and the link of the live tweet is returned to the sender so the calling tool knows it worked.
Developers, no-code builders and small teams who want other apps to be able to tweet use it as a bridge.
What you get out of it
Any app can post to X
Forms, scripts, spreadsheets and other tools that can call a URL gain the ability to publish a tweet, which extends your toolkit well beyond X's own apps. That turns X into one more destination for whatever you already build or use.
Images are handled for you
Downloading the image and uploading it to X takes care of a step that is normally the hardest part of automating a post with a picture. Pictures raise engagement, and doing the upload for you removes the hardest step.
The sender learns the result
Returning the tweet URL means a form or script can store the link, show it to the user or log it, which closes the loop on the action. A returned link lets your form or script keep a record of what was posted.
Posts happen the moment you send
With a trigger link, the tweet is created when the request arrives, so a product launch or release note goes out exactly when it is ready. Timeliness is the point of social posting, and nothing waits for a human to open X.
Credentials stay in one place
Your X keys are kept as secrets, so the tools that send content never need the keys and the risk of exposing them in a script is reduced. Keeping keys in one place is safer than pasting them into every tool that wants to post.
How it works
What happens, step by step
When you send text (and optionally an image link) to the automation's private link, for example from a form, it starts.
If you included an image, it is uploaded to X first.
The tweet is posted on your X account.
You get a reply with the link to the new tweet.
Before it runs live
- Connect X
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other X steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, http, credentials
@on_event
def handle(event):
body = event.json or {}
auth = {"Authorization": "Bearer " + credentials.connection("x", "main")}
tweet = {"text": body["text"][:280]}
if body.get("image_url"):
media = http.post("https://api.x.com/2/media/upload", headers=auth,
files={"media": http.get(body["image_url"]).content}, data={"media_category": "tweet_image"}).json()
tweet["media"] = {"media_ids": [media["data"]["id"]]}
resp = http.post("https://api.x.com/2/tweets", headers=auth, json=tweet)
resp.raise_for_status()
tweet_id = resp.json()["data"]["id"]
return {"url": f"https://x.com/i/web/status/{tweet_id}"}FAQ
Common questions
What image formats work?
Can I stop strangers from posting through the link?
Is there a limit on how many tweets I can send?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Turn long text into an X thread
Paste a long piece of writing and it goes out as a numbered thread.
See how it worksSend new X mentions to Slack
Every @mention of your account shows up in Slack within 15 minutes.
See how it worksGet Slack alerts when your brand is mentioned
Posts naming your brand or a competitor reach Slack within 15 minutes.
See how it worksKeep exploring
Set up “Post a tweet by sending text to a link” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.