Bluesky APIerrors
Bluesky API errorsand how to fix them.
When Bluesky rejects a request, Siar stores the network's own code and message on the post and returns it to you unchanged, so what you read here matches what you see in the API. Back to the Bluesky API.
Where a code is shown it is the network's own code or HTTP status. Messages are abridged where Bluesky's text is long.
AuthenticationRequired
Message
Invalid identifier or password
What it means. The handle or app password given at connect time is wrong (or the app password was deleted).
How to fix it. Create a new app password in Bluesky (Settings → Privacy and security → App passwords) and reconnect.
ExpiredToken
Message
Token has expired
What it means. The session could not be refreshed: the refresh token expired or the app password was revoked.
How to fix it. Reconnect the Bluesky account.
AccountTakedown
Message
Account has been taken down
What it means. Bluesky moderation took the account down or the user deactivated it.
How to fix it. Resolve it with Bluesky; the account cannot post until then.
InvalidRequest
Message
Record/text must not be longer than 300 graphemes
What it means. Bluesky counts graphemes; the text is over 300 (or over 3000 bytes).
How to fix it. Shorten the text or split it into replies.
BlobTooLarge
Message
This file is too large
What it means. An image is over 1,000,000 bytes (about 976 KB) or a video is over the service limit.
How to fix it. Compress the image; videos must be ≤ 100 MB and ≤ 3 minutes.
InvalidMimeType
Message
Unsupported or mismatched media type
What it means. The blob is not a supported image/video format, or its bytes do not match the declared type.
How to fix it. Use JPEG, PNG, WebP or GIF images and MP4/WebM/MOV video.
RateLimitExceeded
Message
Rate Limit Exceeded
What it means. A PDS limit was hit (about 1,666 record creates an hour and 11,666 a day per account, plus per-IP limits on createSession).
How to fix it. Retry after the ratelimit-reset time.
use_dpop_nonce
Message
Authorization server requires nonce in DPoP proof
What it means. OAuth servers rotate a DPoP nonce; the first request of a session is always rejected with it.
How to fix it. Handled automatically: Siar retries once with the supplied DPoP-Nonce.
invalid_grant
Message
refresh token is invalid, expired or revoked
What it means. OAuth refresh failed (public clients get shorter refresh lifetimes) so the grant is gone.
How to fix it. Reconnect the Bluesky account.
InvalidSwap
Message
Record already exists
What it means. A record with the same key was already written, which is how a retried publish is detected.
How to fix it. Nothing: Siar treats it as already posted.
Where to see an error
Read a failed post with GET /post/{id}: the error field summarises it, errors lists it per network and errorsVerbose keeps the detail. A post.published webhook fires when the post reaches a final state. Retry with POST /post/{id}/retry. Limits that Siar enforces itself are on the Bluesky page.
Your first post isone request away.
The Free plan includes 20 posts and 200 uploads a month across 3 teams. No card needed.