Referência da API

API de OAuth

OAuth sign-in, tokens e revogação

Referência HTTP. Gerada a partir do contrato backend. Navegue pelos endpoints abaixo ou baixe o OpenAPI.

Este grupo tem 10 operações, geradas a partir de api/openapi.yaml. Filtre por caminho, ação ou autenticação. Cada endpoint lista suas entradas; expanda-o para ver um modelo de solicitação e os códigos de resposta. Os modelos precisam de seus próprios valores e de um corpo válido conforme o esquema.

Substitua os espaços reservados em maiúsculas pelos seus valores. Para uma solicitação JSON, salve um corpo que corresponda ao esquema em request.json. Exemplos de cookies usam um jar local de cookies de uma sessão autenticada.

OAuth sign-in, tokens e revogação

POST/oauth/token

Token Oauth

Ponto de token OAuth 2.0 (RFC 6749 §3.2) para JWTs de agentes. grant_type refresh_token gira uma credencial opaca de atualização (RFC 9700): cada uso retorna um novo par; um request_id (16 a 200 caracteres) faz uma nova tentativa exata retornar a mesma resposta enquanto sua credencial e concessão estiverem ativas e o sucessor ainda for atual, sem prazo de tentativa por tempo decorrido.

Qualquer outro reuso de um token de atualização substituído revoga toda a família (invalid_grant). Uma associação ou projeto selecionado removido retorna invalid_scope com error_description começando com "project_selection_inactive:"; a credencial de atualização não é consumida.

Descubra associações ativas com GET /api/projects, intercepte-as com a seleção previamente consentida e tente novamente com projects= e um novo request_id. Nunca finalize a família de atualizações para este erro de seleção.

O estreitamento do escopo solicitado aplica-se independentemente a cada projeto e à autoridade de identidade; um escopo explícito sem identidade exclui a autoridade de identidade. grant_type urn:ietf:params:oauth:grant-type:token-exchange (RFC 8693) com subject_token_type urn:screenrig:token-type:identity-credential ou urn:screenrig:token-type:project-token responde unsupported_token_type: credenciais legadas foram aposentadas, e a instalação faz login novamente com screenrig login. resource (RFC 8707) é https://api.<domain>/api ou ausente; projects seleciona até 64 IDs de projeto consentidos.

Omissão seleciona tudo apenas quando o conjunto cabe; caso contrário, o cliente deve escolher um subconjunto. project_id seleciona um durante a liberação de compatibilidade. A concessão de um app conectado tem o recurso único https://api.<domain>/mcp, que um refresh pode omitir.

