Connector Manifest
The manifest tells App Connect how to present a connector in the client, how users authenticate, which CRM pages can be opened, which custom fields appear in log forms, and which optional features are enabled.
In App Connect 2.0, the Developer Console is the primary place to manage manifests. The local src/connectors/manifest.json file still matters for bundled connectors, local development, and backward compatibility with older clients.
Top-Level Shape
{
"serverUrl": "https://connector.example.com",
"redirectUri": "https://ringcentral.github.io/ringcentral-embeddable/redirect.html",
"author": {
"name": "Developer Name",
"websiteUrl": "https://example.com"
},
"platforms": {
"myCRM": {
"name": "myCRM",
"displayName": "My CRM",
"auth": {
"type": "oauth"
}
}
},
"version": "1.7.30"
}
| Field | Description |
|---|---|
serverUrl |
Base URL for connector server HTTP calls. Omit the trailing slash. |
redirectUri |
Default RingCentral Embeddable redirect page. Individual OAuth configs can override this. |
author |
Developer metadata shown in the client. author.name is required by the legacy /crmManifest route. |
platforms |
Object keyed by platform name. Each value is one connector profile. |
version |
Manifest version displayed to users and used for compatibility checks. |
Platform Fields
| Field | Description |
|---|---|
name |
Platform key used by routes, JWT payloads, connector registration, and platforms lookup. |
displayName |
User-facing CRM name. |
developer |
Optional developer metadata for this platform. |
environment |
Setup-time hostname/server selection. See Environment. |
urlIdentifier |
Legacy URL matcher for CRM pages. Wildcards are supported. |
embedUrls |
CRM page URL patterns where the embedded experience can run. |
logoUrl, documentationUrl, releaseNotesUrl, getSupportUrl, writeReviewUrl |
User-facing links and assets. |
auth |
Auth configuration. See Authorization. |
serverSideLogging |
Optional server-side logging config. |
contactTypes |
Optional list of CRM entity types users can create/select. |
contactPageUrl |
Template for opening a contact page. Supports {hostname}, {contactId}, and {contactType}. |
logPageUrl |
Template for opening a log/activity page. Supports {hostname}, {logId}, {contactId}, and {contactType} where available. |
canOpenLogPage |
When true, App Connect opens logPageUrl for logged activities. When false, it opens contactPageUrl. |
settings |
Connector-specific user/admin settings. See Custom settings. |
page |
Auth, call log, message log, feedback, and contact-search UI config. See Manifest pages. |
requestConfig |
Client HTTP config. timeout is in seconds. |
enableExtensionNumberLoggingSetting |
Shows the user setting for internal extension-number contact lookup/logging. |
trackSmsTypingDuration |
Sends SMS typing duration data for connectors that bill/track SMS time. |
rcAdditionalSubmission |
Adds selected RingCentral cached data into logging submissions. |
override |
Runtime manifest overrides. See Regional services. |
Environment
environment controls how the client determines the CRM hostname/server.
Fixed
{
"environment": {
"type": "fixed",
"url": "https://app.example.com"
}
}
Use this when every customer uses the same CRM URL.
Dynamic
{
"environment": {
"type": "dynamic",
"urlIdentifier": "*.example.com",
"instructions": [
"Log in to your CRM",
"Copy the whole URL and paste it here"
]
}
}
Use this for tenant-specific subdomains.
Selectable
{
"environment": {
"type": "selectable",
"selections": [
{ "const": "https://app.example.com", "name": "US" },
{ "const": "https://eu.app.example.com", "name": "EU" }
]
}
}
Use this for regional deployments with a known list of hosts.
Authorization
At minimum, every platform needs:
{
"auth": {
"type": "oauth"
}
}
or:
{
"auth": {
"type": "apiKey",
"apiKey": {
"page": {
"title": "My CRM",
"content": [
{
"const": "apiKey",
"title": "API key",
"type": "string",
"required": true
}
]
}
}
}
}
OAuth platforms usually include client-visible authorization fields:
{
"auth": {
"type": "oauth",
"oauth": {
"authUrl": "https://app.example.com/oauth/authorize",
"clientId": "public-client-id",
"redirectUri": "https://ringcentral.github.io/ringcentral-embeddable/redirect.html",
"scope": "scope=contacts.read contacts.write",
"customState": "platform=myCRM"
}
}
}
Keep client secrets out of the manifest. Return them from getOauthInfo, environment variables, managed OAuth, or proxy configuration.
Server-Side Logging
{
"serverSideLogging": {
"url": "https://crm-logging.labs.ringcentral.com",
"useAdminAssignedUserToken": true,
"enableUserMapping": true
}
}
| Field | Description |
|---|---|
url |
Server-side logging service URL. |
useAdminAssignedUserToken |
When true, logging can use the admin-assigned CRM user mapping. |
enableUserMapping |
Enables admin mapping between CRM users and RingCentral users. Requires getUserList. |
Pages And Settings
Use:
| Manifest area | Purpose |
|---|---|
auth.apiKey.page.content[] |
API-key login form fields, including managed-auth fields. |
page.callLog.additionalFields[] |
Custom call log form fields. |
page.messageLog.additionalFields[] |
Custom message log form fields. |
page.feedback |
Feedback form and target URL. |
page.useContactSearch |
Enables manual contact search by name when findContactWithName is implemented. |
page.disableContactCache |
Forces phone-number contact lookups to refresh server-side account contact data instead of returning cached account matches. Client-side local matched-contact cache can still be used. |
settings[] |
Connector-specific settings available under user/admin settings. |
Validation
The current manifest validator checks for:
- top-level
platforms - matching platform key
platform.auth.type- OAuth
authUrlandclientIdwhen auth type is OAuth auth.apiKeywhen auth type is API key- valid
environment.typewhen environment is present environment.selections[]for selectable environments- platform
name - arrays for
settings,contactTypes, andoverridewhen present
The Developer Console performs additional validation and should be treated as the preferred authoring surface.
Embed URLs
The embedUrls property lists the pages of the CRM's web application where App Connect should automatically appear. When a user navigates to a matching URL, the extension panel is opened without the user having to manually click the App Connect icon.
This is distinct from urlIdentifier, which controls when the App Connect quick-access button is visible in the browser toolbar. embedUrls controls when the panel opens automatically.
Values support * as a wildcard. Use it to match any subdomain or any path segment.
"embedUrls": [
"https://*.pipedrive.com/*"
]
All built-in connectors use a single wildcard pattern that matches the CRM's entire domain:
| CRM | embedUrls pattern |
|---|---|
| Pipedrive | https://*.pipedrive.com/* |
| Insightly | https://*.insightly.com/* |
| Clio | https://*.clio.com/* |
| Bullhorn | https://*.bullhornstaffing.com/* |
| NetSuite | https://*.app.netsuite.com/* |
| Google Sheets | https://docs.google.com/* |
You can supply multiple patterns if the CRM spans more than one domain, or if you want to restrict embedding to specific sections of the UI:
"embedUrls": [
"https://app.example.com/contacts/*",
"https://app.example.com/deals/*"
]
Server-side logging
The serverSideLogging property configures App Connect's server-side call logging service, which logs calls automatically on behalf of users without requiring them to interact with the extension.
| Name | Type | Description |
|---|---|---|
url |
string | The URL of the server-side logging endpoint on your connector. |
useAdminAssignedUserToken |
boolean | When true, the framework uses an admin-assigned token to make API calls on behalf of users rather than each user's individual OAuth token. |
enableUserMapping |
boolean | When true, the Admin settings in App Connect show a user-mapping UI that allows admins to map RingCentral users to CRM users. |
additionalFields |
array of object | (Optional) Connector-specific configuration fields shown in the Admin settings UI. Each element has the same structure as page.callLog.additionalFields. |
additionalFields for server-side logging
The additionalFields array under serverSideLogging defines extra fields that an administrator must fill in once when configuring server-side logging. These values are then available to the getServerLoggingSettings and updateServerLoggingSettings lifecycle hooks.
Common uses include collecting CRM API credentials (username and password) that the server uses to log calls on behalf of all users.
"serverSideLogging": {
"url": "https://my-connector.example.com",
"useAdminAssignedUserToken": false,
"enableUserMapping": true,
"additionalFields": [
{
"const": "apiUsername",
"title": "CRM API Username",
"type": "inputField"
},
{
"const": "apiPassword",
"title": "CRM API Password",
"type": "inputField"
}
]
}
Manifest overrides
The override property allows you to define conditions under which certain manifest values are replaced with alternative values at runtime. This is primarily used to support regional CRM deployments. See Regional services for full documentation.
"override": [
{
"triggerType": "hostname",
"triggerValue": "au.app.clio.com",
"overrideObjects": [
{
"path": "auth.oauth.authUrl",
"value": "https://au.app.clio.com/oauth/authorize"
}
]
}
]