Last updated: September 2026

Can I post to Bluesky without applying for an API key?

Yes, and the question has a stranger answer than most people expect: there is no Bluesky API key to apply for. No developer portal, no application form, no approval queue, no tier, no cost. Bluesky runs on atproto, and atproto has no notion of a platform handing out keys.

What you authorize instead is a grant against the server that holds your account. Below: what exists in place of a key, why an App Password is not one, and the shortest path to a published post.

The checklist that does not exist

Almost everyone asking this arrives from X, where six things sit between you and your first programmatic post. Here is that same checklist against Bluesky.

What you expect
On X
On Bluesky
Developer account
Required, and it must exist before anything else
Does not exist
Application or approval
A project, an app, and billing enrollment
Nothing to apply for
API key or token you are issued
Keys, secrets and OAuth tokens per app
No platform-issued key at all
Access tier
Pay-per-use since the flat tiers were retired
No tiers
Cost to publish a post
About $0.015, or $0.20 with a link
$0
What you actually authorize
An app you registered against your own account
An OAuth grant on the server holding your account

Nothing here is a trial or a promotion

This is not a free tier that could close the way the X free tier closed to new projects in February 2026. There is no billing surface to turn on, because writing to your own repository on your own server is not a metered product. The cost of the Bluesky half of any setup is zero, permanently as far as the protocol is concerned.

So what do you authorize?

Your account lives on a personal data server. That server, not a central platform, decides whether a client may write to your repository. There are two ways a client can get that permission, and they are not equivalent.

  • atproto OAuth. You type your handle, your own server shows you a sign-in screen, and the client receives a scoped grant. You can revoke that one grant later without disturbing anything else.
  • An App Password. You generate a credential in Bluesky settings and paste it into the tool. It grants close to everything your account can do, and the only way to withdraw it is to delete it, which cuts off every tool holding that same string.

People call the second one an API key because it looks like one. It is not scoped like one, and it is not revocable like one. That difference is the whole substance of whether you should hand a scheduling tool your Bluesky password.

An App Password is a credential, not a key

Scoping and independent revocation are what make an API key safe to paste into a form. An App Password has neither. Generate one per tool if you must use them at all, name it after the tool, and delete it the day you stop using that tool.

The shortest path to a published post

If you are writing atproto code yourself, you create a session against your server and write a record into your repository. If you would rather not hold that, connect the account once over OAuth and post through one endpoint. The call below publishes natively to Bluesky, and to X in the same request if you want it there too.

bash
curl -X POST https://opentweet.io/api/v1/posts \
  -H "Authorization: Bearer ot_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "No developer account was harmed in the making of this post.",
    "platforms": ["bluesky"],
    "publish_now": true
  }'

Bluesky allows 300 graphemes per post, up to 4 images at 2MB each with alt text, and threads. Video does not publish to Bluesky, and nothing reads Bluesky engagement back, so there are no Bluesky analytics. A post too long for 300 is skipped on Bluesky with the reason recorded, and still goes out everywhere it fits. The parameter reference is in the cross-posting docs.

7-day free trial. Cancel anytime.

Where the cost actually sits

People asking about a Bluesky key are usually pricing a cross-posting setup, not Bluesky on its own. Worth knowing before you budget: the Bluesky side contributes nothing to that bill. Every dollar comes from X, which meters per call at roughly $0.015 a post and $0.20 when the post contains a link, since the flat $200 Basic tier was force-migrated on 1 June 2026.

That is a useful asymmetry. Halving your posting costs is a question about the X half only, and it is worked through in what it costs to cross-post to X and Bluesky and what replaced the $200 Twitter API tier.

OpenTweet is X-native. It goes deep on X with analytics, evergreen recycling, DM campaigns, Articles and an MCP server, and Bluesky is a mirror for the posts you are already writing rather than a second product. If what you want is one draft landing natively on both, that is exactly the shape it is built in.

Frequently asked questions

Can I post to Bluesky without applying for an API key?

Yes. There is no Bluesky API key, no developer portal, no application form and no approval queue. The protocol Bluesky runs on, atproto, has no concept of a platform-issued key. You authorize a client against the server that holds your account and post from there. It costs nothing.

Does Bluesky have a developer program or access tiers?

No. There is nothing to be accepted into and no paid tier that unlocks writing. This is the part that surprises people arriving from X, where a developer account, a project, a billing enrollment and a paid tier all sit in front of the first successful post.

Is a Bluesky App Password the same as an API key?

No, and treating it like one is the mistake worth avoiding. An API key is normally scoped and revocable on its own. A Bluesky App Password grants close to everything your account can do, and the only way to withdraw it is to delete it in your Bluesky settings, which cuts off every tool you gave that same password to.

What do I authorize instead of a key?

An atproto OAuth grant. You enter your handle, your own server presents the sign-in screen, and the tool receives a scoped grant rather than a credential. Nothing you type goes through the tool, and you can revoke that one grant without touching anything else.

Does posting to Bluesky cost anything?

No. There is no per-post charge, no metered read pricing and no minimum spend. If you are pricing a cross-posting setup, the entire cost is the X side of it, because X bills per call at roughly $0.015 a post and $0.20 when the post carries a link.

How do I post to Bluesky without writing any atproto code?

Connect the account to OpenTweet over atproto OAuth and post through one REST endpoint or through the hosted MCP server. That is $11.99 a month flat, and it covers X in the same call, so a single draft can publish natively to both.

Connect Bluesky in a minute, no key required

atproto OAuth, so no password and no App Password. Flat $11.99 a month with X included in the same draft.

7-day free trial. Cancel anytime.