Outreach OAuth Scopes
OAuth 2.0
searched
Outreach publishes 46 OAuth 2.0 scopes via the authorizationCode flow. Scopes are the fine-grained permissions an application requests at authorization time to act against the Outreach API on a user’s behalf.
Tokens are issued from https://api.outreach.io/oauth/token.
This index is generated from the provider’s OpenAPI security definitions (and, where available, its documented scope reference) and refreshes on every APIs.io network build. Browse every provider’s scopes at scopes.apis.io.
generated: '2026-08-13'
method: searched
source: https://developers.outreach.io/api/getting-started#authorization
docs:
- https://developers.outreach.io/api/getting-started#authorization
- https://developers.outreach.io/api/s2s-access
- https://developers.outreach.io/api/oauth
provider: Outreach
providerId: outreach
notes: >-
The published OpenAPI declares NO oauth2 securityScheme — it models only `bearerAuth` and `s2sAuthToken`
as plain HTTP bearer JWTs — so `derive-oauth-scopes.py` finds zero scopes. The scope model is real and
fully documented in prose, and the OAuth 2.1 authorization-server metadata at
https://api.outreach.io/.well-known/oauth-authorization-server declares its own `scopes_supported`. This
file therefore comes from the docs, not the spec. Outreach does not publish a single enumerated table of
every OAuth scope; the authoritative list is rendered in the Outreach app's "API access" configuration
tab, which is behind a customer login. Only scopes Outreach actually names in public are recorded below —
nothing was extrapolated across resources.
grammar:
form: <pluralResource>.<level>
levels:
- read
- write
- delete
- all
additive: false
additive_note: Scopes are NOT additive — `prospects.write` grants no read access. `all` implies
read + write + delete.
request_form: space-separated, URL-encoded, in the `scope` query parameter of /oauth/authorize
on_missing_scope: 403 with error id `unauthorizedOauthScope`
post_scope_check: OAuth scope is the front gate only; the user's Outreach governance/RBAC profile is
evaluated separately and returns 403 `unauthorizedRequest` on failure.
schemes:
- name: OAuth 2.0 (REST API)
flows:
- flow: authorizationCode
authorizationUrl: https://api.outreach.io/oauth/authorize
tokenUrl: https://api.outreach.io/oauth/token
refresh: grant_type=refresh_token against the same token URL
credentials: separate development and production client credentials per Outreach app
source: https://developers.outreach.io/api/oauth
- name: OAuth 2.1 + Dynamic Client Registration (MCP server)
flows:
- flow: authorizationCode
pkce: S256
authorizationUrl: https://api.outreach.io/mcpOAuth/authorize
tokenUrl: https://api.outreach.io/mcpOAuth/token
registrationUrl: https://api.outreach.io/mcpOAuth/register
source: https://api.outreach.io/.well-known/oauth-authorization-server
- name: S2S application token
type: JWT signed with a customer-registered RSA public key
note: Server-to-server; carries application identity, not user identity. Scope set is a strict subset of
the OAuth scopes.
source: https://developers.outreach.io/api/s2s-access
scopes:
- scope: prospects.all
description: Full read, write and delete access to prospects.
declared_in:
- authorization-server metadata (scopes_supported)
- S2S available scopes
- docs example
surfaces:
- rest
- mcp
- s2s
- scope: prospects.read
description: Read access to prospects.
surfaces:
- rest
- s2s
- scope: prospects.write
description: Write access to prospects.
surfaces:
- rest
- s2s
- scope: prospects.delete
description: Delete access to prospects.
surfaces:
- rest
- s2s
- scope: accounts.all
surfaces: [rest, s2s]
- scope: accounts.read
surfaces: [rest, s2s]
- scope: accounts.write
surfaces: [rest, s2s]
- scope: accounts.delete
surfaces: [rest, s2s]
- scope: auditLogs.read
surfaces: [rest, s2s]
- scope: calls.all
surfaces: [rest, s2s]
- scope: calls.read
surfaces: [rest, s2s]
- scope: calls.write
surfaces: [rest, s2s]
- scope: calls.delete
surfaces: [rest, s2s]
- scope: events.all
surfaces: [rest, s2s]
- scope: events.read
surfaces: [rest, s2s]
- scope: events.write
surfaces: [rest, s2s]
- scope: imports.all
surfaces: [rest, s2s]
- scope: imports.read
surfaces: [rest, s2s]
- scope: imports.write
surfaces: [rest, s2s]
- scope: kaiaRecordings.read
surfaces: [rest, s2s]
- scope: mailings.read
surfaces: [rest, s2s]
- scope: opportunities.all
surfaces: [rest, s2s]
- scope: opportunities.read
surfaces: [rest, s2s]
- scope: opportunities.write
surfaces: [rest, s2s]
- scope: opportunities.delete
surfaces: [rest, s2s]
- scope: sequenceStates.all
surfaces: [rest, s2s]
- scope: sequenceStates.read
surfaces: [rest, s2s]
- scope: sequenceStates.write
surfaces: [rest, s2s]
- scope: sequenceStates.delete
surfaces: [rest, s2s]
- scope: sequences.all
surfaces: [rest, s2s]
- scope: sequences.read
surfaces: [rest, s2s]
- scope: sequences.write
surfaces: [rest, s2s]
- scope: sequences.delete
surfaces: [rest, s2s]
- scope: snippets.read
surfaces: [rest, s2s]
- scope: tasks.all
surfaces: [rest, s2s]
- scope: tasks.read
surfaces: [rest, s2s]
- scope: tasks.write
surfaces: [rest, s2s]
- scope: tasks.delete
surfaces: [rest, s2s]
- scope: templates.read
surfaces: [rest, s2s]
- scope: users.read
surfaces: [rest, s2s]
- scope: webhooks.all
surfaces: [rest, s2s]
- scope: webhooks.read
surfaces: [rest, s2s]
- scope: webhooks.write
surfaces: [rest, s2s]
- scope: webhooks.delete
surfaces: [rest, s2s]
- scope: batches.read
description: Required alongside the target resource's write scope to run bulk/batch actions.
surfaces: [rest]
source: https://developers.outreach.io/api/bulk-api
- scope: batches.write
description: Required alongside the target resource's write scope to run bulk/batch actions.
surfaces: [rest]
source: https://developers.outreach.io/api/bulk-api
scope_source_note: >-
Every scope above is published by Outreach. The `<resource>.<level>` rows for accounts, auditLogs, calls,
events, imports, kaiaRecordings, mailings, opportunities, prospects, sequenceStates, sequences, snippets,
tasks, templates, users and webhooks are the S2S "Available scopes" table transcribed verbatim from
https://developers.outreach.io/api/s2s-access — Outreach states S2S scopes are a SUBSET of the OAuth
scopes, so each also exists on the OAuth surface. `batches.read`/`batches.write` come from the Bulk API
page. `prospects.all` is additionally declared machine-readably in the authorization-server metadata.
gaps:
- The REST API exposes 51 tagged resources but only 16 resource families appear in any published scope list;
scopes for the remaining resources exist but are enumerated only inside the authenticated app-configuration
UI.
- The OpenAPI declares no oauth2 securityScheme and no per-operation scope requirements, so a generated
client cannot tell which scope any given call needs.
- The MCP authorization-server metadata advertises only the prospects.all scope in scopes_supported, which
does not cover the 41 tools it serves (accounts, opportunities, sequences, tasks, teams, users, Kaia).
Every scope set here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for oauth scopes
4 MCP tools reach this
find_scopesBrowse and filter every scope set in the catalog.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools
Call it yourself
curl for this page
This scope set
curl "https://apis.io/api/v1/scopes/outreach-scopes"
All oauth scopes
curl "https://apis.io/api/v1/scopes?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.