Clientes são públicos (apenas client_id), ou um app conectado cujo metadata declara private_key_jwt autentica com client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer e um client_assertion (iss e sub seu client_id, aud o emissor ou este endpoint como uma string, exp dentro de 5 minutos de iat, um jti usado uma vez, kid nomeando uma de suas chaves; EdDSA, ES256 ou RS256). grant_type authorization_code resgata o código de um app conectado em 60 segundos com o redirect_uri exato e o PKCE code_verifier; resource deve estar ausente ou ser o autorizado; um segundo resgate revoga a concessão criada pelo código. grant_type client_credentials é de um cliente de serviço: autentica com uma client assertion (uma de suas chaves registradas) ou seu segredo por HTTP Basic (client_secret_basic; segredo no corpo é recusado) e recebe um token de serviço de 15 minutos para seu projeto, audiência api ou (resource https://api.<domain>/mcp) mcp, escopo dentro de suas capacidades e nível de acesso, e sem refresh token; 600 por cliente por hora.

Erros são JSON RFC 6749 {error, error_description} com Cache-Control no-store; enquanto o servidor não os emite responde temporarily_unavailable (503).

Limites de taxa respondem 429 rate_limited com Retry-After: 1200 solicitações por endereço de cliente por hora neste e no endpoint de revogação, 60 atualizações por concessão por hora, 30 trocas por credencial legada por hora. grant_type urn:ietf:params:oauth:grant-type:device_code (RFC 8628 §3.4) consulta um login de dispositivo: authorization_pending até que uma pessoa aprove, slow_down quando consultado antes do intervalo (que então cresce 5 segundos), access_denied quando negado, expired_token após 10 minutos, então a resposta do token.

Uma nova instalação recebe um par de tokens; um login iniciado com o token de acesso de uma instalação existente adiciona o projeto aprovado a essa concessão e recebe apenas um token de acesso, sem rotacionar o token de atualização. Consultar o mesmo device_code novamente retorna a mesma resposta até que a concessão rotacione pela primeira vez ou 10 minutos se passem, então invalid_grant.

Apenas POST, codificado em formulário, sem string de consulta.

Autenticação
nenhum
Corpo da solicitação
object
ID da operação
oauthToken

Campos do corpo da solicitação

CampoDescrição
grant_type (obrigatório, string)Permitido: "authorization_code", "client_credentials", "refresh_token", "urn:ietf:params:oauth:grant-type:token-exchange", "urn:ietf:params:oauth:grant-type:device_code"
client_id (opcional, string)
client_assertion_type (opcional, string)Permitido: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
client_assertion (opcional, string)
código (opcional, string)
redirect_uri (opcional, string)
code_verifier (opcional, string)minLength: 43 maxLength: 128
refresh_token (opcional, string)
device_code (opcional, string)
request_id (opcional, string)minLength: 16 maxLength: 200
subject_token (opcional, string)
subject_token_type (opcional, string)Permitido: "urn:screenrig:token-type:identity-credential", "urn:screenrig:token-type:project-token"
escopo (opcional, string)
recurso (opcional, string)formato: "uri"
projects (opcional, string)IDs de projeto separados por espaço ou vírgula; omita para todos os projetos consentidos até o limite configurado (padrão 64). Não pode ser combinado com project_id.
project_id (opcional, string)
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'

Respostas

StatusSignificadoCorpo e cabeçalhos
200A resposta do token (RFC 6749 §5.1).OAuthTokenResponse (application/json)
padrãoUm erro RFC 6749 §5.2.OAuthError (application/json)
POST/oauth/device_authorization

Autorização de Dispositivo Oauth

RFC 8628 §3.1 autorização de dispositivo para `screenrig login`. scope é access:manage (padrão), access:propose ou access:read; project_id sugere o projeto que a pessoa aprova; name, agent_type, platform e version descrevem a instalação e são mostrados ao aprovador conforme relatado pelo dispositivo; install_source (opcional) indica de onde a instalação veio e é mantido no agente que a aprovação cria.

Sem Authorization inicia uma nova instalação. Com Authorization: Bearer e um token de acesso do agente com escopo de identidade, solicita adicionar um projeto à concessão dessa instalação, ou elevar um projeto Somente leitura para Gerenciar.

A pessoa insere user_code em verification_uri (ou segue verification_uri_complete) e aprova no dashboard; o dispositivo consulta o endpoint de token com device_code a cada intervalo de segundos.

Limites de taxa respondem 429 rate_limited com Retry-After: 10 por endereço de cliente por hora e 600 por hora para toda a frota, atrás dos endpoints de 1200 por endereço por hora. Erros são JSON RFC 6749 com Cache-Control no-store; enquanto o servidor não emitir, responde temporarily_unavailable (503). Apenas POST, codificado em formulário, sem query string.

Autenticação
nenhum
Corpo da solicitação
object
ID da operação
oauthDeviceAuthorization

Campos do corpo da solicitação

CampoDescrição
client_id (obrigatório, string)
escopo (opcional, string)Permitido: "access:manage", "access:propose", "access:read"
project_id (opcional, string)maxLength: 200
nome (opcional, string)maxLength: 80
agent_type (opcional, string)maxLength: 32
plataforma (opcional, string)maxLength: 80
version (opcional, string)maxLength: 40
install_source (opcional, string)

Opcional: de onde a integração foi instalada, o host e, depois de uma barra, o marketplace (claude/screenrig, codex/screenrig, grok/screenrig), ou apenas um host como npm. Um valor ausente ou com formato incorreto é ignorado e nunca faz a requisição falhar. padrão: "^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$"

Modelo e respostas da solicitação
shell · modelo de requisição
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'

Respostas

StatusSignificadoCorpo e cabeçalhos
200A resposta de autorização do dispositivo (RFC 8628 §3.2).objeto (application/json)
padrãoUm erro RFC 6749 §5.2.OAuthError (application/json)
GET/oauth/authorize

Autorizar Oauth

Ponto de autorização OAuth 2.0 para apps conectados (clientes MCP). client_id é uma URL de documento de metadados de ID de cliente (https, porta 443, buscada sem redirecionamentos, 64 KiB e 5 segundos no máximo, apenas endereços públicos) ou um id de cliente registrado.

A solicitação é validada nesta ordem: o cliente, o redirect_uri exato (um redirecionamento http de loopback para 127.0.0.1, [::1] ou localhost corresponde em qualquer porta), response_type code, code_challenge com code_challenge_method S256, resource (https://api.<domain>/mcp, outro recurso MCP cujos metadados de recurso protegido nomeiam este servidor, ou ausente) e então scope (access:read, o padrão, access:propose, access:manage e nomes de capacidades).

Um cliente desconhecido ou redirect_uri responde com uma página de erro HTML e nunca redireciona; qualquer erro posterior redireciona para o redirect_uri com error, error_description, state e iss (RFC 9207).

Sucesso responde 303 para a página de consentimento do dashboard, onde uma pessoa escolhe o projeto, o nível de acesso (Somente leitura por padrão, Propor ou Gerenciar) e as capacidades; aprovação redireciona com código, estado e iss. 30 solicitações por endereço cliente por minuto.

Autenticação
nenhum
Corpo da solicitação
nenhum
ID da operação
oauthAuthorize

Parâmetros

NomeEnviarObrigatório?Descrição
client_idconsultaobrigatório
redirect_uriconsultaobrigatório
response_typeconsultaobrigatório
code_challengeconsultaobrigatório
code_challenge_methodconsultaobrigatório
estadoconsultaopcional
recursoconsultaopcional
escopoconsultaopcional
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request GET 'https://api.screenrig.ai/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=RESPONSE_TYPE&code_challenge=CODE_CHALLENGE&code_challenge_method=CODE_CHALLENGE_METHOD'

Respostas

StatusSignificadoCorpo e cabeçalhos
303Para a página de consentimento, ou de volta ao redirect_uri do cliente com erro, estado e iss.sem corpo
400Uma página de erro HTML para um cliente desconhecido ou redirect_uri; nunca um redirecionamento.string (text/html)
429Muitas solicitações de autorização deste endereço.sem corpo
POST/oauth/revoke

Revogar Oauth

Revogação RFC 7009. Uma credencial de atualização opaca (ou um JWT de atualização de versão anterior), ou um JWT de acesso de agente, emitido para o cliente revoga sua concessão; os tokens de acesso da concessão são recusados em segundos. Um token desconhecido, expirado ou estrangeiro também responde 200. Apenas POST, codificado em formulário.

Autenticação
nenhum
Corpo da solicitação
object
ID da operação
oauthRevoke

Campos do corpo da solicitação

CampoDescrição
client_id (opcional, string)
client_assertion_type (opcional, string)Permitido: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
client_assertion (opcional, string)
token (obrigatório, string)
token_type_hint (opcional, string)
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'

Respostas

StatusSignificadoCorpo e cabeçalhos
200Revogado ou nada a revogar.sem corpo
padrãoUm erro RFC 6749 §5.2.OAuthError (application/json)
GET/.well-known/oauth-authorization-server

Metadados do Servidor de Autorização Oauth

Metadados do servidor de autorização RFC 8414 para o servidor de autorização do agente.

Autenticação
nenhum
Corpo da solicitação
nenhum
ID da operação
oauthAuthorizationServerMetadata
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'

Respostas

StatusSignificadoCorpo e cabeçalhos
200O documento de metadados.objeto (application/json)
GET/.well-known/oauth-protected-resource/mcp

MCP de Recurso Protegido Oauth

Metadados de recurso protegido RFC 9728 para /mcp, nomeados pelo resource_metadata de cada /mcp 401.

Autenticação
nenhum
Corpo da solicitação
nenhum
ID da operação
oauthProtectedResourceMCP
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'

Respostas

StatusSignificadoCorpo e cabeçalhos
200O documento de metadados.objeto (application/json)
GET/.well-known/oauth-protected-resource/api

API de Recurso Protegido Oauth

Metadados de recurso protegido RFC 9728 para /api.

Autenticação
nenhum
Corpo da solicitação
nenhum
ID da operação
oauthProtectedResourceAPI
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'

Respostas

StatusSignificadoCorpo e cabeçalhos
200O documento de metadados.objeto (application/json)
GET/api/oauth/authorizations/{id}

Obter autorização OAuth do dashboard

Uma autorização pendente de app conectado para a página de consentimento: o nome e domínio do cliente conforme declarados em seus metadados (nenhum logo é buscado), se é um cliente registrado, o host de redirecionamento, e o nível de acesso e capacidades solicitadas. Autorizações desconhecidas, expiradas ou resolvidas são not_found.

Autenticação
dashboardSession
Corpo da solicitação
nenhum
ID da operação
getDashboardOAuthAuthorization

Parâmetros

NomeEnviarObrigatório?Descrição
idcaminhoobrigatório
Modelo e respostas da solicitação
shell · modelo de requisição
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'

Respostas

StatusSignificadoCorpo e cabeçalhos
200A autorização.OAuthAuthorization (application/json)
padrão

Resposta de problema estável RFC 9457. Um 421 server_draining tem Retry-After de 1 segundo, um 500 not_ready ou dependency_unavailable tem 5, e um 500 manifest_degraded tem 60, a menos que o handler defina valor mais específico.

Problema (application/problem+json)
POST/api/oauth/authorizations/{id}/approve

Aprovar autorização OAuth do dashboard

Aprova um app conectado para um dos projetos da pessoa após prova recente (tipo oauth_authorization_approval, sujeito o id da autorização): cria a identidade do agente do app (tipo mcp_client, a pessoa responsável), sua associação e concessão com o acesso escolhido (ler ou gerenciar; omitido mantém o nível solicitado, padrão ler) e capacidades (subconjunto do solicitado), e responde o redirect_uri, carregando código, estado e iss, para onde a página navega.

O código é válido por 60 segundos. Um membro limitado a telas não conecta agentes, não emite credenciais nem gerencia as pessoas do projeto: outside_screen_scope (peça ao proprietário do projeto).

Autenticação
dashboardSession
Corpo da solicitação
DashboardAgentAction
ID da operação
approveDashboardOAuthAuthorization

Parâmetros

NomeEnviarObrigatório?Descrição
idcaminhoobrigatório

Campos do corpo da solicitação

CampoDescrição
project_id (obrigatório, string)minLength: 1
proof (opcional, DashboardProof)
capacidades (opcional, array)

Opcional apenas na conexão do agente e aprovação do app conectado. Omitido aprova o conjunto completo solicitado; um subconjunto não vazio das capacidades da conexão restringe a credencial concedida; qualquer outra coisa é invalid_request.

user_code (opcional, string)

Obrigatório ao aprovar um login de dispositivo (fluxo device): o código que a pessoa confirma corresponde ao terminal. Uma incompatibilidade é agent_connection_code_mismatch; o quinto expira o login (agent_connection_expired). Ignorado caso contrário. maxLength: 32

acesso (opcional, string)

O nível de acesso com que um login de dispositivo ou app conectado é aprovado (Somente leitura, Propor ou Gerenciar); omitido mantém o nível solicitado. Ignorado para outras conexões. Uma pessoa que não pode aprovar revisões não pode aprovar Gerenciar (403 approver_required). Permitido: "read", "propose", "manage"

Modelo e respostas da solicitação
shell · modelo de requisição
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID/approve'

Respostas

StatusSignificadoCorpo e cabeçalhos
200O redirecionamento de volta para o aplicativo.OAuthAuthorizationRedirect (application/json)
403

outside_screen_scope - o chamador é limitado a telas e a tela, pasta de telas, seletor ou público que a requisição nomeia ou alcança está fora delas (docs/screen-scope.md). Um id fora do escopo e um id que não existe recebem a mesma resposta; errors[0].screen_scope traz o escopo do chamador, e a escrita é recusada por inteiro, nunca restringida.

Problema (application/problem+json)
padrão

Resposta de problema estável RFC 9457. Um 421 server_draining tem Retry-After de 1 segundo, um 500 not_ready ou dependency_unavailable tem 5, e um 500 manifest_degraded tem 60, a menos que o handler defina valor mais específico.

Problema (application/problem+json)
POST/api/oauth/authorizations/{id}/deny

Negar autorização OAuth do Dashboard

Nega um app conectado após prova recente (kind oauth_authorization_denial) e responde o redirect_uri, com error=access_denied, state e iss, para o qual a página navega. Um membro limitado a telas não conecta agentes, não emite credenciais nem gerencia as pessoas do projeto: outside_screen_scope (peça ao proprietário do projeto).

Autenticação
dashboardSession
Corpo da solicitação
DashboardAgentAction
ID da operação
denyDashboardOAuthAuthorization

Parâmetros

NomeEnviarObrigatório?Descrição
idcaminhoobrigatório

Campos do corpo da solicitação

CampoDescrição
project_id (obrigatório, string)minLength: 1
proof (opcional, DashboardProof)
capacidades (opcional, array)

Opcional apenas na conexão do agente e aprovação do app conectado. Omitido aprova o conjunto completo solicitado; um subconjunto não vazio das capacidades da conexão restringe a credencial concedida; qualquer outra coisa é invalid_request.

user_code (opcional, string)

Obrigatório ao aprovar um login de dispositivo (fluxo device): o código que a pessoa confirma corresponde ao terminal. Uma incompatibilidade é agent_connection_code_mismatch; o quinto expira o login (agent_connection_expired). Ignorado caso contrário. maxLength: 32

acesso (opcional, string)

O nível de acesso com que um login de dispositivo ou app conectado é aprovado (Somente leitura, Propor ou Gerenciar); omitido mantém o nível solicitado. Ignorado para outras conexões. Uma pessoa que não pode aprovar revisões não pode aprovar Gerenciar (403 approver_required). Permitido: "read", "propose", "manage"

Modelo e respostas da solicitação
shell · modelo de requisição
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID/deny'

Respostas

StatusSignificadoCorpo e cabeçalhos
200O redirecionamento de volta para o aplicativo.OAuthAuthorizationRedirect (application/json)
403

outside_screen_scope - o chamador é limitado a telas e a tela, pasta de telas, seletor ou público que a requisição nomeia ou alcança está fora delas (docs/screen-scope.md). Um id fora do escopo e um id que não existe recebem a mesma resposta; errors[0].screen_scope traz o escopo do chamador, e a escrita é recusada por inteiro, nunca restringida.

Problema (application/problem+json)
padrão

Resposta de problema estável RFC 9457. Um 421 server_draining tem Retry-After de 1 segundo, um 500 not_ready ou dependency_unavailable tem 5, e um 500 manifest_degraded tem 60, a menos que o handler defina valor mais específico.

Problema (application/problem+json)