Skip to content

OAuth Scopes

When you configure OAuth you will need to define the OAuth scopes, and these will be reviewed when you submit your app for approval. This guide will help you understand what OAuth scopes are, which ones are available, and how to choose them.

What are OAuth scopes?

OAuth scopes, or permissions, let you specify exactly what types of data your app can access within an Intercom workspace and actions that it can take with the workspace's data.

You select OAuth scopes when you are configuring OAuth in your Developer Hub.

OAuth Scopes Settings in the Developer Hub

Why are OAuth scopes important?

OAuth scopes are important because they define the level of access your app has to specific pieces of customer data. For the security of our customers, Intercom ensures that public apps only access resources necessary to the functionality of the app.

It's important that you only specify the scopes you need to satisfy your use case and no more.

Over-privileged scopes are the most common reason that apps are initially rejected in the approval process.

It's also important to note that if you are using Canvas Kit for Messenger or Inbox apps, certain OAuth scopes are required by default.

Canvas Kit required scopes

If your app utilizes Canvas Kit, certain permissions are required by default due to the data your app will have access to. The following scopes will be automatically selected and cannot be deselected:

  • Read and list users and companies
  • Read conversations
  • Read admins
  • Gather App data

Available OAuth scopes

The following scopes can be selected via checkboxes on your Authorization settings page in the Developer Hub:

People & conversation data

Standard scopesDescription
Read and list users and companiesList and view all segments, users, companies, and tags
Read and write usersList all users, execute bulk actions, and add or remove users from companies
Write users and companiesCreate and update users, companies, and tags
Read one user and one companyList and view a single user and company
Read tagsList all tags
Write tagsCreate, update, use and delete tags
Read conversationsView conversations
Write conversationsReply to, mark as read and close conversations
Delete conversations and metricsDelete conversations and their metrics, cannot be recovered
Read eventsList all events belonging to a user
Write eventsAbility to submit events (i.e. user activity)
Read countsCount users and companies with specified criteria
Write data attributesCreate and update custom data attributes
Export message dataExport engagement data for messages
Export content dataExport engagement data for content
Read content dataCreate and update custom data attributes
Read ticketsView tickets
Write ticketsCreate tickets
Read and write custom object instancesCreate, read, update and delete custom object instances
Read status of jobsRead status of jobs enqueued via the API

Workspace data

Extended scopesDescription
Read adminsList and view all admins
Read one adminView a single admin
Update adminsUpdate away mode for admins
Read admin activity logsList and view all admins and their activity
Read data when entered into the appGather data via Intercom Apps
Read and List news items and newsfeedsList and view all News items and Newsfeeds
Read and Write news items and newsfeedsRead, Update and Create news items and newsfeeds
Read and List articlesList and view all articles
Read and Write ArticlesRead, Update and Create articles
Create phone call redirectsCreate phone call redirects
Read and list news items and newsfeedsList and view all News items and Newsfeeds
Read and write news items and newsfeedsRead, update and create news items and newsfeeds
Read and write AI contentCreate and update AI content
Read data connectorsAccess data connectors, execution results and execution webhooks
Read and write data connectorsConfigure data connectors and read execution results and execution webhooks

Conversation access is limited by the installing teammate

The Read conversations and Write conversations scopes do not on their own give your app access to every conversation in a workspace. Your app's token is also limited by the conversation access of the teammate who installed it:

  • For a public app, that is the teammate who authorized your app through OAuth.
  • For a private app, that is the teammate who installed the app on the workspace, or who last regenerated its Access Token.

Workspace admins set a teammate's conversation access under Settings > Workspace > Teammates. If the installing teammate can access All conversations, which is the default, your app can reach every conversation its scopes allow. If their access is limited, for example to conversations assigned to them or to their teams, your app's token is limited in the same way:

  • Requests that act on a single conversation outside the teammate's access return a 403 error with the code token_unauthorized. This applies to retrieving, updating, deleting, replying to, managing, merging, converting and redacting a conversation, to attaching or detaching its contacts and tags, and to the other endpoints that act on a single conversation.
  • List and search return only the conversations the teammate can access.
  • conversation.* webhook topics are delivered only for conversations the teammate can access.
{
  "type": "error.list",
  "request_id": "...",
  "errors": [
    {
      "code": "token_unauthorized",
      "message": "Not authorized to access this conversation"
    }
  ]
}

Requests from a Canvas Kit app are checked against the installing teammate's access, not against the access of the teammate who is viewing the Inbox.

Changes to the teammate's conversation access apply to your app's requests straight away. You do not need to reinstall the app or regenerate its token. To let your app work across all conversations, have it installed by a teammate whose conversation access is All conversations.

This applies to all API versions.

Webhook topics and OAuth scopes

Webhook topics are related to corresponding OAuth permission scopes.

For example, if you need to setup a webook to trigger when a user/lead is created then you will need to select the "Read and write users" permission scopes.

You will then be able to setup the webhook topics for your app which will fire for each workspace it is installed on.

See the guide on setting up webhooks for more information on how to enable webhooks for your app.