format: md
Auth / OAuth API
Endpoints para autenticação OAuth 2.0, gerenciamento de tokens, device flow e trusted devices. Implementação PROXY (pass-through para Anthropic API).
format: md
POST /v1/oauth/token
POST /v1/oauth/token
Obtém tokens de acesso via Authorization Code Grant ou Refresh Token.
Retry: 2 tentativas (backoff de 500ms, 1000ms)
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Content-Type | application/json | Sim |
Request Body (authorization_code)
{
"grant_type": "authorization_code",
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"code": "auth_code_abc",
"code_verifier": "verifier_abc",
"redirect_uri": "https://claude.ai/oauth/callback"
}
| Campo | Tipo | Descrição |
|---|---|---|
grant_type | string | "authorization_code" |
client_id | string | UUID do cliente OAuth |
code | string | Código de autorização |
code_verifier | string | PKCE code verifier |
redirect_uri | string | URI de redirecionamento registrada |
Request Body (refresh_token)
{
"grant_type": "refresh_token",
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"refresh_token": "rt_abc",
"scope": "openid profile"
}
| Campo | Tipo | Descrição |
|---|---|---|
grant_type | string | "refresh_token" |
client_id | string | UUID do cliente OAuth |
refresh_token | string | Token de refresh |
scope | string | Escopos solicitados (opcional) |
Response
{
"access_token": "at_abc",
"refresh_token": "rt_abc",
"expires_in": 3600
}
| Campo | Tipo | Descrição |
|---|---|---|
access_token | string | Token de acesso JWT |
refresh_token | string | Token de refresh |
expires_in | number | Tempo de expiração em segundos |
Exemplo curl
curl -X POST https://api.anthropic.com/v1/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"code": "auth_code_abc",
"code_verifier": "verifier_abc",
"redirect_uri": "https://claude.ai/oauth/callback"
}'
Códigos de Erro
| Código | Significado |
|---|---|
400 | Bad request (grant inválido, parâmetros ausentes) |
401 | Não autorizado (client_id inválido) |
429 | Rate limit excedido |
format: md
POST /v1/oauth//authorize
POST /v1/oauth//authorize
Inicia o fluxo de autorização OAuth para uma organização específica.
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer <session_key> | Sim |
Parâmetros Path
| Parâmetro | Tipo | Descrição |
|---|---|---|
org_uuid | string | UUID da organização |
Request Body
{
"response_type": "code",
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"organization_uuid": "org_uuid",
"redirect_uri": "https://claude.ai/oauth/callback",
"scope": "openid profile",
"state": "state_abc",
"code_challenge": "challenge_abc",
"code_challenge_method": "S256"
}
| Campo | Tipo | Descrição |
|---|---|---|
response_type | string | "code" |
client_id | string | UUID do cliente OAuth |
organization_uuid | string | UUID da organização alvo |
redirect_uri | string | URI de redirecionamento |
scope | string | Escopos solicitados |
state | string | Estado opaco para proteção CSRF |
code_challenge | string | PKCE code challenge |
code_challenge_method | string | "S256" |
Response
{
"redirect_uri": "https://claude.ai/oauth/callback?code=auth_code_abc&state=state_abc"
}
| Campo | Tipo | Descrição |
|---|---|---|
redirect_uri | string | URI completa com code + state como query params |
Exemplo curl
curl -X POST https://api.anthropic.com/v1/oauth/org_abc/authorize \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SESSION_KEY" \
-d '{
"response_type": "code",
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"organization_uuid": "org_abc",
"redirect_uri": "https://claude.ai/oauth/callback",
"scope": "openid profile email",
"state": "state_abc",
"code_challenge": "challenge_abc",
"code_challenge_method": "S256"
}'
Códigos de Erro
| Código | Significado |
|---|---|
400 | Invalid request (parâmetros ausentes ou inválidos) |
401 | Não autorizado (session key inválida) |
format: md
POST /v1/oauth/device_authorization
POST /v1/oauth/device_authorization
Inicia o fluxo de autorização para dispositivos (device flow). Usado por clients sem navegador (ex: Claude Desktop, CLI).
Request Body
{
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"scope": "openid profile"
}
| Campo | Tipo | Descrição |
|---|---|---|
client_id | string | UUID do cliente OAuth |
scope | string | Escopos solicitados (opcional) |
Response
{
"device_code": "dc_abc",
"user_code": "ABC-123",
"verification_uri": "https://claude.com/device",
"expires_in": 900,
"interval": 5
}
| Campo | Tipo | Descrição |
|---|---|---|
device_code | string | Código do dispositivo para polling |
user_code | string | Código curto para o usuário digitar |
verification_uri | string | URI para o usuário visitar |
expires_in | number | Tempo de expiração em segundos (900s = 15min) |
interval | number | Intervalo mínimo entre polls em segundos |
Exemplo curl
curl -X POST https://api.anthropic.com/v1/oauth/device_authorization \
-H "Content-Type: application/json" \
-d '{
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
"scope": "openid profile"
}'
Códigos de Erro
| Código | Significado |
|---|---|
400 | Bad request (client_id ausente) |
429 | Rate limit excedido |
format: md
GET /api/oauth/profile
GET /api/oauth/profile
Recupera o perfil OAuth da organização associada ao token.
Timeout: 3s
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer <access_token> | Sim |
Response
{
"organization": {
"organization_type": "claude_pro",
"rate_limit_tier": "default"
}
}
| Campo | Tipo | Descrição |
|---|---|---|
organization.organization_type | string | Tipo do plano: "claude_max", "claude_pro", "claude_enterprise", "claude_team" |
organization.rate_limit_tier | string | Tier de rate limit: "default" |
Exemplo curl
curl https://api.anthropic.com/api/oauth/profile \
-H "Authorization: Bearer $ACCESS_TOKEN"
Códigos de Erro
| Código | Significado |
|---|---|
401 | Não autorizado (token inválido/expirado) |
403 | Proibido (sem permissão) |
429 | Rate limit excedido |
format: md
POST /api/oauth/claude_cli/create_api_key
POST /api/oauth/claude_cli/create_api_key
Cria uma nova API key para uso no Claude Code CLI.
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer <access_token> | Sim |
Request Body
Nenhum body necessário.
Response
<api_key_string>
Resposta em texto plano contendo a API key gerada.
Exemplo curl
curl -X POST https://api.anthropic.com/api/oauth/claude_cli/create_api_key \
-H "Authorization: Bearer $ACCESS_TOKEN"
Códigos de Erro
| Código | Significado |
|---|---|
401 | Não autorizado |
429 | Rate limit excedido |
500 | Erro interno do servidor |
format: md
GET /api/oauth/claude_cli/roles
GET /api/oauth/claude_cli/roles
Lista as roles disponíveis para o Claude Code CLI.
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer <access_token> | Sim |
Exemplo curl
curl https://api.anthropic.com/api/oauth/claude_cli/roles \
-H "Authorization: Bearer $ACCESS_TOKEN"
Códigos de Erro
| Código | Significado |
|---|---|
401 | Não autorizado |
429 | Rate limit excedido |
format: md
GET /.well-known/oauth-authorization-server
GET /.well-known/oauth-authorization-server
OIDC Discovery endpoint. Retorna metadados do servidor de autorização OAuth 2.0 / OpenID Connect.
Headers
Nenhum header específico necessário.
Response
{
"issuer": "https://api.anthropic.com",
"authorization_endpoint": "https://api.anthropic.com/v1/oauth/authorize",
"token_endpoint": "https://api.anthropic.com/v1/oauth/token",
"device_authorization_endpoint": "https://api.anthropic.com/v1/oauth/device_authorization",
"jwks_uri": "https://api.anthropic.com/.well-known/jwks.json",
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token", "urn:ietf:params:oauth:grant-type:device_code"],
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["none"],
"scopes_supported": ["openid", "profile", "email", "anthropic_api"],
"claims_supported": ["sub", "iss", "aud", "exp", "iat"]
}
Exemplo curl
curl https://api.anthropic.com/.well-known/oauth-authorization-server
Códigos de Erro
| Código | Significado |
|---|---|
404 | Well-known não configurado |
format: md
POST /api/auth/trusted_devices
POST /api/auth/trusted_devices
Registra um dispositivo confiável para autenticação sem fricção (ex: Claude Desktop).
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer <access_token> | Sim |
Request Body
{
"display_name": "Claude Desktop on MacBook Pro"
}
| Campo | Tipo | Descrição |
|---|---|---|
display_name | string | Nome amigável do dispositivo |
Response
<trusted_device_token>
Resposta em texto plano contendo o token do dispositivo confiável.
Exemplo curl
curl -X POST https://api.anthropic.com/api/auth/trusted_devices \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"display_name": "Claude Desktop on MacBook Pro"
}'
Códigos de Erro
| Código | Significado |
|---|---|
400 | Bad request (display_name ausente) |
401 | Não autorizado |
429 | Rate limit excedido |
format: md
Mapa de Implementação
| Endpoint | LiteLLM | Origem |
|---|---|---|
| POST /v1/oauth/token | PROXY | Anthropic API |
POST /v1/oauth/{org}/authorize | PROXY | Anthropic API |
| POST /v1/oauth/device_authorization | PROXY | Anthropic API |
| GET /api/oauth/profile | PROXY | Anthropic API |
| POST /api/oauth/claude_cli/create_api_key | PROXY | Anthropic API |
| GET /api/oauth/claude_cli/roles | PROXY | Anthropic API |
| GET /.well-known/oauth-authorization-server | PROXY | Anthropic API |
| POST /api/auth/trusted_devices | PROXY | Anthropic API |