OAuth 2.1
Для приложений, действующих от имени пользователя (Zapier, n8n, чат-коннекторы): код авторизации с PKCE, refresh-токены, согласие с выбором организации. Для сервер-сервер API-ключ остаётся более простым путём.
Когда OAuth, когда ключи
API-ключи (capi_…) принадлежат организации и подходят для скриптов и серверов. OAuth-токены принадлежат пользователю, который в окне согласия открывает одну организацию — так конечные пользователи подключают свою организацию claritos к стороннему приложению без копирования ключей. Оба пути используют те же scopes и конечные точки.
Код авторизации + PKCE
Клиент направляет пользователя на авторизацию (PKCE обязателен, S256), после согласия получает код на своём redirect-URI и обменивает его на конечной точке токена на токен доступа (1 час) и refresh-токен (30 дней). Конфиденциальные клиенты передают client_secret; публичные — только code_verifier.
GET https://www.claritos.io/api/auth/oauth2/authorize
?response_type=code
&client_id=CLIENT_ID
&redirect_uri=https://app.example.com/callback
&scope=openid%20offline_access%20contacts:read%20invoices:write
&state=RANDOM
&code_challenge=BASE64URL(SHA256(code_verifier))
&code_challenge_method=S256curl -X POST https://www.claritos.io/api/auth/oauth2/token \
-d grant_type=authorization_code \
-d code=CODE_FROM_CALLBACK \
-d redirect_uri=https://app.example.com/callback \
-d client_id=CLIENT_ID -d client_secret=CLIENT_SECRET \
-d code_verifier=CODE_VERIFIER{
"access_token": "…",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "…",
"scope": "openid offline_access contacts:read invoices:write"
}Согласие с выбором организации
Пользователь видит клиента и запрошенные разрешения и выбирает организацию, к которой относится доступ. Ровно одна на подключение; разрешения действуют в пределах роли пользователя в организации (членство проверяется при каждом вызове). Scopes клиентских данных дополнительно требуют включения организации. Начиная с 1.26.0 пользователь может снимать отдельные разрешения в согласии; доступ действует только для выбранных scopes, scopes клиентских данных по умолчанию сняты. Пользователи видят свои разрешения в профиле в разделе «Подключённые приложения» и могут отозвать их в любой момент.
Вызов API
Токен доступа передаётся как Bearer-токен, как и ключ. GET /me показывает организацию, scopes и лимиты токена.
curl https://www.claritos.io/api/v1/me -H "Authorization: Bearer ACCESS_TOKEN"Обновление токенов
Когда токен доступа истекает, конечная точка токена с grant_type=refresh_token возвращает новую пару. Refresh-токены ротируются.
curl -X POST https://www.claritos.io/api/auth/oauth2/token \
-d grant_type=refresh_token -d refresh_token=REFRESH_TOKEN \
-d client_id=CLIENT_ID -d client_secret=CLIENT_SECRETDiscovery
Метаданные по RFC 8414 (сервер авторизации) и RFC 9728 (защищённый ресурс) лежат в корне; конфигурация OpenID дополнительно по пути auth. Клиентам с поддержкой discovery (MCP-коннекторы) достаточно базового URL.
GET https://www.claritos.io/.well-known/oauth-authorization-server
GET https://www.claritos.io/.well-known/oauth-protected-resource
GET https://www.claritos.io/api/auth/.well-known/openid-configurationДинамическая регистрация клиентов
Клиенты могут регистрироваться сами (RFC 7591) — так подключаются claude.ai, ChatGPT и другие MCP-клиенты без ручной настройки. Зарегистрированные клиенты отображаются в системном разделе, где их можно отключить.
curl -X POST https://www.claritos.io/api/auth/oauth2/register \
-H "Content-Type: application/json" \
-d '{ "client_name": "My MCP client", "redirect_uris": ["https://client.example.com/cb"], "token_endpoint_auth_method": "none", "grant_types": ["authorization_code","refresh_token"] }'Zapier, n8n, Make
Создайте клиента в системном разделе (укажите redirect-URI платформы), сохраните там client_id/client_secret, URL авторизации /api/auth/oauth2/authorize, URL токена /api/auth/oauth2/token, scopes по необходимости (например contacts:write invoices:read). Включите PKCE, если платформа это поддерживает. Настройка по платформам — см. руководство «Webhooks» → Платформы.