Référence API

API OAuth

Connexion OAuth, jetons et révocation

Référence HTTP. Générée à partir du contrat backend. Parcourez les points de terminaison ci-dessous ou téléchargez OpenAPI.

Ce groupe compte 10 opérations, générées à partir de api/openapi.yaml. Filtrez par chemin, action ou authentification. Chaque point de terminaison liste ses entrées ; développez-le pour voir un modèle de requête et les codes de réponse. Les modèles demandent vos propres valeurs et un corps conforme au schéma.

Remplacez les espaces réservés en majuscules par vos valeurs. Pour une requête JSON, enregistrez un corps correspondant au schéma dans request.json. Les exemples de cookies utilisent un pot à cookies local issu d’une session authentifiée.

Connexion OAuth, jetons et révocation

POST/oauth/token

Jeton Oauth

Point de terminaison de jeton OAuth 2.0 (RFC 6749 §3.2) pour les JWT d’agent. grant_type refresh_token fait tourner un justificatif opaque de rafraîchissement (RFC 9700) : chaque utilisation retourne une nouvelle paire ; un request_id (16 à 200 caractères) fait qu’une nouvelle tentative exacte retourne la même réponse tant que son justificatif et sa subvention sont actifs et que le successeur est encore courant, sans délai d’expiration de tentative écoulé.

Toute autre réutilisation d’un jeton de rafraîchissement remplacé révoque toute la famille (invalid_grant). Une adhésion ou un projet sélectionné supprimé renvoie invalid_scope avec error_description commençant par "project_selection_inactive:" ; le justificatif de rafraîchissement n’est pas consommé.

Découvrez les adhésions actives avec GET /api/projects, croisez-les avec la sélection consentie précédemment, et réessayez avec projects= et un nouveau request_id. Ne jamais terminer la famille d’actualisation pour cette erreur de sélection.

Le resserrement de la portée demandée s’applique indépendamment à chaque projet et à l’autorité d’identité ; une portée explicite sans identité exclut l’autorité d’identité. grant_type urn:ietf:params:oauth:grant-type:token-exchange (RFC 8693) avec subject_token_type urn:screenrig:token-type:identity-credential ou urn:screenrig:token-type:project-token répond unsupported_token_type : les identifiants hérités sont retirés, et l’installation se reconnecte avec screenrig login. resource (RFC 8707) est https://api.<domain>/api ou absent ; projects sélectionne jusqu’à 64 ID de projets consentis.

L’omission sélectionne tout seulement si l’ensemble convient ; sinon le client doit choisir un sous-ensemble. project_id en sélectionne un lors de la version de compatibilité. La subvention d’une app connectée a la ressource unique https://api.<domain>/mcp, qu’un rafraîchissement peut omettre.

