S256 for both the REST API
and MCP. Applications act as the signed-in user. Do not use an admin session
cookie, a shared organization token, or an organization ID supplied by the
client.
Discover the authorization server
Start with the protected resource metadata:authorization_servers value identifies the authorization server. The
authorization-server metadata is available at:
Authorization flow
- Register the client through the advertised Dynamic Client Registration endpoint.
- Generate a PKCE verifier and its
S256challenge. - Send the user to the advertised authorization endpoint with
response_type=code, the registered redirect URI, the requested scopes, the PKCE challenge, andresource=$SILO_API_URL. - The user signs in, selects an active organization if needed, reviews the requested scopes, and grants access.
- Exchange the returned code at the advertised token endpoint using the original PKCE verifier.
- Send the access token as
Authorization: Bearer <token>to REST or MCP. - Request
offline_accessand store the returned refresh token securely when the connection must survive access-token expiry.
Scopes
Request only the scopes the integration needs.
Identity scopes
openid, profile, and email are supported.
offline_access enables refresh-token access.
OAuth scopes are an upper bound, not a replacement for Silo permissions. For
example, a token with crm:write still cannot update a company when the user no
longer has the corresponding CRM permission.