OpenAPI YAMLOpenAPI JSONproblemas YAMLVisão geral da API
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
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.
Campos do corpo da solicitação
| Campo | Descriçã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
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | A resposta do token (RFC 6749 §5.1). | OAuthTokenResponse (application/json) |
| padrão | Um erro RFC 6749 §5.2. | OAuthError (application/json) |
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.
Campos do corpo da solicitação
| Campo | Descriçã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
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | A resposta de autorização do dispositivo (RFC 8628 §3.2). | objeto (application/json) |
| padrão | Um erro RFC 6749 §5.2. | OAuthError (application/json) |
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.
Parâmetros
| Nome | Enviar | Obrigatório? | Descrição |
|---|---|---|---|
| client_id | consulta | obrigatório | |
| redirect_uri | consulta | obrigatório | |
| response_type | consulta | obrigatório | |
| code_challenge | consulta | obrigatório | |
| code_challenge_method | consulta | obrigatório | |
| estado | consulta | opcional | |
| recurso | consulta | opcional | |
| escopo | consulta | opcional |
Modelo e respostas da solicitaçã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
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 303 | Para a página de consentimento, ou de volta ao redirect_uri do cliente com erro, estado e iss. | sem corpo |
| 400 | Uma página de erro HTML para um cliente desconhecido ou redirect_uri; nunca um redirecionamento. | string (text/html) |
| 429 | Muitas solicitações de autorização deste endereço. | sem corpo |
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.
Campos do corpo da solicitação
| Campo | Descriçã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
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | Revogado ou nada a revogar. | sem corpo |
| padrão | Um erro RFC 6749 §5.2. | OAuthError (application/json) |
Metadados do Servidor de Autorização Oauth
Metadados do servidor de autorização RFC 8414 para o servidor de autorização do agente.
Modelo e respostas da solicitação
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | O documento de metadados. | objeto (application/json) |
MCP de Recurso Protegido Oauth
Metadados de recurso protegido RFC 9728 para /mcp, nomeados pelo resource_metadata de cada /mcp 401.
Modelo e respostas da solicitação
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | O documento de metadados. | objeto (application/json) |
API de Recurso Protegido Oauth
Metadados de recurso protegido RFC 9728 para /api.
Modelo e respostas da solicitação
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | O documento de metadados. | objeto (application/json) |
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.
Parâmetros
| Nome | Enviar | Obrigatório? | Descrição |
|---|---|---|---|
| id | caminho | obrigatório |
Modelo e respostas da solicitação
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'Respostas
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | A 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) |
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).
Parâmetros
| Nome | Enviar | Obrigatório? | Descrição |
|---|---|---|---|
| id | caminho | obrigatório |
Campos do corpo da solicitação
| Campo | Descriçã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
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
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | O 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) |
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).
Parâmetros
| Nome | Enviar | Obrigatório? | Descrição |
|---|---|---|---|
| id | caminho | obrigatório |
Campos do corpo da solicitação
| Campo | Descriçã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
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
| Status | Significado | Corpo e cabeçalhos |
|---|---|---|
| 200 | O 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) |