REST API (HTTP module) · Bluesky

Post to Bluesky from Make, with approval

Make scenarios are good at shaping data before it is sent: filter, format, aggregate. That suits Bluesky, where every post has a hard 300-grapheme ceiling. A scenario can trim source text, then send one Make a request call to SocialHandoff's REST API. Anything over the limit is flagged by the length guardrail rather than published broken. Nothing reaches Bluesky until you approve it in the inbox.

Prompt

Scenario: watch our Ghost blog for new posts tagged 'engineering'. Use a text function to build a post: title, the first sentence of the excerpt truncated to 180 characters, and the URL. POST it to the REST API as a Bluesky draft with mode submit.

How to do it

  1. Mint a Bluesky agent key In https://app.socialhandoff.com, open Connections, connect your Bluesky account, then create an agent key scoped to Bluesky with draft permission only. Copy the key when it is shown; only its hash is stored.
  2. Build the trigger module Start the scenario with a watch module: new RSS items, new rows, a webhook, or a scheduled run.
  3. Add HTTP Make a request Method POST, URL https://app.socialhandoff.com/v1/posts, header Authorization: Bearer with the key, body type JSON with body, networks ["bluesky"], and mode "submit".
  4. Map fields and run once Map the trigger's fields into body, run the scenario once, and approve or reject the result in the inbox before scheduling the scenario.

Example draft

From the engineering blog: Why we moved our job queue back into Postgres. After two years on a separate broker, one database turned out to be easier to run, debug, and back up.

example.com/blog/queue-postgres

Gotchas

  • Connect Bluesky with an app password from Settings, never your account password. Revoking that app password cuts off only this connection.
  • The 300 limit counts graphemes, so an emoji or accented letter counts as one. Anything longer should become a reply-chain thread, not a clipped post.
  • Bluesky refuses images over 1 MB and allows at most 4 per post. Resize screenshots before the agent attaches them, and add alt text to each.
  • Make runs the HTTP module once per bundle. If your trigger returns 20 items, you get 20 drafts; add a filter or limit before the request.
Bluesky
  • Character limit: 300 graphemes per post. An emoji or an accented letter counts as 1 grapheme even if it uses several bytes.
  • Media per post: Up to 4 images, or 1 video. Images and video cannot be mixed in one post.
  • Image size: The AT Protocol image embed accepts blobs of about 1 MB each; the official app compresses larger photos. SocialHandoff checks for 1 MB per image.
  • Video: Up to 3 minutes and 100 MB, MP4. SocialHandoff does not publish video to Bluesky.
Bluesky scheduler for agent-drafted posts and threads

Frequently asked questions

Can Make read the approval result?
Yes. Register an outbound webhook for post.published or post.failed and point it at a Make custom webhook to continue the scenario.
What happens if a Make run sends a post longer than 300 graphemes?
The length guardrail flags it and the draft waits in the inbox with the reason attached. Send a thread array instead if your source text is long.
Does it support custom domain handles on Bluesky?
Yes. Connect with whatever handle you sign in with, including a domain handle. Mentions of other handles become clickable facets on publish.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial