For server-to-server integrations, use the OAuth 2.0 client-credentials flow. When you create a key in Communicate, save both values shown once:
- Client ID — the key ID.
- Client secret — the
ck_ secret.
Request an access token
Choose the smallest scopes the integration needs:
The response contains a bearer token valid for one hour:
Use the access token on API requests:
Requested scopes must be a subset of the permissions selected when the key was created. Revoking or narrowing the source key takes effect immediately, including for access tokens already issued.
Access tokens are resource-bound. REST tokens default to https://app.communicate.so/api/v1. To connect an MCP client, request a separate token for https://app.communicate.so/mcp as shown in Connect with MCP. REST tokens cannot call MCP, and MCP tokens cannot call REST.
Direct API keys
Existing integrations can continue using the ck_ secret directly. Its effective permissions are the key’s complete scope set.
Treat API keys as server-side secrets. Do not place them in browser code, mobile apps, public repositories, logs, or URLs.
Keys are workspace-bound. A credential can access only agents in its workspace, and revoked keys stop working immediately.
Direct ck_ keys are accepted only by the REST API. The MCP endpoint requires a short-lived OAuth access token.
Missing and invalid bearer credentials return 401 with a WWW-Authenticate challenge and a structured JSON error.