REST API (Webhooks by Zapier) · Bluesky

Post to Bluesky from Zapier, with approval

Zapier connects apps that non-developers already use: spreadsheets, forms, CMS tools, calendars. A single Webhooks by Zapier step can send any of those events to SocialHandoff as a Bluesky draft. Marketing teams use it to turn a new blog item or a webinar slot into a post, while a person still approves every word before it goes live. Drafts land in the approval inbox, and you decide what goes live.

Prompt

Zap: when a new webinar is added to our Google Calendar 'Webinars', post the title, date, and registration link to the REST API as a Bluesky draft with mode submit. Use the calendar event id as the idempotencyKey.

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. Choose the trigger app Pick the trigger: a new blog item, a Notion page, a spreadsheet row, a calendar event, or anything else Zapier watches.
  3. Add a Webhooks by Zapier POST Send JSON to https://app.socialhandoff.com/v1/posts with an Authorization: Bearer header. Map body from the trigger, set networks to ["bluesky"], and mode to "submit".
  4. Test and turn on Run the test step, open the approval inbox, and check the draft. Then turn the Zap on. Every run creates a pending post, never a live one.

Example draft

Live on 8 October, 17:00 UTC: Designing APIs your future self will thank you for. 45 minutes on versioning, error shapes, and pagination, with time for questions.

Register: example.com/webinars/api-design

Gotchas

  • Links, @handles, and #tags become clickable facets when the post publishes. Have the agent write the plain URL and handle, not markdown links.
  • 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.
  • Zapier can replay a step on errors. Send an idempotencyKey built from the trigger record's id so a replay returns the same Bluesky draft instead of a second one.
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

Is there a native Zapier app?
Not today. Use Webhooks by Zapier to call the REST API. It needs one POST step and a bearer header.
What happens if a Zapier 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.
Do I need a Bluesky app password?
Yes. Create one in Bluesky under Settings, then App passwords, and paste it when you connect the account. It can be revoked without changing your main password.

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