Les clients sont publics (client_id seulement), ou une app connectée dont les métadonnées déclarent que private_key_jwt s’authentifie avec client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer et un client_assertion (iss et sub son client_id, aud l’émetteur ou ce point de terminaison comme une chaîne, exp dans les 5 minutes de iat, un jti utilisé une fois, kid nommant une de ses clés ; EdDSA, ES256 ou RS256). grant_type authorization_code échange un code d’app connectée dans les 60 secondes avec le redirect_uri exact et le code_verifier PKCE ; resource doit être absente ou celle autorisée ; un second échange révoque la subvention créée par le code. grant_type client_credentials est celui d’un client service : il s’authentifie avec une assertion client (une de ses clés enregistrées) ou son secret par HTTP Basic (client_secret_basic ; un secret dans le corps est refusé) et reçoit un jeton service de 15 minutes pour son projet, audience api ou (resource https://api.<domain>/mcp) mcp, scope dans ses capacités et niveau d’accès, et pas de jeton de rafraîchissement ; 600 par client par heure.

Les erreurs sont des JSON RFC 6749 {error, error_description} avec Cache-Control no-store ; tant que le serveur ne les émet pas, il répond temporarily_unavailable (503).

Les limites de débit répondent 429 rate_limited avec Retry-After : 1200 requêtes par adresse client par heure sur ce point de terminaison et celui de révocation, 60 rafraîchissements par concession par heure, 30 échanges par clé héritée par heure. grant_type urn:ietf:params:oauth:grant-type:device_code (RFC 8628 §3.4) interroge une connexion d’appareil : authorization_pending jusqu’à approbation par une personne, slow_down si interrogé avant l’intervalle (qui augmente alors de 5 secondes), access_denied en cas de refus, expired_token après 10 minutes, puis la réponse du jeton.

Une nouvelle installation reçoit une paire de jetons ; une connexion commencée avec le jeton d’accès d’une installation existante ajoute le projet approuvé à cette subvention et reçoit un jeton d’accès seulement, sans rotation du jeton de rafraîchissement. Interroger à nouveau le même device_code retourne la même réponse jusqu’à ce que la subvention tourne d’abord ou que 10 minutes passent, puis invalid_grant.

POST uniquement, encodé en formulaire, sans chaîne de requête.

Authentification
aucun
Corps de la requête
object
ID d’opération
oauthToken

Champs du corps de la requête

ChampDescription
grant_type (obligatoire, chaîne)Autorisés : « authorization_code », « client_credentials », « refresh_token », « urn:ietf:params:oauth:grant-type:token-exchange », « urn:ietf:params:oauth:grant-type:device_code »
client_id (facultatif, chaîne)
client_assertion_type (facultatif, chaîne)Autorisé : « urn:ietf:params:oauth:client-assertion-type:jwt-bearer »
client_assertion (facultatif, chaîne)
code (facultatif, chaîne)
redirect_uri (optionnelle, chaîne)
code_verifier (facultatif, chaîne)minLength : 43 maxLength : 128
refresh_token (optionnel, chaîne)
device_code (optionnel, chaîne)
request_id (optionnel, chaîne)minLength : 16 maxLength : 200
subject_token (optionnel, chaîne)
subject_token_type (optionnel, chaîne)Autorisé : « urn:screenrig:token-type:identity-credential », « urn:screenrig:token-type:project-token »
portée (optionnelle, chaîne)
ressource (optionnel, chaîne)format : « uri »
projects (optionnel, chaîne)ID de projet séparés par un espace ou une virgule ; omettez pour tous les projets consentis jusqu’au plafond configuré (par défaut 64). Ne peut pas être combiné avec project_id.
project_id (optionnel, chaîne)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'

Réponses

StatutSensCorps et en-têtes
200La réponse du jeton (RFC 6749 §5.1).OAuthTokenResponse (application/json)
par défautUne erreur RFC 6749 §5.2.OAuthError (application/json)
POST/oauth/device_authorization

Autorisation d’appareil Oauth

RFC 8628 §3.1 autorisation d’appareil pour `screenrig login`. scope est access:manage (par défaut), access:propose ou access:read ; project_id suggère le projet que la personne approuve ; name, agent_type, platform et version décrivent l’installation et sont montrés à l’approbateur tels que rapportés par l’appareil ; install_source (facultatif) indique d’où elle a été installée et est conservé sur l’agent que l’approbation crée.

Sans Authorization, cela démarre une nouvelle installation. Avec Authorization: Bearer et un jeton d’accès agent portant le scope identity, il demande d’ajouter un projet à la subvention de cette installation, ou d’élever un projet Lecture seule à Gérer.

La personne saisit user_code à verification_uri (ou suit verification_uri_complete) et l’approuve dans le tableau de bord ; l’appareil interroge le point de jeton avec device_code à chaque intervalle de secondes.

Les limites de taux répondent 429 rate_limited avec Retry-After : 10 par adresse client par heure et 600 par heure pour toute la flotte, derrière les points de terminaison à 1200 par adresse par heure. Les erreurs sont JSON RFC 6749 avec Cache-Control no-store ; tant que le serveur ne l’émet pas, il répond temporarily_unavailable (503). POST uniquement, encodé en formulaire, sans chaîne de requête.

Authentification
aucun
Corps de la requête
object
ID d’opération
oauthDeviceAuthorization

Champs du corps de la requête

ChampDescription
client_id (obligatoire, chaîne)
portée (optionnelle, chaîne)Autorisés : « access:manage », « access:propose », « access:read »
project_id (optionnel, chaîne)maxLength : 200
nom (optionnel, chaîne)maxLength : 80
agent_type (optionnel, chaîne)maxLength : 32
plateforme (optionnelle, chaîne)maxLength : 80
version (optionnel, chaîne)maxLength : 40
install_source (facultatif, chaîne)

Facultatif. D’où l’intégration a été installée : l’hôte et, après une barre oblique, le marketplace (claude/screenrig, codex/screenrig, grok/screenrig), ou un hôte seul tel que npm. Une valeur absente ou de forme incorrecte est ignorée et ne fait jamais échouer la requête. motif : « ^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$ »

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'

Réponses

StatutSensCorps et en-têtes
200La réponse d’autorisation de l’appareil (RFC 8628 §3.2).objet (application/json)
par défautUne erreur RFC 6749 §5.2.OAuthError (application/json)
GET/oauth/authorize

Autoriser Oauth

Point de terminaison d’autorisation OAuth 2.0 pour les apps connectées (clients MCP). client_id est une URL de document de métadonnées d’ID client (https, port 443, récupérée sans redirections, 64 KiB et 5 secondes au maximum, adresses publiques uniquement) ou un ID client enregistré.

La requête est validée dans cet ordre : le client, le redirect_uri exact (une redirection http de bouclage vers 127.0.0.1, [::1] ou localhost correspond sur n’importe quel port), response_type code, code_challenge avec code_challenge_method S256, resource (https://api.<domain>/mcp, une autre ressource MCP dont les métadonnées de ressource protégée nomment ce serveur, ou absente), puis scope (access:read, la valeur par défaut, access:propose, access:manage et les noms de capacités).

Un client inconnu ou redirect_uri répond par une page d’erreur HTML et ne redirige jamais ; toute erreur ultérieure redirige vers redirect_uri avec error, error_description, state et iss (RFC 9207).

Le succès répond par un 303 vers la page de consentement du tableau de bord, où une personne choisit le projet, le niveau d’accès (Lecture seule par défaut, Proposer ou Gérer) et les capacités ; l’approbation redirige avec code, état et iss. 30 requêtes par adresse client par minute.

Authentification
aucun
Corps de la requête
aucun
ID d’opération
oauthAuthorize

Paramètres

NomEnvoyerRequis ?Description
client_idrequêteobligatoire
redirect_urirequêteobligatoire
response_typerequêteobligatoire
code_challengerequêteobligatoire
code_challenge_methodrequêteobligatoire
étatrequêteoptionnel
ressourcerequêteoptionnel
portéerequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
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'

Réponses

StatutSensCorps et en-têtes
303Vers la page de consentement, ou retour à redirect_uri du client avec erreur, état et iss.pas de corps
400Une page d’erreur HTML pour un client inconnu ou redirect_uri ; jamais une redirection.chaîne (text/html)
429Trop de demandes d’autorisation provenant de cette adresse.pas de corps
POST/oauth/revoke

Révoquer Oauth

Révocation RFC 7009. Un jeton opaque de rafraîchissement (ou un JWT de rafraîchissement d’une version précédente), ou un JWT d’accès agent, émis au client révoque sa concession ; les jetons d’accès de la concession sont refusés en quelques secondes. Un jeton inconnu, expiré ou étranger répond aussi 200. POST uniquement, encodé en formulaire.

Authentification
aucun
Corps de la requête
object
ID d’opération
oauthRevoke

Champs du corps de la requête

ChampDescription
client_id (facultatif, chaîne)
client_assertion_type (facultatif, chaîne)Autorisé : « urn:ietf:params:oauth:client-assertion-type:jwt-bearer »
client_assertion (facultatif, chaîne)
jeton (obligatoire, chaîne)
token_type_hint (optionnel, chaîne)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'

Réponses

StatutSensCorps et en-têtes
200Révoqué, ou rien à révoquer.pas de corps
par défautUne erreur RFC 6749 §5.2.OAuthError (application/json)
GET/.well-known/oauth-authorization-server

Métadonnées du serveur d’autorisation Oauth

Métadonnées du serveur d’autorisation RFC 8414 pour le serveur d’autorisation agent.

Authentification
aucun
Corps de la requête
aucun
ID d’opération
oauthAuthorizationServerMetadata
Modèle de requête et réponses
shell · modèle de requête
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'

Réponses

StatutSensCorps et en-têtes
200Le document de métadonnées.objet (application/json)
GET/.well-known/oauth-protected-resource/mcp

MCP de ressource protégée Oauth

Métadonnées de ressource protégée RFC 9728 pour /mcp, nommées par resource_metadata de chaque /mcp 401.

Authentification
aucun
Corps de la requête
aucun
ID d’opération
oauthProtectedResourceMCP
Modèle de requête et réponses
shell · modèle de requête
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'

Réponses

StatutSensCorps et en-têtes
200Le document de métadonnées.objet (application/json)
GET/.well-known/oauth-protected-resource/api

API de ressource protégée Oauth

Métadonnées de ressource protégée RFC 9728 pour /api.

Authentification
aucun
Corps de la requête
aucun
ID d’opération
oauthProtectedResourceAPI
Modèle de requête et réponses
shell · modèle de requête
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'

Réponses

StatutSensCorps et en-têtes
200Le document de métadonnées.objet (application/json)
GET/api/oauth/authorizations/{id}

Obtenir l’autorisation OAuth du tableau de bord

Une autorisation d’application connectée en attente pour la page de consentement : le nom et le domaine du client tels que déclarés dans ses métadonnées (aucun logo n’est jamais récupéré), s’il est un client enregistré, l’hôte de redirection, ainsi que le niveau d’accès et les capacités demandés. Les autorisations inconnues, expirées ou réglées sont not_found.

Authentification
dashboardSession
Corps de la requête
aucun
ID d’opération
getDashboardOAuthAuthorization

Paramètres

NomEnvoyerRequis ?Description
idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'

Réponses

StatutSensCorps et en-têtes
200L’autorisation.OAuthAuthorization (application/json)
par défaut

Réponse stable RFC 9457 à un problème. Un 421 server_draining porte un Retry-After de 1 seconde, un 500 not_ready ou dependency_unavailable porte 5, et un 500 manifest_degraded porte 60, sauf si le gestionnaire a défini une valeur plus spécifique.

Problème (application/problem+json)
POST/api/oauth/authorizations/{id}/approve

Approuver l’autorisation OAuth du tableau de bord

Approuve une application connectée pour un des projets de la personne après une preuve fraîche (type oauth_authorization_approval, sujet l’identifiant d’autorisation) : elle crée l’identité d’agent de l’app (type agent mcp_client, la personne responsable), son adhésion et sa concession avec l’accès choisi (lecture ou gestion ; omis garde le niveau demandé, qui est lecture par défaut) et les capacités (un sous-ensemble de la demande), et répond avec redirect_uri, portant code, état et iss, vers laquelle la page navigue.

Le code est valide pendant 60 secondes. Un membre limité aux écrans ne connecte pas d’agents, n’émet pas d’identifiants et ne gère pas les personnes du projet : outside_screen_scope (demandez au propriétaire du projet).

Authentification
dashboardSession
Corps de la requête
ActionAgentTableauDeBord
ID d’opération
approveDashboardOAuthAuthorization

Paramètres

NomEnvoyerRequis ?Description
idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (requis, chaîne)minLength : 1
preuve (optionnelle, DashboardProof)
capacités (facultatif, tableau)

Optionnel uniquement à la connexion d’agent et à l’approbation de l’application connectée. Omission approuve l’ensemble complet demandé ; un sous-ensemble non vide des capacités de connexion restreint la crédentiale accordée ; tout autre cas est invalid_request.

user_code (optionnel, chaîne)

Requis lors de l’approbation d’une connexion d’appareil (flux appareil) : le code que la personne confirme correspond au terminal. Une non-correspondance est agent_connection_code_mismatch ; la cinquième expire la connexion (agent_connection_expired). Ignoré autrement. maxLength : 32

accès (facultatif, chaîne)

Le niveau d’accès avec lequel une connexion d’appareil ou une app connectée est approuvée (Lecture seule, Proposer ou Gérer) ; omis conserve le niveau demandé. Ignoré pour les autres connexions. Une personne qui ne peut pas approuver les révisions ne peut pas approuver Gérer (403 approver_required). Autorisé : "read", "propose", "manage"

Modèle de requête et réponses
shell · modèle de requête
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'

Réponses

StatutSensCorps et en-têtes
200La redirection vers l’application.OAuthAuthorizationRedirect (application/json)
403

outside_screen_scope - l’appelant est limité aux écrans et l’écran, le dossier d’écrans, le sélecteur ou l’audience que la requête nomme ou atteint est en dehors de ceux-ci (docs/screen-scope.md). Un ID en dehors du périmètre et un ID qui n’existe pas obtiennent la même réponse ; errors[0].screen_scope porte le périmètre de l’appelant, et l’écriture est refusée en entier, jamais restreinte.

Problème (application/problem+json)
par défaut

Réponse stable RFC 9457 à un problème. Un 421 server_draining porte un Retry-After de 1 seconde, un 500 not_ready ou dependency_unavailable porte 5, et un 500 manifest_degraded porte 60, sauf si le gestionnaire a défini une valeur plus spécifique.

Problème (application/problem+json)
POST/api/oauth/authorizations/{id}/deny

Refuser l’autorisation OAuth du tableau de bord

Refuse une application connectée après une nouvelle preuve (kind oauth_authorization_denial) et répond avec le redirect_uri, portant error=access_denied, state et iss, vers lequel la page navigue. Un membre limité aux écrans ne connecte pas d’agents, n’émet pas d’identifiants et ne gère pas les personnes du projet : outside_screen_scope (demandez au propriétaire du projet).

Authentification
dashboardSession
Corps de la requête
ActionAgentTableauDeBord
ID d’opération
denyDashboardOAuthAuthorization

Paramètres

NomEnvoyerRequis ?Description
idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (requis, chaîne)minLength : 1
preuve (optionnelle, DashboardProof)
capacités (facultatif, tableau)

Optionnel uniquement à la connexion d’agent et à l’approbation de l’application connectée. Omission approuve l’ensemble complet demandé ; un sous-ensemble non vide des capacités de connexion restreint la crédentiale accordée ; tout autre cas est invalid_request.

user_code (optionnel, chaîne)

Requis lors de l’approbation d’une connexion d’appareil (flux appareil) : le code que la personne confirme correspond au terminal. Une non-correspondance est agent_connection_code_mismatch ; la cinquième expire la connexion (agent_connection_expired). Ignoré autrement. maxLength : 32

accès (facultatif, chaîne)

Le niveau d’accès avec lequel une connexion d’appareil ou une app connectée est approuvée (Lecture seule, Proposer ou Gérer) ; omis conserve le niveau demandé. Ignoré pour les autres connexions. Une personne qui ne peut pas approuver les révisions ne peut pas approuver Gérer (403 approver_required). Autorisé : "read", "propose", "manage"

Modèle de requête et réponses
shell · modèle de requête
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'

Réponses

StatutSensCorps et en-têtes
200La redirection vers l’application.OAuthAuthorizationRedirect (application/json)
403

outside_screen_scope - l’appelant est limité aux écrans et l’écran, le dossier d’écrans, le sélecteur ou l’audience que la requête nomme ou atteint est en dehors de ceux-ci (docs/screen-scope.md). Un ID en dehors du périmètre et un ID qui n’existe pas obtiennent la même réponse ; errors[0].screen_scope porte le périmètre de l’appelant, et l’écriture est refusée en entier, jamais restreinte.

Problème (application/problem+json)
par défaut

Réponse stable RFC 9457 à un problème. Un 421 server_draining porte un Retry-After de 1 seconde, un 500 not_ready ou dependency_unavailable porte 5, et un 500 manifest_degraded porte 60, sauf si le gestionnaire a défini une valeur plus spécifique.

Problème (application/problem+json)