Authentication

Every API request carries a token in the Authorization header:

Authorization: Bearer msv_pat_…

There are three kinds of token. Each starts with a recognisable prefix, so secret scanners can spot one that leaked.

Prefix What it is Made in Acts as
msv_pat_ A personal token Settings → Developer You
msv_bot_ An app token Org Settings → Integrations → Apps & bots The app's bot user, in one org
msv_oat_ An OAuth access token The OAuth flow The installed bot, or the person who signed in

A token can never do more than the person or bot it acts as. Scopes only narrow what it may do.

Personal tokens

A personal token acts as you, for scripts and automations. Make one in Settings → Developer (on a phone: You → Developer).

Direct messages

A personal token never reads your direct messages or group chats unless you tick Include my direct messages when you make it. Without the tick, those conversations don't exist for the token: they don't appear in lists and fetching one answers 404. An app token never reads direct messages or group chats, whatever its scopes.

When an org keeps personal tokens to owners and admins

An org's Owners and Admins can decide that only they may use personal tokens there: Org Settings → Integrations → API tokens → Members may make personal API tokens. While that is off:

App tokens

An app token belongs to an installed app. It posts as the app's bot user, in one org, with the scopes the install was given. Make one under Org Settings → Integrations → Apps & bots: open the app and choose Make token. You need the Manage integrations permission (Owners, Admins, or a custom role that grants it).

An app token sees the org's public text channels and the channels the app was added to. It reads message content only in the channels it was added to, unless an admin gave it messages:read:all. It never sees direct messages, group chats or people's email addresses. App tokens don't expire unless you set an expiry. See Apps and bots.

OAuth access tokens

Apps that other orgs connect get tokens through OAuth: msv_oat_… access tokens (valid for an hour) and msv_ort_… refresh tokens, which change on every refresh. Use the access token exactly like an API token. An install token acts as the bot, like an app token; a sign-in token acts as the person, within the scopes they granted. See OAuth.

Scopes

Each operation in the reference names the scope it needs. identify is part of every token.

Scope Lets the token
identify Read who the token is, its orgs and scopes (GET /v1/me). Every token has it.
channels:read List and read channels you can see, and an app's channel list.
channels:write Create channels, and add apps to or remove them from channels you manage.
messages:read Read messages in channels you can see, search, and download attachments.
messages:read:all Read every channel in the org, including private ones you aren't in. Owner/Admin only.
messages:write Post, reply in threads, and edit or delete the token's own messages.
reactions:write Add and remove reactions.
members:read List members, their roles and titles, and custom roles.
roles:write Give and take custom roles (never the Owner / Admin / Member / Guest role). Owner/Admin only; an app keeps it only while the person who set it up is an Owner or Admin, and can't give a role that manages integrations.
meetings:read Read the meetings you're in or organise.
meetings:write Schedule meetings as you, and change, re-invite or cancel the ones you organise. Personal tokens only.
shifts:read Read your published shifts and the org's events.
tasks:write Add tasks to your list.
files:write Upload files to attach to messages. See Files.
webhooks:write Manage the org's incoming webhooks. Owner/Admin only; needs Manage integrations.
events:subscribe Manage event subscriptions and read stored events. Owner/Admin only; needs Manage integrations.
commands:write Register an app's slash commands. Apps only.
admin:read Export the org's audit log. Owner/Admin only.
mcp:read Let an AI assistant read through the MCP server, as you.
mcp:write Let an AI assistant act (post, react, add tasks, schedule meetings) through the MCP server. Includes mcp:read.

Owner/Admin only means a personal token gets the scope only when its owner is an Owner or Admin: of the pinned org, or of some org when the token is unpinned. messages:read:all includes messages:read.

The scope list also contains presence:read. No API operation uses it yet.

Revoking a token

When a request is refused

Status code Meaning
401 unauthenticated No token was sent.
401 token_invalid, token_revoked, token_expired The token isn't valid any more.
401 account_suspended The account behind the token is suspended.
403 insufficient_scope The token lacks the scope the operation needs.
403 org_not_allowed The token can't act in that org (another org, its pin, or the org's personal-token setting).
403 forbidden The person or bot may not do this.
404 not_found It doesn't exist, or this token can't see it. Other orgs' things always read as not found.

Keep tokens out of source control, logs and URLs. If one leaks, revoke it.