OpenAPI YAMLOpenAPI JSONproblemas YAMLResumen de la API
Este grupo tiene 10 operaciones, generadas a partir de api/openapi.yaml. Filtre por ruta, acción o autenticación. Cada endpoint indica sus entradas; despliéguelo para ver una plantilla de solicitud y los códigos de respuesta. Las plantillas necesitan sus propios valores y un cuerpo válido según el esquema.
Reemplace los marcadores en mayúsculas con sus valores. Para una solicitud JSON, guarde un cuerpo que coincida con el esquema en request.json. Los ejemplos de cookies usan un frasco de cookies local de una sesión autenticada.
Inicio de sesión OAuth, tokens y revocación
Token Oauth
Punto de token OAuth 2.0 (RFC 6749 §3.2) para JWTs de agentes. grant_type refresh_token rota una credencial opaca de actualización (RFC 9700): cada uso devuelve un nuevo par; un request_id (16 a 200 caracteres) hace que un reintento exacto devuelva la misma respuesta mientras su credencial y concesión estén vigentes y el sucesor aún sea actual, sin un plazo de reintento por tiempo transcurrido.
Cualquier otro uso de un token de actualización reemplazado revoca toda la familia (invalid_grant). Una membresía o proyecto seleccionado eliminado devuelve invalid_scope con error_description que comienza con "project_selection_inactive:"; la credencial de actualización no se consume.
Descubra membresías activas con GET /api/projects, crúcelas con la selección previamente consentida y reintente con projects= y un nuevo request_id. Nunca termine la familia de actualizaciones por este error de selección.
La restricción del ámbito solicitado se aplica independientemente a cada proyecto y a la autoridad de identidad; un ámbito explícito sin identidad excluye la autoridad de identidad. grant_type urn:ietf:params:oauth:grant-type:token-exchange (RFC 8693) con subject_token_type urn:screenrig:token-type:identity-credential o urn:screenrig:token-type:project-token responde unsupported_token_type: las credenciales heredadas están retiradas, y la instalación inicia sesión de nuevo con screenrig login. resource (RFC 8707) es https://api.<domain>/api o está ausente; projects selecciona hasta 64 IDs de proyectos consentidos.
La omisión selecciona todo solo cuando el conjunto cabe; de lo contrario el cliente debe elegir un subconjunto. project_id selecciona uno durante la versión de compatibilidad. La concesión de una app conectada tiene el único recurso https://api.<domain>/mcp, que una actualización puede omitir.
Los clientes son públicos (solo client_id), o una app conectada cuyo metadata declara que private_key_jwt se autentica con client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer y un client_assertion (iss y sub son su client_id, aud el emisor o este endpoint como una cadena, exp dentro de 5 minutos de iat, un jti usado una vez, kid nombrando una de sus claves; EdDSA, ES256 o RS256). grant_type authorization_code canjea el código de una app conectada en 60 segundos con el redirect_uri exacto y el PKCE code_verifier; resource debe estar ausente o ser el autorizado; un segundo canje revoca el permiso creado por el código. grant_type client_credentials es de un cliente de servicio: se autentica con una afirmación de cliente (una de sus claves registradas) o su secreto por HTTP Basic (client_secret_basic; un secreto en el cuerpo es rechazado) y recibe un token de servicio de 15 minutos para su proyecto, audiencia api o (resource https://api.<domain>/mcp) mcp, scope dentro de sus capacidades y nivel de acceso, y sin token de actualización; 600 por cliente por hora.
Los errores son JSON {error, error_description} según RFC 6749 con Cache-Control no-store; mientras el servidor no lo emite responde temporarily_unavailable (503).
Los límites de frecuencia responden 429 rate_limited con Retry-After: 1200 solicitudes por dirección cliente por hora en este y el endpoint de revocación, 60 actualizaciones por concesión por hora, 30 intercambios por credencial heredada por hora. grant_type urn:ietf:params:oauth:grant-type:device_code (RFC 8628 §3.4) consulta un inicio de sesión de dispositivo: authorization_pending hasta que una persona lo apruebe, slow_down si se consulta antes del intervalo (que luego crece 5 segundos), access_denied cuando se niega, expired_token tras 10 minutos, luego la respuesta del token.
Una nueva instalación recibe un par de tokens; un inicio de sesión iniciado con el token de acceso de una instalación existente añade el proyecto aprobado a esa concesión y recibe solo un token de acceso, sin rotar el token de actualización. Consultar el mismo device_code otra vez devuelve la misma respuesta hasta que la concesión rota primero o pasan 10 minutos, luego invalid_grant.
Solo POST, codificado en formulario, sin cadena de consulta.
Campos del cuerpo de la solicitud
| Campo | Descripción |
|---|---|
| grant_type (requerido, cadena) | 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, cadena) | |
| client_assertion_type (opcional, cadena) | Permitido: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" |
| client_assertion (opcional, cadena) | |
| código (opcional, cadena) | |
| redirect_uri (opcional, cadena) | |
| code_verifier (opcional, cadena) | minLength: 43 maxLength: 128 |
| refresh_token (opcional, cadena) | |
| device_code (opcional, cadena) | |
| request_id (opcional, cadena) | minLength: 16 maxLength: 200 |
| subject_token (opcional, cadena) | |
| subject_token_type (opcional, cadena) | Permitido: "urn:screenrig:token-type:identity-credential", "urn:screenrig:token-type:project-token" |
| alcance (opcional, cadena) | |
| recurso (opcional, cadena) | formato: "uri" |
| projects (opcional, cadena) | IDs de proyectos separados por espacios o comas; omita para todos los proyectos consentidos hasta el límite configurado (por defecto 64). No se puede combinar con project_id. |
| project_id (opcional, cadena) |
Plantilla y respuestas de solicitud
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | La respuesta del token (RFC 6749 §5.1). | OAuthTokenResponse (application/json) |
| predeterminado | Un error RFC 6749 §5.2. | OAuthError (application/json) |
Autorización de dispositivo Oauth
Autorización de dispositivo RFC 8628 §3.1 para `screenrig login`. scope es access:manage (el predeterminado), access:propose o access:read; project_id sugiere el proyecto que la persona aprueba; name, agent_type, platform y version describen la instalación y se muestran al aprobador según lo reportado por el dispositivo; install_source (opcional) indica desde dónde se instaló y se conserva en el agente que crea la aprobación.
Sin Authorization inicia una nueva instalación. Con Authorization: Bearer y un token de acceso de agente que lleva el alcance de identidad, solicita añadir un proyecto a la concesión de esa instalación, o elevar un proyecto Solo lectura a Administrar.
La persona ingresa user_code en verification_uri (o sigue verification_uri_complete) y lo aprueba en el panel; el dispositivo consulta el endpoint token con device_code cada interval segundos.
Los límites de frecuencia responden 429 rate_limited con Retry-After: 10 por dirección cliente por hora y 600 por hora en toda la flota, detrás de los 1200 por dirección por hora de los endpoints. Los errores son JSON RFC 6749 con Cache-Control no-store; mientras el servidor no emita responde temporarily_unavailable (503). Solo POST, codificado en formulario, sin cadena de consulta.
Campos del cuerpo de la solicitud
| Campo | Descripción |
|---|---|
| client_id (requerido, cadena) | |
| alcance (opcional, cadena) | Permitido: "access:manage", "access:propose", "access:read" |
| project_id (opcional, cadena) | maxLength: 200 |
| nombre (opcional, cadena) | maxLength: 80 |
| agent_type (opcional, cadena) | maxLength: 32 |
| plataforma (opcional, cadena) | maxLength: 80 |
| version (opcional, cadena) | maxLength: 40 |
| install_source (opcional, cadena) | Opcional, el lugar desde donde se instaló la integración: el host y, después de una barra, el marketplace (claude/screenrig, codex/screenrig, grok/screenrig), o un host solo, como npm. Un valor ausente o con forma incorrecta se ignora y nunca hace fallar la solicitud. pattern: "^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$" |
Plantilla y respuestas de solicitud
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | La respuesta de autorización del dispositivo (RFC 8628 §3.2). | objeto (application/json) |
| predeterminado | Un error RFC 6749 §5.2. | OAuthError (application/json) |
Autorizar Oauth
Punto de autorización OAuth 2.0 para apps conectadas (clientes MCP). client_id es una URL de documento de metadatos de ID de cliente (https, puerto 443, sin redirecciones, máximo 64 KiB y 5 segundos, solo direcciones públicas) o un id de cliente registrado.
La solicitud se valida en este orden: el cliente, el redirect_uri exacto (una redirección http de loopback a 127.0.0.1, [::1] o localhost coincide en cualquier puerto), response_type code, code_challenge con code_challenge_method S256, resource (https://api.<domain>/mcp, otro recurso MCP cuyos metadatos de recurso protegido nombran este servidor, o ausente) y luego scope (access:read, el predeterminado, access:propose, access:manage y nombres de capacidades).
Un cliente desconocido o redirect_uri responde con una página de error HTML y nunca redirige; cualquier error posterior redirige al redirect_uri con error, error_description, state e iss (RFC 9207).
El éxito responde con 303 a la página de consentimiento del panel, donde una persona elige el proyecto, el nivel de acceso (Solo lectura por defecto, Proponer o Administrar) y las capacidades; la aprobación redirige con código, estado e iss. 30 solicitudes por dirección cliente por minuto.
Parámetros
| Nombre | Enviar | ¿Requerido? | Descripción |
|---|---|---|---|
| client_id | consulta | requerido | |
| redirect_uri | consulta | requerido | |
| response_type | consulta | requerido | |
| code_challenge | consulta | requerido | |
| code_challenge_method | consulta | requerido | |
| estado | consulta | opcional | |
| recurso | consulta | opcional | |
| alcance | consulta | opcional |
Plantilla y respuestas de solicitud
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'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 303 | A la página de consentimiento, o de regreso al redirect_uri del cliente con error, estado e iss. | sin cuerpo |
| 400 | Una página de error HTML para un cliente desconocido o redirect_uri; nunca una redirección. | cadena (text/html) |
| 429 | Demasiadas solicitudes de autorización desde esta dirección. | sin cuerpo |
Revocar Oauth
Revocación RFC 7009. Una credencial de actualización opaca (o un JWT de actualización de versión anterior), o un JWT de acceso de agente, emitidos al cliente revocan su concesión; los tokens de acceso de la concesión se rechazan en segundos. Un token desconocido, expirado o extranjero también responde 200. Solo POST, codificado en formulario.
Campos del cuerpo de la solicitud
| Campo | Descripción |
|---|---|
| client_id (opcional, cadena) | |
| client_assertion_type (opcional, cadena) | Permitido: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" |
| client_assertion (opcional, cadena) | |
| token (requerido, cadena) | |
| token_type_hint (opcional, cadena) |
Plantilla y respuestas de solicitud
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | Revocado, o nada que revocar. | sin cuerpo |
| predeterminado | Un error RFC 6749 §5.2. | OAuthError (application/json) |
Metadatos del servidor de autorización Oauth
Metadatos del servidor de autorización RFC 8414 para el servidor de autorización del agente.
Plantilla y respuestas de solicitud
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | El documento de metadatos. | objeto (application/json) |
MCP de recurso protegido Oauth
Metadatos de recurso protegido RFC 9728 para /mcp, nombrados por resource_metadata de cada /mcp 401.
Plantilla y respuestas de solicitud
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | El documento de metadatos. | objeto (application/json) |
API de recurso protegido Oauth
Metadatos de recurso protegido RFC 9728 para /api.
Plantilla y respuestas de solicitud
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | El documento de metadatos. | objeto (application/json) |
Obtener autorización OAuth en dashboard
Una autorización pendiente de aplicación conectada para la página de consentimiento: el nombre y dominio del cliente según los declara su metadato (nunca se obtiene un logo), si es un cliente registrado, el host de redirección, y el nivel de acceso y capacidades solicitadas. Las autorizaciones desconocidas, expiradas o resueltas son not_found.
Parámetros
| Nombre | Enviar | ¿Requerido? | Descripción |
|---|---|---|---|
| id | ruta | requerido |
Plantilla y respuestas de solicitud
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | La autorización. | OAuthAuthorization (application/json) |
| predeterminado | Respuesta estable RFC 9457 a problemas. Un 421 server_draining lleva Retry-After de 1 segundo, un 500 not_ready o dependency_unavailable lleva 5, y un 500 manifest_degraded lleva 60, a menos que el manejador establezca un valor más específico. | Problema (application/problem+json) |
Aprobar autorización OAuth en dashboard
Aprueba una aplicación conectada para uno de los proyectos de la persona tras una prueba reciente (tipo oauth_authorization_approval, sujeto el id de autorización): crea la identidad del agente de la aplicación (tipo agente mcp_client, la persona responsable), su membresía y su concesión con el acceso elegido (leer o administrar; omitido mantiene el nivel solicitado, que por defecto es leer) y capacidades (un subconjunto de lo solicitado), y responde con redirect_uri, que lleva código, estado e iss, a la que la página navega.
El código es válido durante 60 segundos. Un miembro limitado a pantallas no conecta agentes, no emite credenciales ni administra a las personas del proyecto: outside_screen_scope (pida al propietario del proyecto).
Parámetros
| Nombre | Enviar | ¿Requerido? | Descripción |
|---|---|---|---|
| id | ruta | requerido |
Campos del cuerpo de la solicitud
| Campo | Descripción |
|---|---|
| project_id (requerido, cadena) | minLength: 1 |
| proof (opcional, DashboardProof) | |
| capacidades (opcional, arreglo) | Solo opcional en conexión de agente y aprobación de app conectada. Omitido aprueba el conjunto completo solicitado; un subconjunto no vacío de las capacidades de la conexión restringe la credencial otorgada; cualquier otra cosa es invalid_request. |
| user_code (opcional, cadena) | Requerido al aprobar un inicio de sesión de dispositivo (flujo dispositivo): el código que la persona confirma coincide con el terminal. Una discrepancia es agent_connection_code_mismatch; el quinto expira el inicio de sesión (agent_connection_expired). Ignorado de otro modo. maxLength: 32 |
| acceso (opcional, cadena) | El nivel de acceso con que se aprueba un inicio de sesión de dispositivo o una app conectada (Solo lectura, Proponer o Administrar); omitido mantiene el nivel solicitado. Ignorado para otras conexiones. Una persona que no puede aprobar revisiones no puede aprobar Administrar (403 approver_required). Permitido: "read", "propose", "manage" |
Plantilla y respuestas de solicitud
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'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | La redirección de regreso a la aplicación. | OAuthAuthorizationRedirect (application/json) |
| 403 | outside_screen_scope - el llamador está limitado a pantallas y la pantalla, carpeta de pantallas, selector o audiencia que nombra o alcanza la solicitud está fuera de ellas (docs/screen-scope.md). Un id fuera del alcance y un id que no existe reciben la misma respuesta; errors[0].screen_scope lleva el alcance del llamador, y la escritura se rechaza por completo, nunca se acota. | Problema (application/problem+json) |
| predeterminado | Respuesta estable RFC 9457 a problemas. Un 421 server_draining lleva Retry-After de 1 segundo, un 500 not_ready o dependency_unavailable lleva 5, y un 500 manifest_degraded lleva 60, a menos que el manejador establezca un valor más específico. | Problema (application/problem+json) |
Negar autorización OAuth del Dashboard
Deniega una app conectada tras una prueba reciente (kind oauth_authorization_denial) y responde el redirect_uri, con error=access_denied, state e iss, al que navega la página. Un miembro limitado a pantallas no conecta agentes, no emite credenciales ni administra a las personas del proyecto: outside_screen_scope (pida al propietario del proyecto).
Parámetros
| Nombre | Enviar | ¿Requerido? | Descripción |
|---|---|---|---|
| id | ruta | requerido |
Campos del cuerpo de la solicitud
| Campo | Descripción |
|---|---|
| project_id (requerido, cadena) | minLength: 1 |
| proof (opcional, DashboardProof) | |
| capacidades (opcional, arreglo) | Solo opcional en conexión de agente y aprobación de app conectada. Omitido aprueba el conjunto completo solicitado; un subconjunto no vacío de las capacidades de la conexión restringe la credencial otorgada; cualquier otra cosa es invalid_request. |
| user_code (opcional, cadena) | Requerido al aprobar un inicio de sesión de dispositivo (flujo dispositivo): el código que la persona confirma coincide con el terminal. Una discrepancia es agent_connection_code_mismatch; el quinto expira el inicio de sesión (agent_connection_expired). Ignorado de otro modo. maxLength: 32 |
| acceso (opcional, cadena) | El nivel de acceso con que se aprueba un inicio de sesión de dispositivo o una app conectada (Solo lectura, Proponer o Administrar); omitido mantiene el nivel solicitado. Ignorado para otras conexiones. Una persona que no puede aprobar revisiones no puede aprobar Administrar (403 approver_required). Permitido: "read", "propose", "manage" |
Plantilla y respuestas de solicitud
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'Respuestas
| Estado | Significado | Cuerpo y encabezados |
|---|---|---|
| 200 | La redirección de regreso a la aplicación. | OAuthAuthorizationRedirect (application/json) |
| 403 | outside_screen_scope - el llamador está limitado a pantallas y la pantalla, carpeta de pantallas, selector o audiencia que nombra o alcanza la solicitud está fuera de ellas (docs/screen-scope.md). Un id fuera del alcance y un id que no existe reciben la misma respuesta; errors[0].screen_scope lleva el alcance del llamador, y la escritura se rechaza por completo, nunca se acota. | Problema (application/problem+json) |
| predeterminado | Respuesta estable RFC 9457 a problemas. Un 421 server_draining lleva Retry-After de 1 segundo, un 500 not_ready o dependency_unavailable lleva 5, y un 500 manifest_degraded lleva 60, a menos que el manejador establezca un valor más específico. | Problema (application/problem+json) |