Kabon Share API
    • Overview
    • MCP
    • Instagram
    • Tiktok
    • Linkedin
    • Youtube
    • Facebook
    • Threads
    • Twitter
    • Bluesky
    • User Auth
      • Sign up
        POST
      • Verify email OTP
        POST
      • Resend OTP
        POST
      • Login with email & password
        POST
      • Sign in / sign up with Google
        POST
      • Request password reset email
        POST
      • Reset password with token
        POST
      • Refresh JWT token
        POST
    • Users
      • Get current user profile
        GET
      • Update current user profile
        PATCH
      • Get all user settings
        GET
      • Update publishing settings
        PATCH
      • Update notification settings
        PATCH
      • Update UI preferences
        PATCH
      • Get current billing usage
        GET
      • List saved payment methods
        GET
      • List billing transactions
        GET
      • Regenerate API key
        POST
      • Mark onboarding complete
        PATCH
    • Social Accounts
      • Get OAuth authorization URL
      • List connected social accounts
      • Disconnect a social account
      • Get creator info for an account
      • List available Facebook Pages
      • Connect a Facebook Page
      • List connected Facebook Pages for a workspace
      • List available LinkedIn organizations
      • Connect a LinkedIn organization
      • Validate TikTok creator info
    • Workspaces
      • List workspaces for current user
      • Create a workspace
      • Get a workspace
      • Update a workspace
      • Delete a workspace
      • Update workspace AI settings
    • Team
      • List available permission scopes
      • List pending invitations for the current user
      • Get invitation details by token
      • Accept a workspace invitation
      • Decline a workspace invitation
      • List workspace members
      • Invite a user to the workspace
      • List pending invitations for a workspace
      • Cancel / revoke an invitation
      • Resend an invitation email
      • Update member role / scopes
      • Remove a member from the workspace
      • Leave a workspace
    • Posts
      • List posts
      • Create a post
      • List upcoming scheduled posts
      • Delete multiple posts
      • Get a post
      • Update a post
      • Delete a post
      • Get analytics for a post
      • Reschedule a post
      • Cancel a scheduled post
      • Retry a failed post
    • Assets
      • List assets
      • Bulk delete assets
      • Upload asset directly (multipart)
      • Get signed upload URL (step 1 of 2)
      • Confirm signed upload (step 2 of 2)
      • Get storage usage summary
      • List asset folders
      • Create a folder
      • Rename a folder
      • Delete a folder
      • List asset tags
      • Check thumbnail generation status
      • Get an asset
      • Update asset metadata
      • Delete an asset
    • Uploads
      • Get a signed upload URL for post media
      • Confirm upload complete
      • Get upload file info
      • Delete an uploaded file
      • List uploads
    • Analytics
      • Get platform aggregate stats
      • Get platform stats as a time series
      • Get audience demographics for a platform
      • List content analytics for a platform
      • Get analytics for a specific content item
      • Delete a synced content record
      • Get time series for a specific content item
      • Get follower count trend over time
      • Get recommended posting times per platform
      • Get aggregated analytics for a post across platforms
    • Streams
      • List streams
      • Create a stream
      • Get a stream
      • Update a stream
      • Delete a stream
      • Go live
      • Stop a live stream
      • Broadcast from a file
    • Plans
      • List available subscription plans
    • Subscriptions
      • Get current subscription & credit balances
      • Renew or extend subscription
      • Cancel subscription
    • Support
      • List support tickets
      • Create a support ticket
      • Get ticket statistics
      • Get a ticket
      • Reply to a ticket
      • Upload a ticket attachment
    • AI
      • Generate caption & hashtags for a media asset
      • Transcribe audio or video
      • Poll async AI job status
      • Get saved captions for an asset
      • Get AI credit usage summary for the workspace
      • Get AI credit usage as a chart series
      • Derive AI style settings from past posts
    • Studio
      • List studio projects
      • Create a studio project
      • Get a studio project (includes full projectData)
      • Update a studio project
      • Delete a studio project
    • Schemas
      • ApiResponse
      • SuccessResponse
      • ErrorResponse
      • Pagination
      • User
      • SocialAccount
      • Workspace
      • PlatformPost
      • Post
      • Asset
      • Ticket
      • Plan
      • Stream
      • StudioProject
      • Subscription
      • AiJob

    Bluesky

    Post text, images, and video to Bluesky via the AT Protocol (atproto). Supports rich text with clickable links, hashtags, and @mentions resolved to their DIDs.

    Quick Reference#

    PropertyValue
    Max text length300 graphemes
    Max images4 per post
    Max videos1 per post
    Image formatsJPEG, PNG, WebP, GIF
    Max image size1 MB per image (auto-resized)
    Video formatsMP4, MPEG, WebM, MOV
    Max video size100 MB
    Max video duration3 minutes
    SchedulingYes (via Kabonshare queue)
    Delete via APIYes

    Before You Start#

    INFO
    Bluesky uses atproto OAuth — not a developer app or client secret. You connect with your Bluesky handle (e.g. name.bsky.social) and authorise via the standard Bluesky consent screen. No app registration is required.
    WARNING
    Video upload requires a verified email on the Bluesky account. If video publishing fails, go to the Bluesky app → Settings → Account and verify the email, then retry.
    INFO
    Bluesky counts text in graphemes, not characters or bytes. A single emoji counts as 1 grapheme. The 300-grapheme limit is enforced by the platform — Kabonshare measures and validates using the same RichText library Bluesky uses, so the count shown in the composer is always accurate.

    Content Types#

    Post
    A standard text post. Supports up to 4 images or 1 video — not both in the same post. Rich text (links, hashtags, @mentions) is auto-detected and rendered as clickable facets.
    Text only
    Text-first platform — posts without media are fully supported and common. Links, hashtags, and @mentions are all automatically linkified.

    Specs#

    Text
    Images
    Video
    Aspect Ratio

    Authentication#

    Bluesky uses atproto OAuth rather than a traditional client-credentials flow. Key differences from other platforms:
    PropertyBlueskyOther platforms
    Connection triggerRequires the user's handle upfrontJust a platform name
    Token storageManaged by @atproto/oauth-client-node in its own session storeaccessToken / refreshToken on SocialAccount
    Token refreshTransparent — the library refreshes automatically on every API callManaged explicitly by Kabonshare
    Token typeDPoP-bound access tokens (replay-resistant)Bearer tokens
    INFO
    The SocialAccount.accessToken field for a Bluesky account holds a placeholder sentinel value (atproto-oauth), not a real token. The live credentials are stored in BlueskyOAuthSession, keyed by the account's DID. This is correct by design — the OAuth library owns the token lifecycle.

    Multi-Workspace Behaviour#

    The same Bluesky account can be connected across multiple workspaces. Because atproto credentials are keyed by DID (not per-connection), all workspaces sharing the same Bluesky account share one token family. Rotating a token in one workspace does not invalidate others — the single BlueskyOAuthSession record is updated atomically for all of them.

    Features#

    FeatureSupported
    SchedulingYes (via Kabonshare queue)
    Delete via APIYes
    Rich text (links, hashtags, mentions)Yes — auto-detected
    Images (up to 4, auto-resized)Yes
    Video (up to 100 MB / 3 min)Yes — requires verified email
    Analytics — followers / following / postsYes
    Analytics — per-post (likes, reposts, replies, quotes)Yes
    Analytics — impressions / reach / demographicsNo — not available via the AT Protocol API
    Native schedulingNo — queue-based only
    Container pre-processingNo

    Limitations#

    Bluesky has no native scheduling API and no platform-provided impressions or demographic data. Scheduling is handled by Kabonshare's queue, and analytics are limited to public engagement counts (likes, reposts, replies, quotes).
    A post cannot contain both images and video. If you include a video, any images in the same post are ignored. If you include multiple videos, only the first is used and the rest are rejected.

    Troubleshooting#

    SymptomCause / Fix
    Video fails with 403 unconfirmed_emailThe connected Bluesky account's email is not verified. Go to the Bluesky app → Settings → Account and verify it, then retry the post.
    Session could not be restored / must reconnectThe atproto OAuth session was revoked or expired. The user must disconnect and reconnect the account from the Accounts page.
    401 on video upload after service auth succeededThe PDS DID resolution may have returned a stale value. The adapter resolves the PDS from the DID document on every video publish — check that plc.directory is reachable from the server.
    Mention not linked@mentions are resolved to the account's DID at publish time. If the handle doesn't exist on Bluesky, the mention is left as plain text rather than failing the post.
    Post appears as plain text with no hashtag linksRich text facets are detected server-side. If facet detection fails (network timeout reaching the PDS), the post is published as plain text — it still goes out, just without clickable facets.
    Modified at 2026-06-04 13:39:11
    Previous
    Twitter
    Next
    Sign up
    Built with