Authentication
API keys, workspace scoping, and acting as a workspace in your organization.
Every request must carry an API key as a bearer token:
Authorization: Bearer sf_live_xxxxxxxxxxxxxxxxxxxxxxxxcurl https://app.shortfast.com/api/v1/videos \
-H "Authorization: Bearer sf_live_xxxxxxxxxxxxxxxxxxxxxxxx"Create and revoke keys
Create and revoke keys under Settings > API & Webhooks in the ShortFast app.
A REST key starts with sf_live_. A workspace can hold at most 25 keys.
A key's full value is shown only once, at creation. Only a hash is stored, so a key that was not copied cannot be recovered: revoke it and create another.
Each key is scoped to the workspace it was created in, and every query the API
runs is scoped to that workspace. A video, automation, profile or webhook that
belongs to another workspace answers 404, never someone else's data.
What a bad key looks like
A missing, malformed, revoked or unknown key is a 401 on every path, including
the ones that take no parameters:
{
"error": {
"status": 401,
"code": "unauthorized",
"message": "The API key is missing or invalid. Pass it as a Bearer token in the Authorization header."
}
}There is no unauthenticated endpoint, so a 401 always means the credential and
never the request body. GET / is the cheapest call to verify a key with: it
reads nothing beyond the workspace the transport already loaded, and returns that
workspace's plan, credits and limits.
Acting as a workspace in your organization
An organization key can operate on any workspace inside it without a separate key, by naming the target in a request header:
X-ShortFast-Workspace: <workspaceId>curl https://app.shortfast.com/api/v1/videos \
-H "Authorization: Bearer sf_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "X-ShortFast-Workspace: k9WmT3xR2pQ7nV4bd"With the header set, every endpoint acts on that workspace: its videos, its automations, its profiles, its webhooks. Omit it to act on the organization itself.
The header is only honored for an organization key targeting one of its own
workspaces. Any other value is rejected with 401, so a leaked workspace id
buys nothing.
For the MCP server, append &workspaceId=<workspaceId> to the
connection URL instead: an MCP connection is long-lived and carries no
per-request headers.