- Its own set of connected social accounts (one Instagram account, one TikTok handle, etc.)
- Its own posts, drafts, and publish history
- Its own media library and folders
- Its own team (owner, admins, editors, client reviewers)
API key access models
When you mint a key in the dashboard you pick between two access modes:- Full access (default) — the key can act on every workspace its owner is a member of. A new workspace the owner joins later is automatically reachable.
- Scoped — the key is restricted to an explicit allow-list of
workspaces. Toggle “Full access” off in the create-key sheet and
pick the workspaces from the list. Any call targeting a workspace
outside the allow-list returns
403.
postbreeze.posts.get, postbreeze.media.move) derive the workspace
from the referenced row server-side — you never have to look it up
client-side.
Workspace inference
How the workspace gets resolved on each call:| Call shape | Source of workspaceId |
|---|---|
postbreeze.posts.get({ postId }) | Derived from Post.workspaceId |
postbreeze.posts.create({ platforms: [{ accountId }] }) | Derived from the first account |
postbreeze.socialAccounts.disconnect({ accountId }) | Derived from SocialAccount.workspaceId |
postbreeze.media.get({ mediaId }) | Derived from the media’s owner workspace |
postbreeze.posts.list() / postbreeze.posts.list({ workspaceId }) | Optional — omit to fan out, pass to scope |
postbreeze.socialAccounts.list() / .list({ workspaceId }) | Optional — same |
postbreeze.comments.list() / .list({ workspaceId }) | Optional — same |
postbreeze.media.list({ workspaceId }) | Required (account-global) |
postbreeze.media.presign({ workspaceId, … }) / .ingestFromUrl({ … }) | Required |
workspaceId) query every workspace the key can
act on and return a single merged list, newest-first. Each row carries
its own workspaceId so callers can group or filter client-side.
Resource calls don’t need a workspaceId either: the server reads it
off the referenced row. The SDK accepts an optional workspaceId on
those for client-side defense-in-depth (“assert that this post lives
in workspace X”) but it’s purely informational.