Who can use this feature?
- Global admins or users with advanced permissions
- Available on all plans
OAuth is an open standard for access delegation, commonly used as a way for users to grant websites or applications access to their information on other websites but without giving them the passwords.
Totango leverages the OAuth protocol to allow developers to write third-party applications that interact with Totango using secured API calls. You can then register these applications in Totango to ensure secured connectivity.
Understand key concepts
This section explains the key concepts that administrators should take into consideration when designing and maintaining third-party applications for registration with Totango.
Scopes
Scope is the OAuth equivalent of permissions. Each Totango API declares the scope(s) that are required to invoke it. The application’s developer is responsible for keeping track of the set of scopes that are required by the application, so they can be configured when the application is registered in Totango.
Supported grant types
The OAuth standard defines several grant types for different use cases. Totango supports the following types:
- Authorization Code: For applications that access Totango on behalf of end users. When a user accesses the application for the first time, they’ll be redirected to the Totango application so they can grant permission to the application to access Totango on their behalf.
- Client Credentials: For applications that access Totango directly (sometimes referred to as Machine-To-Machine). You’ll need to select a user that the application will use, since Totango API requires a user identity for most operations.
Mutual TLS
Mutual TLS is an optional feature that is not part of the official OAuth standard, but it provides an additional layer of trust between the interacting applications by requiring applications to use TLS client certificate bound access tokens.
Applications using this feature must send their client certificate to the token endpoint. When enabled, Totango automatically issues Public Key Infrastructure (PKI) of certificate and private key, and allows you to export it so you can include it in your application. Requests without the certificate will be rejected.
If enabling TLS, the certificate has an expiration date of one year, and should be renewed in time. If the certificate expires the application will not be able to access Totango APIs.
Register an OAuth application in Totango
Totango limits the number of applications you can create to two. Contact your Totango representative if you need additional applications.
- From the left nav, click Settings > OAuth Applications.
- Click the + Create new application button.
- On the Register New OAuth Application screen, enter the following details:
- Application name: For display purpose within Totango.
- Mutual TLS: Choose on if the client uses TLS client certificate bound access tokens. Off by default. See additional information above.
- Access Token Expiration: Default is 24 hours, which is the maximum value. If your security requirements are more strict, you can specify a shorter expiration period.
-
Grant type: Choose from the following:
- Authorization Code: Specify one or more Authorization Callback URLs of your application, which are used during the authorization flow. (Totango redirects to the specified callback URL.)
- Client Credentials: Select a user that the application will use. Note that if this user is disabled or deleted, the application will not be able to access Totango.
- Scopes: Determine the level of access the OAuth token will have to your data in Totango. Select the scopes required by your application. (See below.)
- Click Create Application.
A success message appears with the properties of your OAuth application, including the Client ID and Client Secret, which you should copy into your application’s configuration. - Click Close.
For security considerations Totango stores the Client Secret as a password, to ensure it cannot be leaked. Make sure you store it securely, as it cannot be restored.
View and update application details
From the OAuth Applications list, you can click an application to view its details. In the details page you can:
- Update the access token expiration
- For applications with an authorized code grant type:
- Modify the list of authorization callback URLs
- For applications that enabled TLC (client certificates):
- Export the certificate
- Renew the certificate
- Delete the application: This will also revoke all access tokens granted to the application, as well as the application certificate (if certificate binding is enabled)
For Developers
The following information is for developers designing and implementing third-party applications using Totango APIs using OAuth
Configuration
In addition to the client id and client secret provided during registration, you’ll need to configure the Totango OAuth endpoints in your application’s OAuth library:
-
Authorization: /oauth/authorize
- (Required only for Authorization Code grant type)
- Token: /oauth/token
Note that the endpoint should be prefixed with a base url according to the region your account belongs to:
Scopes
Scopes are organized based on entities (e.g., accounts, users) and operations (e.g., read, update) according to the following patterns. This structure allows you to either provide fine-grained access to specific operations, or to use the :all scope to simplify and shorten the scopes list.
- {entity}:all - Has access for all operations and scopes in the entity
- {entity}:read - Has access to fetch data
- {entity}:create - Has access to create data
- {entity}:update - Has access to update data
-
{entity}:upsert - Has access to create and update data
- Combines update & create scopes
- Some entities do not have different APIs for create & update
-
{entity}:delete - Has access to delete data
- Some entities do not have this API
- {entity}:definitions:read - Has access to read definitions (e.g., attributes)
- {entity}:definitions:upsert - Has access to update definitions (e.g., attributes)
-
{admin} - Has access to all scopes
- Use with caution. This is useful during the development phase, but is usually considered a security anti-pattern in production systems.
Totango APIs
The following table lists the supported APIs and their corresponding scopes. Make sure to add the prefix according to your region, as described in the configuration section.
API Endpoint | Required Scopes | Documentation | |
POST /api/v1/search/accounts | account:read | Search API | |
POST /int-hub/api/v1/accounts | account:upsert | Update Accounts | |
POST /int-hub/api/v1/accounts/attributes | account:definitions:upsert | Update Account Attribute Definitions | |
POST /api/v1/search/users | user:read | Search API | |
POST /int-hub/api/v1/accounts/users | user:upsert | Update Users | |
POST /int-hub/api/v1/accounts/users/attributes | user:definitions:upsert | Update User Attribute Definitions | |
DELETE /api/v2/users/account-user/{account-id}/{user-id} | user:delete | User Delete API | |
POST /api/v1/search/accounts/collections | collection:read | N/A | |
POST /int-hub/api/v1/collections/{collection-type} | collection:upsert | Update Collections | |
POST /int-hub/api/v1/collections/{collection-type}/attributes | collection:definitions:upsert | Update Collections Attribute Definitions | |
GET /api/v2/events | event:read | Events For Account | |
POST /api/v2/events/search | event:read | Events Search API | |
GET /api/v1/users/whoami | system_user:read | ||
GET /api/v2/audit | system_user:read | Audit Log API | |
GET /api/v2/scim/services/{service-id}/Users | system_user:read | SCIM Get Users | |
GET /api/v2/scim/services/{service-id}/Groups | system_user:read | SCIM Get Groups/Teams | |
POST /api/v2/scim/services/{service-id}/Users | system_user:create | SCIM Create User | |
GET /api/v2/scim/services/{service-id}/Users/{user-id} | system_user:read | N/A | |
PATCH /api/v2/scim/services/{service-id}/Users/{user-id} | system_user:update | SCIM Update User | |
PUT /api/v2/scim/services/{service-id}/Users/{user-id} | system_user:update | SCIM Replace User | |
GET /api/v2/scim/services/{service-id}/Groups/{team-id} | system_user:read | N/A | |
PUT /api/v2/scim/services/{service-id}/Groups/{team-id} | system_user:update | SCIM Set Users for Group / Team | |
PATCH /api/v2/scim/services/{service-id}/Groups/{team-id} | system_user:update | SCIM Add users to Group / Team | |
POST /api/v3/touchpoints | touchpoint:create | Create New TP | |
PUT /api/v3/touchpoints/{note-id} | touchpoint:update | Update Existing TP | |
DELETE /api/v3/touchpoints/{note-id} | touchpoint:delete | Remove Touchpoint | |
GET /api/v3/touchpoint-types | touchpoint:definitions:read | Touchpoint Types | |
GET /api/v3/touchpoint-tags | touchpoint:definitions:read | Touchpoint Reasons | |
GET /api/v3/activity-types | touchpoint:definitions:read | SuccessFlow Types |