OpenAPI YAMLOpenAPI JSONproblemi YAMLPanoramica dell’API
Questo gruppo ha 10 operazioni, generate da api/openapi.yaml. Filtra per percorso, azione o autenticazione. Ogni endpoint elenca i suoi input; espandilo per vedere un modello di richiesta e i codici di risposta. I modelli richiedono i tuoi valori e un corpo valido secondo lo schema.
Sostituisci i segnaposto maiuscoli con i tuoi valori. Per una richiesta JSON, salva un corpo che corrisponde allo schema in request.json. Gli esempi di cookie usano un cookie jar locale da una sessione autenticata.
Accesso OAuth, token e revoca
Token Oauth
Endpoint token OAuth 2.0 (RFC 6749 §3.2) per JWT agenti. grant_type refresh_token ruota una credenziale di refresh opaca (RFC 9700): ogni uso restituisce una nuova coppia; un request_id (16-200 caratteri) fa sì che un retry esatto restituisca la stessa risposta mentre la sua credenziale e concessione sono attive e il successore è ancora corrente, senza scadenza retry per tempo trascorso.
Qualsiasi altro riutilizzo di un refresh token superato revoca tutta la famiglia (invalid_grant). Un’appartenenza o progetto selezionato rimosso restituisce invalid_scope con error_description che inizia con "project_selection_inactive:"; la credenziale di refresh non viene consumata.
Scopri le membership attive con GET /api/projects, incrocia con la selezione precedentemente acconsentita e riprova con projects= e un nuovo request_id. Non terminare mai la famiglia di aggiornamenti per questo errore di selezione.
La restrizione dell’ambito richiesto si applica indipendentemente a ogni progetto e all’autorità d’identità; un ambito esplicito senza identità esclude l’autorità d’identità. 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 risponde unsupported_token_type: le credenziali legacy sono ritirate e l’installazione effettua nuovamente l’accesso con screenrig login. resource (RFC 8707) è https://api.<domain>/api o assente; projects seleziona fino a 64 ID progetto con consenso.
L’omissione seleziona tutto solo se il set ci sta; altrimenti il client deve scegliere un sottoinsieme. project_id seleziona uno durante il rilascio di compatibilità. Il grant di un’app connessa ha la singola risorsa https://api.<domain>/mcp, che un refresh può omettere.
I client sono pubblici (solo client_id), o un’app connessa il cui metadata dichiara private_key_jwt che si autentica con client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer e un client_assertion (iss e sub sono il suo client_id, aud l’emittente o questo endpoint come stringa unica, exp entro 5 minuti da iat, un jti usato una volta, kid che nomina una delle sue chiavi; EdDSA, ES256 o RS256). grant_type authorization_code riscatta il codice di un’app connessa entro 60 secondi con redirect_uri esatto e PKCE code_verifier; resource deve essere assente o autorizzata; un secondo riscatto revoca il grant creato dal codice. grant_type client_credentials è di un client di servizio: si autentica con un client assertion (una delle sue chiavi registrate) o il suo segreto via HTTP Basic (client_secret_basic; un segreto nel corpo è rifiutato) e riceve un token di servizio di 15 minuti per il suo progetto, audience api o (resource https://api.<domain>/mcp) mcp, scope entro capacità e livello di accesso, senza refresh token; 600 per client all’ora.
Gli errori sono JSON RFC 6749 {error, error_description} con Cache-Control no-store; mentre il server non li emette risponde temporarily_unavailable (503).
I limiti di frequenza rispondono 429 rate_limited con Retry-After: 1200 richieste per indirizzo client all’ora su questo e l’endpoint di revoca, 60 aggiornamenti per concessione all’ora, 30 scambi per credenziale legacy all’ora. grant_type urn:ietf:params:oauth:grant-type:device_code (RFC 8628 §3.4) interroga un accesso dispositivo: authorization_pending finché una persona non lo approva, slow_down se interrogato prima dell’intervallo (che poi cresce di 5 secondi), access_denied se negato, expired_token dopo 10 minuti, poi la risposta token.
Una nuova installazione riceve una coppia di token; un accesso iniziato con il token di accesso di un’installazione esistente aggiunge il progetto approvato a quella concessione e riceve solo un token di accesso, senza ruotare il token di aggiornamento. Il polling dello stesso device_code restituisce la stessa risposta finché la concessione non ruota per prima o passano 10 minuti, poi invalid_grant.
Solo POST, codificato form, senza stringa di query.
Campi del corpo della richiesta
| Campo | Descrizione |
|---|---|
| grant_type (obbligatorio, stringa) | Consentito: "authorization_code", "client_credentials", "refresh_token", "urn:ietf:params:oauth:grant-type:token-exchange", "urn:ietf:params:oauth:grant-type:device_code" |
| client_id (opzionale, stringa) | |
| client_assertion_type (opzionale, stringa) | Consentito: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" |
| client_assertion (opzionale, stringa) | |
| codice (opzionale, stringa) | |
| redirect_uri (opzionale, stringa) | |
| code_verifier (opzionale, stringa) | minLength: 43 maxLength: 128 |
| refresh_token (opzionale, stringa) | |
| device_code (opzionale, stringa) | |
| request_id (facoltativo, stringa) | minLength: 16 maxLength: 200 |
| subject_token (opzionale, stringa) | |
| subject_token_type (opzionale, stringa) | Consentito: "urn:screenrig:token-type:identity-credential", "urn:screenrig:token-type:project-token" |
| ambito (opzionale, stringa) | |
| risorsa (opzionale, stringa) | formato: "uri" |
| projects (opzionale, stringa) | ID progetto separati da spazio o virgola; omettere per tutti i progetti con consenso fino al limite configurato (default 64). Non può essere combinato con project_id. |
| project_id (opzionale, stringa) |
Modello richiesta e risposte
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | La risposta del token (RFC 6749 §5.1). | OAuthTokenResponse (application/json) |
| predefinito | Un errore RFC 6749 §5.2. | OAuthError (application/json) |
Autorizzazione dispositivo Oauth
RFC 8628 §3.1 autorizzazione dispositivo per `screenrig login`. scope è access:manage (default), access:propose o access:read; project_id suggerisce il progetto approvato dalla persona; name, agent_type, platform e version descrivono l’installazione e sono mostrati all’approvatore come riportato dal dispositivo; install_source (opzionale) indica da dove è stata installata e viene conservato sull’agente creato dall’approvazione.
Senza Authorization avvia una nuova installazione. Con Authorization: Bearer e un token di accesso agente con ambito identity chiede di aggiungere un progetto alla concessione di quell’installazione, o di elevare un progetto Solo lettura a Gestisci.
La persona inserisce user_code su verification_uri (o segue verification_uri_complete) e lo approva nel dashboard; il dispositivo interroga l’endpoint token con device_code ogni intervallo di secondi.
I limiti di frequenza rispondono 429 rate_limited con Retry-After: 10 per indirizzo client all’ora e 600 all’ora per tutta la flotta, dietro i 1200 per indirizzo all’ora degli endpoint. Gli errori sono JSON RFC 6749 con Cache-Control no-store; mentre il server non li emette risponde temporarily_unavailable (503). Solo POST, codificato in form, senza query string.
Campi del corpo della richiesta
| Campo | Descrizione |
|---|---|
| client_id (obbligatorio, stringa) | |
| ambito (opzionale, stringa) | Consentito: "access:manage", "access:propose", "access:read" |
| project_id (opzionale, stringa) | maxLength: 200 |
| nome (opzionale, stringa) | maxLength: 80 |
| agent_type (opzionale, stringa) | maxLength: 32 |
| piattaforma (opzionale, stringa) | maxLength: 80 |
| version (opzionale, stringa) | maxLength: 40 |
| install_source (opzionale, stringa) | Opzionale: il luogo da cui è stata installata l’integrazione, ovvero l’host e, dopo una barra, il marketplace (claude/screenrig, codex/screenrig, grok/screenrig), oppure un semplice host come npm. Un valore mancante o di forma errata viene ignorato e non fa mai fallire la richiesta. pattern: "^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$" |
Modello richiesta e risposte
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | La risposta di autorizzazione dispositivo (RFC 8628 §3.2). | oggetto (application/json) |
| predefinito | Un errore RFC 6749 §5.2. | OAuthError (application/json) |
Autorizzazione Oauth
Endpoint di autorizzazione OAuth 2.0 per app connesse (client MCP). client_id è un URL documento metadati client ID (https, porta 443, recuperato senza redirect, massimo 64 KiB e 5 secondi, solo indirizzi pubblici) o un client id registrato.
La richiesta viene convalidata in quest'ordine: il client, il redirect_uri esatto (un reindirizzamento http di loopback a 127.0.0.1, [::1] o localhost corrisponde su qualsiasi porta), response_type code, code_challenge con code_challenge_method S256, resource (https://api.<domain>/mcp, un'altra risorsa MCP i cui metadati di risorsa protetta nominano questo server, o assente), poi scope (access:read, il predefinito, access:propose, access:manage e i nomi delle capacità).
Un client sconosciuto o redirect_uri risponde con una pagina errore HTML e non reindirizza mai; ogni errore successivo reindirizza al redirect_uri con error, error_description, state e iss (RFC 9207).
Il successo risponde con 303 alla pagina di consenso del dashboard, dove una persona sceglie il progetto, il livello di accesso (Solo lettura di default, Proponi o Gestisci) e le capacità; l’approvazione reindirizza con codice, stato e iss. 30 richieste per indirizzo client al minuto.
Parametri
| Nome | Invia | Obbligatorio? | Descrizione |
|---|---|---|---|
| client_id | query | obbligatorio | |
| redirect_uri | query | obbligatorio | |
| response_type | query | obbligatorio | |
| code_challenge | query | obbligatorio | |
| code_challenge_method | query | obbligatorio | |
| stato | query | opzionale | |
| risorsa | query | opzionale | |
| ambito | query | opzionale |
Modello richiesta e risposte
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'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 303 | Alla pagina del consenso, o torna al redirect_uri del cliente con errore, stato e iss. | nessun corpo |
| 400 | Una pagina di errore HTML per un client o redirect_uri sconosciuto; mai un redirect. | stringa (text/html) |
| 429 | Troppe richieste di autorizzazione da questo indirizzo. | nessun corpo |
Revoca Oauth
Revoca RFC 7009. Una credenziale di aggiornamento opaca (o un JWT di aggiornamento di versione precedente), o un JWT di accesso agente, emesso al client revoca la sua concessione; i token di accesso della concessione sono rifiutati entro pochi secondi. Un token sconosciuto, scaduto o esterno risponde comunque 200. Solo POST, codificato in form.
Campi del corpo della richiesta
| Campo | Descrizione |
|---|---|
| client_id (opzionale, stringa) | |
| client_assertion_type (opzionale, stringa) | Consentito: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" |
| client_assertion (opzionale, stringa) | |
| token (obbligatorio, stringa) | |
| token_type_hint (opzionale, stringa) |
Modello richiesta e risposte
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Revocato, o niente da revocare. | nessun corpo |
| predefinito | Un errore RFC 6749 §5.2. | OAuthError (application/json) |
Metadati del server di autorizzazione Oauth
Metadati server di autorizzazione RFC 8414 per il server di autorizzazione agente.
Modello richiesta e risposte
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Il documento dei metadati. | oggetto (application/json) |
MCP risorsa protetta Oauth
Metadati risorsa protetta RFC 9728 per /mcp, nominati da resource_metadata di ogni /mcp 401.
Modello richiesta e risposte
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Il documento dei metadati. | oggetto (application/json) |
API risorsa protetta Oauth
Metadati risorsa protetta RFC 9728 per /api.
Modello richiesta e risposte
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Il documento dei metadati. | oggetto (application/json) |
Ottieni autorizzazione OAuth dashboard
Un’autorizzazione app connessa in sospeso per la pagina di consenso: nome e dominio del client come dichiarati nei metadati (mai scaricato un logo), se è un client registrato, host di redirect, e livello di accesso e capacità richiesti. Autorizzazioni sconosciute, scadute o risolte sono not_found.
Parametri
| Nome | Invia | Obbligatorio? | Descrizione |
|---|---|---|---|
| id | path | obbligatorio |
Modello richiesta e risposte
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | L’autorizzazione. | OAuthAuthorization (application/json) |
| predefinito | Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore. | Problema (application/problem+json) |
Approva autorizzazione OAuth dashboard
Approva un’app connessa per uno dei progetti della persona dopo una prova fresca (tipo oauth_authorization_approval, soggetto l’id autorizzazione): crea l’identità agente dell’app (tipo agente mcp_client, la persona responsabile), la sua appartenenza e la sua concessione con l’accesso scelto (leggi o gestisci; omesso mantiene il livello richiesto, che di default è leggi) e le capacità (un sottoinsieme di quelle richieste), e risponde con redirect_uri, portando codice, stato e iss, a cui la pagina naviga.
Il codice è valido per 60 secondi. Un membro limitato agli schermi non collega agenti, non emette credenziali e non gestisce le persone del progetto: outside_screen_scope (chiedi al proprietario del progetto).
Parametri
| Nome | Invia | Obbligatorio? | Descrizione |
|---|---|---|---|
| id | path | obbligatorio |
Campi del corpo della richiesta
| Campo | Descrizione |
|---|---|
| project_id (obbligatorio, stringa) | minLength: 1 |
| proof (opzionale, DashboardProof) | |
| capacità (opzionale, array) | Solo opzionale su connessione agente e approvazione app connessa. Omissione approva l’insieme completo richiesto; un sottoinsieme non vuoto delle capacità di connessione restringe la credenziale concessa; altro è invalid_request. |
| user_code (opzionale, stringa) | Obbligatorio quando si approva un accesso dispositivo (flow device): il codice che la persona conferma corrisponde al terminale. Una discrepanza è agent_connection_code_mismatch; il quinto scade l’accesso (agent_connection_expired). Ignorato altrimenti. maxLength: 32 |
| accesso (opzionale, stringa) | Il livello di accesso con cui un accesso dispositivo o un’app connessa è approvato (Sola lettura, Proporre o Gestire); omesso mantiene il livello richiesto. Ignorato per altre connessioni. Una persona che non può approvare revisioni non può approvare Gestire (403 approver_required). Consentito: "read", "propose", "manage" |
Modello richiesta e risposte
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'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Il reindirizzamento di ritorno all’applicazione. | OAuthAuthorizationRedirect (application/json) |
| 403 | outside_screen_scope - il chiamante è limitato agli schermi e lo schermo, la cartella di schermi, il selettore o il pubblico che la richiesta nomina o raggiunge è fuori da essi (docs/screen-scope.md). Un id fuori dall’ambito e un id che non esiste ricevono la stessa risposta; errors[0].screen_scope riporta l’ambito del chiamante, e la scrittura viene rifiutata per intero, mai ridotta. | Problema (application/problem+json) |
| predefinito | Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore. | Problema (application/problem+json) |
Nega autorizzazione OAuth Dashboard
Nega un’app connessa dopo una prova recente (tipo oauth_authorization_denial) e risponde con il redirect_uri, che riporta error=access_denied, state e iss, verso cui la pagina naviga. Un membro limitato agli schermi non collega agenti, non emette credenziali e non gestisce le persone del progetto: outside_screen_scope (chiedi al proprietario del progetto).
Parametri
| Nome | Invia | Obbligatorio? | Descrizione |
|---|---|---|---|
| id | path | obbligatorio |
Campi del corpo della richiesta
| Campo | Descrizione |
|---|---|
| project_id (obbligatorio, stringa) | minLength: 1 |
| proof (opzionale, DashboardProof) | |
| capacità (opzionale, array) | Solo opzionale su connessione agente e approvazione app connessa. Omissione approva l’insieme completo richiesto; un sottoinsieme non vuoto delle capacità di connessione restringe la credenziale concessa; altro è invalid_request. |
| user_code (opzionale, stringa) | Obbligatorio quando si approva un accesso dispositivo (flow device): il codice che la persona conferma corrisponde al terminale. Una discrepanza è agent_connection_code_mismatch; il quinto scade l’accesso (agent_connection_expired). Ignorato altrimenti. maxLength: 32 |
| accesso (opzionale, stringa) | Il livello di accesso con cui un accesso dispositivo o un’app connessa è approvato (Sola lettura, Proporre o Gestire); omesso mantiene il livello richiesto. Ignorato per altre connessioni. Una persona che non può approvare revisioni non può approvare Gestire (403 approver_required). Consentito: "read", "propose", "manage" |
Modello richiesta e risposte
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'Risposte
| Stato | Significato | Corpo e intestazioni |
|---|---|---|
| 200 | Il reindirizzamento di ritorno all’applicazione. | OAuthAuthorizationRedirect (application/json) |
| 403 | outside_screen_scope - il chiamante è limitato agli schermi e lo schermo, la cartella di schermi, il selettore o il pubblico che la richiesta nomina o raggiunge è fuori da essi (docs/screen-scope.md). Un id fuori dall’ambito e un id che non esiste ricevono la stessa risposta; errors[0].screen_scope riporta l’ambito del chiamante, e la scrittura viene rifiutata per intero, mai ridotta. | Problema (application/problem+json) |
| predefinito | Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore. | Problema (application/problem+json) |