1. Platforms
Kabon Share API
  • Overview
  • MCP
  • Platforms
    • Bluesky
    • Instagram
    • Tiktok
    • Linkedin
    • Youtube
    • Facebook
    • Threads
    • Twitter
  • 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
    • Create a new user and get API key
      POST
    • Unregister a device from push notifications
      DELETE
    • Get list of registered devices
      GET
    • Register a device for push notifications
      POST
    • Send a test push notification to the current user
      POST
    • Remove the profile picture
      DELETE
    • Upload a profile picture. Stored in the avatars folder, served via the
      POST
    • Delete a payment method
      DELETE
    • Set a payment method as default
      PATCH
    • Download the invoice/receipt PDF for a captured (succeeded) transaction
      GET
  • 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
    • List a Pinterest account's boards
    • Create a new Pinterest board for the connected account
    • Validate TikTok creator info
    • Preview the scheduled posts that would be cancelled if this account is
  • 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
    • Upload a single chat attachment (≤5 MB) to S3 and return { name, url, fileType }
    • Channels the user can see: all workspace channels + DMs they're a member of
    • Create a channel or DM
    • /
    • /
    • /
    • /
    • Get groups
    • Create groups
    • Delete groupId
    • Update groupId
    • Get roles
    • Create roles
    • Delete roleId
    • Update roleId
  • 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
    • Retry a failed post
    • Cancel a scheduled post
    • Publish a draft post
    • Submit a post for approval
    • Record an approval decision
    • Get post version history
    • Rich, board-ready view of everything in the approval pipeline for the
    • All posts belonging to one Bulk Scheduler batch, in schedule order
    • Summaries of every batch created by the Bulk Scheduler in this workspace —
    • Create bulk
    • Aggregated dashboard metrics computed across ALL posts in the workspace
    • Ping the pending approvers of the post's current open stage
    • /
    • Body: { body, mentions?: [userId], attachments? }
    • /
    • /
    • Deliberately release a 'ready' post (an immediate post that has cleared
  • 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
    • Batch-resolve asset metadata (name, type, url, thumbnail) for a list of IDs
  • Uploads
    • Get a signed upload URL for post media
    • Get upload file info
    • Delete an uploaded file
    • List uploads
    • Confirm upload complete
    • Create validate url
  • 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
    • Gather data → render HTML → print to PDF (Puppeteer) → stream as a download
    • Generate the AI analysis on demand so the builder can preview it before export
    • For the report builder: gathers (and caches) the data, then returns the list of
    • Renders the analytics report as a self-contained HTML page so the template
  • Streams
    • List streams
    • Create a stream
    • Get a stream
    • Delete a stream
    • Go live
    • Stop a live stream
    • Broadcast from a file
    • Update a stream
    • Check relay health and list active paths
    • Get relay status for a specific stream
    • Get streaming usage for the authenticated user (minutes, limits, active streams)
    • the relay (path + token) and re-arm fan-out, returning the WHIP URL so
  • Plans
    • List available subscription plans
  • Subscriptions
    • Get current subscription & credit balances
    • Renew or extend subscription
    • Wallet balances and recent ledger entries
    • Cancel subscription
    • Choose the term for the next renewal
    • Turn recurring billing on or off. Body: { enabled: boolean }
    • Get extra accounts
    • Create cancel removal
    • Create remove
  • 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
    • /
    • /
    • /
    • /
    • /
    • /
    • ?limit=30 (default 30, max 100)
    • /
  • Studio
    • List studio projects
    • Create a studio project
    • Get a studio project (includes full projectData)
    • Update a studio project
    • Delete a studio project
  • Payments
    • Pay for a purchase with wallet credit
    • Charge a saved payment method (for recurring subscriptions or credit purchases)
    • Get payment configuration for frontend (public key, supported currencies, etc.)
    • Create cryptocurrency payment invoice via Heleket
    • Initialize a payment (subscription or credit purchase)
    • Verify a payment
  • Bluesky OAuth
    • atproto client metadata
    • atproto client public keys (JWKS)
    • atproto OAuth callback
  • Apps
    • Public — list all active apps with their latest active version
    • Public — single app with all active versions
    • Public — download/redirect to latest version
    • Public — download specific version
  • Billing
    • Get user's billing cycles (all statuses for full history)
    • Calculate proration for upgrading cycles (no charge, just preview)
    • Manually create billing cycles from an existing transaction (admin/fix tool)
    • Select a plan after account creation (for free plans or initial plan selection)
    • Upgrade billing cycles to a new plan with proration
    • Preview the discount a coupon yields for a subscription checkout, so the
  • Blog
    • Published categories with post counts
    • Published posts, newest first. Query: page, limit (max 100), category
    • Single published post by slug
  • Books
    • List available books (metadata only — no file data)
    • Download a book's full JSON data from storage (S3 or local)
  • Platforms
    • Returns obfuscated platform capabilities for frontend
    • Returns capabilities for a specific platform
  • Ideas
    • Get ideas
    • Create ideas
    • Get boards
    • Create boards
    • Delete boardId
    • Update boardId
    • Delete ideaId
    • Get ideaId
    • Update ideaId
    • Get comments
    • Create comments
    • Delete commentId
    • Create convert
    • Update move
    • Create vote
  • Notifications
    • The current user's notification inbox (newest first) + unread count
    • Mark all of the user's notifications read
    • Lightweight unread badge count
    • Mark a single notification read
  • Queue
    • Clean old jobs from the queue
    • Clear jobs from the queue
    • Drain the queue (remove all jobs)
    • Get all jobs in the queue
    • Get queue statistics
  • Limits
    • Create archive
    • Create unarchive
    • Create remove
    • Create restore
    • Create suspend
    • Get status
    • Create archive
    • Create unarchive
  • Services
    • List all available service names
    • Get status of all services (public endpoint)
    • Get status of a specific service (public endpoint)
  • Approvals
    • Delete approval flow
    • Get approval flow
    • Replace approval flow
    • Create resolve stage
  • Schemas
    • ApiResponse
    • SuccessResponse
    • ErrorResponse
    • Pagination
    • User
    • SocialAccount
    • Workspace
    • PlatformPost
    • PlatformValidationFailure
    • Asset
    • PostContentOverride
    • PostApproval
    • Ticket
    • Plan
    • Post
    • Stream
    • StudioProject
    • AiJob
    • WalletEntry
    • Subscription
  1. Platforms

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-08-16 17:07:37
Previous
MCP
Next
Instagram
Built with