Référence API

API Projets

Projets, invitations et connexion

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 147 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.

Projets, invitations et connexion

GET/api/project/deletion-preview

Agent d’aperçu de suppression de projet

Retourne les détails actuels de confirmation, les bloqueurs de suppression et les appareils archivés qui seront déconnectés. allowed est faux, avec une raison, quand l’appelant ne peut pas supprimer le projet (seul son propriétaire ou un administrateur de son organisation peut ; pour un agent, sa personne responsable) ou qu’un bloqueur subsiste.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
previewProjectDeletionAgent

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
project_idrequêteoptionnelID de projet attendu ; un changement de sélection est refusé.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/project/deletion-preview'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectDeletionPreview (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)
PUT/api/project/owner

Transférer l’agent propriétaire du projet

Le propriétaire transfère la propriété à un membre existant vérifié du projet ; cela n’accorde aucune nouvelle adhésion. L’adhésion du nouveau propriétaire perd tout screen_scope et upload_scope, de sorte que le nouveau propriétaire accède à tout le projet.

Une session du tableau de bord d’un administrateur de l’organisation du projet qui est membre du projet transfère la propriété de la même façon, à partir de son propriétaire actuel, quel qu’il soit ; un administrateur de l’organisation qui n’est pas membre du projet utilise PUT /api/organizations/{org_id}/projects/{project_id}/owner.

Authentification
projectBearer OU dashboardSession
Corps de la requête
ProjectOwnerTransfer
ID d’opération
transferProjectOwnerAgent

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
user_id (obligatoire, chaîne)minLength : 1 maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/project/owner'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectContext (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/project/move

Déplacer l’agent de projet

Le transfert autorisé par le propriétaire transfère atomiquement l’occupation de l’écran et la nouvelle utilisation au payeur de destination ; les frais historiques conservent leur payeur. Une destination qui détient déjà autant de projets actifs que son forfait le permet est project_limit_reached, dont required_plan nomme le forfait qui a de la place, absent pour Enterprise.

Authentification
projectBearer OU dashboardSession
Corps de la requête
ProjectMove
ID d’opération
moveProjectAgent

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
organization_id (obligatoire, chaîne)minLength : 1 maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/project/move'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectContext (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)
GET/api/project/moves

Projet autorisé déplace agent

Liste les destinations que le propriétaire administre ou dont le domaine vérifié correspond à son courriel vérifié.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
allowedProjectMovesAgent

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
project_idrequêteoptionnelID de projet attendu ; un changement de sélection est refusé.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/project/moves'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectMoveDestinations (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)
GET/api/projects

Lister les projets d’agent

Liste chaque adhésion active de l’identité, avec contexte d’organisation et de propriétaire, y compris les adhésions omises de ce jeton ou du consentement de sa délégation. Chaque entrée marque in_token ; la découverte n’ajoute aucune autorité et n’a pas de limite de 64 projets.

Authentification
agentIdentityBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
listAgentProjects

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
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/projects'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectContextList (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/projects

Créer un projet agent

Crée un projet nommé appartenant à la personne responsable vérifiée. Sans organisation nommée, il est attribué à l’organisation du domaine vérifié de la personne, sinon à l’organisation du projet actuel, sinon à l’organisation la plus récemment utilisée parmi celles qu’elle administre ou détient gratuitement, sinon à une nouvelle organisation.

Un nom d’organisation sélectionne exactement une correspondance visible, sinon crée une nouvelle organisation. Une personne détient une organisation Standard gratuite ; une nouvelle organisation au-delà est free_organization_limit, nommant celle qu’elle détient.

Une organisation contient au maximum autant de projets actifs que son forfait le permet (Standard 1, Plus 3, Premium 10, Education 50, Enterprise 100, élargi par ses featuresets) ; un projet de plus est project_limit_reached, dont required_plan nomme le forfait qui a de la place, absent pour Enterprise (communiquez avec le soutien).

Une nouvelle tentative idempotente exacte redélivre son justificatif d’adhésion scellé pendant dix minutes. L’inscription est exemptée de la limite.

Sous un JWT d’accès agent (portée identité, accès : gérer, une subvention avec accès identité Gérer) aucun jeton de projet n’est délivré ; le projet rejoint la subvention avec Gérer et toutes les capacités, et un rafraîchissement avec son project_id renvoie un jeton pour lui.

Authentification
agentIdentityBearer OU dashboardSession
Corps de la requête
ProjectCreate
ID d’opération
createAgentProject

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
organization_id (optionnel, chaîne)minLength : 1 maxLength : 200
organization_name (optionnel, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
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 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/projects'

Réponses

StatutSensCorps et en-têtes
201Résultat du cycle de vie du projetProjet créé (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)
GET/api/invitations

Lister les invitations

Liste les enregistrements du cycle de vie des invitations pour le projet actuel, à l’exclusion des réinitialisations de connexion. Les adresses des destinataires sont visibles par le projet propriétaire, qui les a fournies. Les jetons et URL d’identifiants ne sont jamais listés.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
listInvitations

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
typerequêteoptionnel
statutrequêteoptionnel
curseurrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/invitations'

Réponses

StatutSensCorps et en-têtes
200Liste les enregistrements du cycle de vie des invitations pour le projet actuel, à l’exclusion des réinitialisations de connexion.InvitationList (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/invitations

Créer des invitations

Crée des invitations de membres ou d’acheteurs de publicité. La livraison par courriel ne retourne jamais de justificatif. La livraison par lien est réservée aux membres et retourne une URL, y compris lors d’une relecture idempotente exacte dans les 24 heures. Les invitations par courriel expirent après sept jours ; les liens expirent après 24 heures. Les invitations par courriel en attente du même type, adresse et projet sont réutilisées.

Un membre limité aux écrans n’invite pas de personnes (outside_screen_scope).

Une invitation par courriel project_member adressée à une personne qui serait un invité externe de l’organisation du projet (ce n’est pas son organisation d’appartenance) est soumise à la politique relative aux invités de cette organisation, et guest_not_allowed (403) répond lorsque la politique (allow, domains ou none) n’admet pas l’adresse. L’acceptation de l’invitation vérifie de nouveau.

Le personnel et les administrateurs de l’organisation sont exemptés. Un screen_scope sur l’invitation relève du périmètre d’écrans, que le forfait Enterprise inclut ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402).

Authentification
projectBearer OU dashboardSession
Corps de la requête
InvitationCreate
ID d’opération
createInvitations

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
type (obligatoire, chaîne)Autorisé : « project_member », « ad_buyer »
livraison (optionnel, chaîne)Autorisés : « email », « link » par défaut : « email »
courriels (optionnel, tableau)
advertising (optionnel, InvitationAdvertising)Portée détenue par le vendeur : au moins un écran ou emplacement. Écrans seulement, emplacements seulement ou les deux sont acceptés.
upload_scope (facultatif, UploadScope)

Ce qu’un téléverseur peut utiliser (docs/uploaders.md) : les listes de lecture dont il modifie les pages et les dossiers de médias dans lesquels il téléverse. Les dossiers sont exactement ceux qui sont listés, jamais leurs sous-dossiers. Un id qui ne désigne aucun objet actif du projet à l’écriture donne invalid_request à sa position ; une suppression ultérieure laisse un id mort, qui ne donne aucun droit.

Le périmètre est lu à chaque requête, de sorte qu’un changement s’applique à la suivante.

screen_scope (facultatif, ScreenScope)

Ce sur quoi un membre ou un agent à périmètre peut agir (docs/screen-scope.md) : les écrans des dossiers d’écrans listés et de chaque dossier qu’ils contiennent, et les écrans listés. Au moins un ID dans l’ensemble. Un ID qui ne nomme aucun dossier ou écran actif du projet au moment de l’écriture est invalid_request à sa position ; une suppression ultérieure laisse un ID mort, qui n’accorde rien.

Le périmètre est lu à chaque requête, de sorte qu’une modification s’applique à la suivante. Les étiquettes ne sont jamais un périmètre.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/invitations'

Réponses

StatutSensCorps et en-têtes
201Crée des invitations de membres ou d’acheteurs de publicité.InvitationCreated (application/json); en-têtes : RateLimit-Policy, RateLimit
402

feature_not_in_plan — un périmètre d’écrans nécessite Enterprise, et un périmètre de téléversement (un téléverseur) nécessite Plus ; le problème nomme la fonctionnalité, le forfait du compte et required_plan. Restreindre un périmètre de téléversement et retirer l’un ou l’autre périmètre sont toujours autorisés.

Problème (application/problem+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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
POST/api/invitations/{id}/revoke

Révoquer l’invitation

Révoque une invitation en cours. Une invitation acceptée renvoie invitation_consumed. Un membre limité aux écrans ne révoque pas d’invitations (outside_screen_scope).

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
revokeInvitation

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/invitations/RESOURCE_ID/revoke'

Réponses

StatutSensCorps et en-têtes
204Révoque une invitation en cours.pas de corps
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/sign-in-resets

Demander une réinitialisation de connexion

Accepte une demande de réinitialisation de connexion sans révéler si une personne détient l’adresse.

Une personne dont l’adresse n’est pas vérifiée, comme une inscription en libre-service, est trouvée aussi, et la réinitialisation menée à terme, que son propriétaire doit confirmer avec replace_unverified_account, donne au propriétaire de la boîte de réception un nouveau compte (une nouvelle personne avec le justificatif de la réinitialisation, une nouvelle organisation et un nouveau projet) et supprime la personne non vérifiée, dont personne n’avait montré que l’adresse lui appartenait.

Un lien de réinitialisation expire une heure après la dernière demande. Tant que le lien d’une personne est actif et date de moins d’un jour, une nouvelle demande renvoie ce même lien (au plus une fois toutes les dix minutes) et repousse son expiration à une heure après la demande, de sorte qu’une demande n’invalide jamais le lien déjà reçu; sinon, un nouveau lien le remplace. Il n’y a pas de limite par adresse.

Terminer une réinitialisation supprime les autres clés d’accès de la personne (toutes ses clés d’accès pour une réinitialisation du mot de passe), supprime le mot de passe lorsque le nouvel identifiant est une clé d’accès, abandonne un changement d’adresse courriel en attente et met fin à toutes les sessions. Avec ou sans personne, la demande renvoie aussi au plus dix invitations adressées au courriel, et chaque invitation au plus une fois par heure.

Parmi les dix projets non supprimés les plus récents dont l’adresse de contact correspond, chaque projet actif avec un forfait du catalogue et dont la propriété demeure en attente depuis l’inscription reçoit de nouveau son invitation d’inscription, même si elle a expiré ou si son destinataire s’est déjà joint comme membre ordinaire.

Accepter cette invitation d’inscription avec la connexion existante termine la prise de propriété; demander la récupération ne modifie à lui seul ni la propriété ni les identifiants. Les invitations par courriel en attente pour les membres et les acheteurs publicitaires de projets actifs avec un forfait du catalogue, ainsi que les invitations en attente pour les administrateurs d’organisations actives, occupent les places restantes, les plus récentes en premier.

Une invitation renvoyée conserve son ID et reçoit un nouveau lien et une nouvelle échéance; l’ancien lien cesse de fonctionner et le nombre d’invitations en attente du projet reste inchangé. Une invitation d’inscription expirée revient comme une nouvelle invitation qui occupe de nouveau une place : le compteur augmente donc de un, et elle est ignorée si le projet est plein.

Les autres invitations expirées, ainsi que les invitations révoquées, acceptées ou partagées par lien, ne sont pas renvoyées.

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

Paramètres

NomEnvoyerRequis ?Description
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
courriel (requis, chaîne)minLength : 3 maxLength : 254 format : « courriel »
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/sign-in-resets'

Réponses

StatutSensCorps et en-têtes
202Accepte une demande de réinitialisation de connexion sans révéler si une personne détient l’adresse.SignInResetAccepted (application/json) ; en-têtes : RateLimit-Policy, RateLimit
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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
POST/api/enrollments

Inscrire CLI

Crée un nouveau projet et son premier agent via une inscription explicite groupée CLI, même si l’adresse de contact appartient déjà à une personne ou un projet. Le courriel de contact reste non vérifié et n’accorde aucune autorité ; les adresses mal formées renvoient invalid_request.

Met en file une invitation d’inscription dans la même transaction. project_name est optionnel ; son omission utilise un nom lisible de deux mots. La relecture idempotente exacte précède les limites de débit. Persistez la clé permanente avant de signaler le succès ; son enveloppe de relecture expire à issuance_expires_at et les nouvelles tentatives ultérieures retournent credential_issuance_expired.

L’enregistrement d’idempotence dure 24 heures.

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

Paramètres

NomEnvoyerRequis ?Description
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
credential_format (optionnel, chaîne)

Doit être oauth, qui répond au couple JWT agent (CLIEnrollmentOAuth). legacy, ou l’omission, répond 410 client_update_required, car les porteurs permanents hérités sont retirés. Un serveur qui n’émet pas de JWT agent répond not_ready. Autorisé : "oauth", "legacy"

intent (optionnel, chaîne)

Objet d’inscription optionnel. Omettre ou signage garde screens=true, advertiser=false. advertising définit advertiser=true, screens=false, et ne change jamais l’affectation du plan de facturation. Autorisé : « signage », « advertising »

client_id (obligatoire, chaîne)Identité d’installation anonyme stable générée à partir de 32 octets CSPRNG et conservée avant la première requête. C’est un matériel de limitation de débit, pas un identifiant de projet. motif : "^cli_[A-Za-z0-9_-]{43}$"
courriel (optionnel, chaîne)

Adresse de contact du projet non vérifiée. Exactement un des deux, courriel ou agentid_claim, est requis. L’inscription crée toujours un nouveau projet et met en file son invitation ; une adresse seule ne confère aucune autorité. minLength : 3 maxLength : 254 format : « email »

agentid_claim (optionnel, chaîne)

Code de revendication AgentID à usage unique depuis la page de connexion AgentID. Exactement un des deux : courriel ou agentid_claim est requis. L’adresse AgentID vérifiée devient le contact du projet et le destinataire de l’invitation. motif : "^agid_[A-Za-z0-9_-]{43}$"

beta_key (optionnel, chaîne)Requis lorsque le serveur a une clé bêta d’inscription configurée. Omettre lorsque le serveur ne limite pas l’inscription.
nom (optionnel, chaîne)par défaut : « Agent » minLength : 1 maxLength : 80
agent_type (optionnel, chaîne)par défaut : « cli » motif : « ^[A-Za-z0-9][A-Za-z0-9._-]{0,31}$ »
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. C’est un logiciel qui la rapporte, et non une personne, donc une valeur absente ou de forme incorrecte est ignorée et ne fait jamais échouer l’enrôlement.

Elle ne fait que compter d’où viennent les installations et n’accorde rien. motif : « ^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$ »

project_name (optionnel, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
setup_code (facultatif, chaîne)

Code de configuration facultatif que la personne a copié depuis le site Web avec l’invite de configuration (deux groupes de quatre lettres et chiffres, casse et trait d’union ignorés). Il lie le nouveau projet à cette visite du site ; un code inconnu ou expiré est ignoré et ne fait jamais échouer l’enrôlement. Il n’accorde rien. pattern: "^[0-9A-Za-z]{4}-?[0-9A-Za-z]{4}$"

organisation (optionnel, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/enrollments'

Réponses

StatutSensCorps et en-têtes
201

Nouveau projet et justificatif porteur permanent. Le projet porte l’adresse de contact non vérifiée dans sa forme fournie épurée. Persister et vérifier le jeton avant de signaler le succès de l’inscription. Le justificatif n’a pas d’expiration programmée mais son enveloppe de livraison de nouvelle tentative chiffrée existe uniquement jusqu’à issuance_expires_at.

CLIEnrollmentOAuth (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
400

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)
409

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)
410

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
500

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)
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)
GET/agentid/start

Démarrer Agent IDSe connecter

Démarre une connexion navigateur AgentID (OIDC) sur l’hôte API dérivé de l’origine publique d’exécution (https://play.<domain> -> https://api.<domain>). Définit un cookie de liaison à usage unique et redirige vers le point d’autorisation AgentID avec PKCE S256. Répond uniquement sur l’hôte API.

Tant que la partie de confiance n’a pas d’identifiant client ni de secret, la route affiche une page simple indisponible avec 503.

Authentification
aucun
Corps de la requête
aucun
ID d’opération
startAgentIDSignIn
Modèle de requête et réponses
shell · modèle de requête
curl --request GET 'https://api.screenrig.ai/agentid/start'

Réponses

StatutSensCorps et en-têtes
302Rediriger vers le point d’autorisation AgentID.pas de corps
503Connexion AgentID indisponible.chaîne (text/html)
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)
GET/agentid/callback

Compléter l’Agent IDSign In

Complète une connexion AgentID navigateur sur l’hôte API. Nécessite iss égal à l’émetteur configuré, le cookie de liaison, et une transaction à usage unique non expirée.

Échange le code avec client_secret_basic et PKCE, vérifie le id_token ES256 (iss, aud, exp avec un décalage de 60 s, nonce) contre le JWKS mis en cache, appelle userinfo et applique les règles du propriétaire, puis affiche une page de code de revendication à usage unique. Un sujet déjà lié à un agent affiche la page déjà inscrit.

Cette route ne crée jamais de projet, d’identité ou d’invitation.

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

Paramètres

NomEnvoyerRequis ?Description
coderequêteoptionnel
étatrequêteoptionnel
issrequêteoptionnel
erreurrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET 'https://api.screenrig.ai/agentid/callback'

Réponses

StatutSensCorps et en-têtes
200Page de code de revendication AgentID à usage unique avec étapes d’installation du plugin.chaîne (text/html)
409Le sujet AgentID est déjà inscrit.chaîne (text/html)
503Connexion AgentID indisponible.chaîne (text/html)
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)
GET/api/project

Obtenir le projet

Le projet appelant. Ne débite pas le compteur API de 1 crédit, donc un projet à zéro restant peut encore lire le restant et récupérer. Après un principal de projet réussi, les réponses JSON /api authentifiées et les réponses de problème incluent ScreenRig-Credits-Remaining, ScreenRig-Credits-Reset, et ScreenRig-Credits-Included en crédits entiers.

Les réponses SSE, runtime, contenu et non authentifiées les omettent.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
getProject

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/project'

Réponses

StatutSensCorps et en-têtes
200ProjetProjet (application/json) ; en-têtes : ScreenRig-Credits-Remaining, ScreenRig-Credits-Reset, ScreenRig-Credits-Included, ScreenRig-Credits-Low
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)
PATCH/api/project

Mettre à jour le projet

Renomme le projet actuel. Les noms contiennent de 1 à 60 caractères imprimables et aucun texte ressemblant à une URL.

Authentification
projectBearer OU dashboardSession
Corps de la requête
ProjectPatch
ID d’opération
updateProject

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
Modèle de requête et réponses
shell · modèle de requête
curl --request PATCH --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/project'

Réponses

StatutSensCorps et en-têtes
200Renomme le projet actuel.Projet (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)
SUPPRIMER/api/project

Supprimer l’agent du projet

Seul le propriétaire du projet ou un administrateur de son organisation peut le supprimer ; tout autre appelant est refusé avec forbidden. Une personne doit aussi être membre du projet.

Un agent a besoin de la capacité projet d’adhésion cible et supprime pour sa personne responsable, qui doit être le propriétaire ou un administrateur d’organisation ; un agent sans personne responsable ne peut pas supprimer, sauf l’agent qui a inscrit le projet alors qu’aucune personne n’a accepté son inscription.

Nécessite aussi le nom et la révision actuels, zéro écran non archivé, aucun crédit, réservation ou dette dans son propre portefeuille et aucune publicité en direct. Un solde négatif accumulé sous les conditions gratuites ou de lancement ne bloque pas ; la suppression l’efface avec une écriture project_delete_writeoff. Met en file d’attente les avis aux membres et utilise la pierre tombale irréversible.

Authentification
projectBearer OU dashboardSession
Corps de la requête
ProjectDeleteConfirmation
ID d’opération
deleteProjectAgent

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
empty_only (optionnel, booléen)

Exiger un projet Screens vide dans la transaction de suppression, y compris contenu, autres agents ou membres, travail et correspondance. Le CLI exige en plus sa provenance d’inscription enregistrée avant d’utiliser cette garde de nettoyage. L’omission conserve la suppression explicite des membres.

nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
révision (obligatoire, entier)minimum : 1
Modèle de requête et réponses
shell · modèle de requête
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/project'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjetSupprimé (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)
GET/api/project/capabilities

Obtenir les capacités du projet

Le plan du projet appelant, les indicateurs indépendants annonceur/écrans avec leur révision, l’ensemble des capacités effectives dérivées, les fonctionnalités de plan dont il dispose (plan_features) et ses limites (limits). Ne reflète jamais une revendication client ; un plan inconnu échoue fermé comme interdit.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
getProjectCapabilities

Paramètres

NomEnvoyerRequis ?Description
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/project/capabilities'

Réponses

StatutSensCorps et en-têtes
200Capacités du projet.ProjectCapabilities (application/json) ; en-têtes : Cache-Control
403interdit - le forfait du projet n’est pas dans le catalogue.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)
GET/api/organizations/{org_id}/audit

Lister l’audit de l’organisation

Le journal d’audit propre à l’organisation : les modifications de ses administrateurs, de ses domaines et de ses paramètres de facturation, avec les mêmes entrées, filtres et formats que GET /api/audit. Nécessite un administrateur de l’organisation. Fait partie du journal d’audit, que le forfait Enterprise inclut ; une organisation dont le forfait n’inclut pas cette fonctionnalité est refusée avec feature_not_in_plan (402).

Chaque forfait consigne ses modifications.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
acteurrequêteoptionnel
actor_kindrequêteoptionnel
sourcerequêteoptionnel
actionrequêteoptionnel
depuisrequêteoptionnel
jusqu’àrequêteoptionnel
curseurrequêteoptionnel
limiterequêteoptionnel
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
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/organizations/ORG_ID/audit'

Réponses

StatutSensCorps et en-têtes
200Une page d’entrées, ou le journal filtré sous forme de fichier.AuditList (application/json), string (text/csv), string (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet), string (application/pdf)
400

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)
402feature_not_in_plan — Le journal d’audit fait partie du forfait Enterprise ; le problème nomme la fonctionnalité, le forfait du compte et required_plan.Problème (application/problem+json)
404

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)
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)
GET/api/organizations/{org_id}/notifications

Lister les notifications d’organisation

Les notifications de l’organisation, de tous les canaux, de la plus ancienne à la plus récente (50 au plus).

Une notification appartient à l’organisation et couvre chacun de ses projets, y compris les projets ajoutés plus tard (project_ids absent), ou les projets choisis (project_ids) ; elle agit sur les écrans, les sources, les campagnes et les cartes de ces projets exactement comme une notification de projet. status est failing tant que les livraisons d’un projet couvert le sont, et failing_since, last_success_at et last_failure_at regroupent celles des projets couverts (le plus ancien début d’échec, le dernier succès et le dernier échec).

Le secret de signature d’un webhook n’est jamais renvoyé ici. Exige un administrateur de l’organisation; toute autre personne obtient not_found.

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

Paramètres

NomEnvoyerRequis ?Description
org_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/organizations/ORG_ID/notifications'

Réponses

StatutSensCorps et en-têtes
200Les notifications de l’organisation.OrganizationNotificationList (application/json)
404

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)
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/organizations/{org_id}/notifications

Créer une notification d’organisation

Crée une notification de l’organisation, avec les membres de POST /api/notifications et les projets qu’elle couvre : project_ids absent ou null couvre tous les projets de l’organisation (ceux qu’elle a et ceux qu’elle obtiendra), une liste couvre exactement ceux-ci, chacun étant un projet actif de cette organisation (sinon invalid_request).

Les destinataires d’une notification par courriel sont owner (le propriétaire de chaque projet couvert), ou des user_ids de personnes de l’organisation (ses administrateurs et ses membres) ou de membres d’un projet couvert; chaque projet n’envoie quand même de courriel qu’aux personnes qui en sont membres.

Une organisation compte au plus 50 notifications, sans compter celles que le système crée par défaut (notification_limit_reached). Les mêmes fonctionnalités de forfait contrôlent les canaux, les règles et les conditions que sur les routes de projet, évaluées d’après le forfait de l’organisation. Chaque projet couvert reçoit notification.created, et la modification est consignée dans le journal d’audit de l’organisation.

Le secret de signature d’un webhook n’est renvoyé que dans cette réponse et dans rotate-secret; un seul secret signe les livraisons de chaque projet couvert. Une nouvelle tentative identique avec la même Idempotency-Key renvoie cette même réponse, secret compris, pendant vingt-quatre heures.

Authentification
dashboardSession
Corps de la requête
OrganizationNotificationWrite
ID d’opération
createOrganizationNotification

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
channel (obligatoire, string)Autorisés : « email », « webhook », « slack », « teams », « pagerduty », « telegram »
description (optionnelle, chaîne)Un nom destiné aux personnes. maxLength: 200
conditions (facultatif, NotificationConditions)
screen_tags (facultatif, ScreenTags)

Étiquettes de sélection de flotte, de 0 à 16 étiquettes exactes uniques, chacune correspondant à la grammaire des étiquettes médias. Sur ScreenPatch, le tableau remplace l’ensemble complet et un tableau vide le vide ; une étiquette en double ou mal formée est invalid_request. Modifier les étiquettes augmente la révision de l’écran (If-Match la protège) et ajoute screen.updated avec details.tags ; cela ne modifie jamais la révision du manifeste.

Les étiquettes ne figurent jamais dans le manifeste d’exécution ni dans l’autorisation.

audience (optionnel, CampaignAudience)

Les écrans qu’une campagne cible : exactement un parmi all (chaque règle correspond), any (au moins une correspond), tag (l’écran porte l’étiquette), screen_id (cet écran) ou folder (les écrans de ce dossier d’écrans et de chaque dossier à l’intérieur, GET /api/screen-folders ; le dossier doit exister).

Les règles s’imbriquent sur 3 niveaux au plus et une audience a au plus 500 règles. {"all": []} correspond à chaque écran du projet ; ailleurs, all et any listent au moins une règle.

min_severity (facultatif, NotificationSeverity)

La gravité d’un avis, de la moins grave à la plus grave. Un avis ouvert a la gravité de sa condition : error pour screen_offline et warning pour toute autre condition, sauf si la gravité de la notification en décide autrement. Un avis résolu et un test sont info. Autorisés : « info », « warning », « error »

severity (facultatif, NotificationSeverityOverrides)

Condition vers gravité pour cette notification, comme {"not_playing": "error"}. Elle compte pour min_severity et est la gravité que Teams et PagerDuty affichent pour la condition. Une condition non listée garde sa valeur par défaut. Lors d’un patch, un objet vide, comme null, efface chaque substitution.

active_hours (facultatif, NotificationActiveHours)

Quand les avis ouverts partent : les fenêtres (screenrig.schedule/v1), lues dans timezone. Un avis qui arrive à échéance pendant qu’elles sont fermées attend la prochaine ouverture (outside hold, la valeur par défaut) et part alors si sa condition tient toujours, de sorte qu’une condition qui disparaît d’abord n’envoie rien, ou est ignoré (outside drop ; last_error outside_hours).

Un avis résolu pour un avis ouvert qui a été envoyé part toujours, dans les heures ou non, et un test les ignore. crashing est mis en attente ou abandonné comme n’importe quelle autre condition. Les heures jugent un avis lorsqu’il part pour la première fois ; un avis en échec est retenté selon le calendrier habituel, quelles que soient les heures.

Ajouter, modifier ou retirer les heures fait juger de nouveau aussitôt les avis mis en attente pour les anciennes.

reach_drop (facultatif, NotificationReachDrop)

La plus petite baisse de la portée d’une campagne pour laquelle un avis reach_dropped est envoyé : screens est le moins d’écrans perdus (1 par défaut) et percent, s’il est défini, la plus petite part des écrans que la campagne atteignait lors de sa publication ; une baisse doit remplir les deux seuils.

Une baisse plus petite ne met aucun avis en file, et un avis en file dont la baisse est passée sous le seuil à l’échéance est ignoré (condition_cleared). Seulement avec la condition reach_dropped ; sur une notification sans elle, invalid_request.

hold_minutes (facultatif, integer)Durée pendant laquelle une condition doit persister avant de notifier. La condition crashing n'est jamais mise en attente. default: 10 minimum: 0 maximum: 1440
recipients (facultatif, NotificationRecipients)

Courriel seulement. owner (la personne propriétaire du projet au moment de l'envoi d'un avis) ou le user_id d'une personne membre du projet; un user_id qui n'est pas celui d'un membre entraîne invalid_request. Chacun reçoit un courriel à son adresse courriel vérifiée. Une personne qui a depuis quitté le projet ou qui n'a aucune adresse courriel vérifiée est ignorée.

url (optionnelle, chaîne)Webhook seulement : URL https sur un hôte Internet public, port 443 (par défaut) ou 8443. Ni userinfo ni fragment. maxLength: 2048 format: "uri"
event_types (facultatif, NotificationEventTypes)

Webhook seulement. Événements du projet également envoyés par POST dès qu'ils se produisent, exactement comme un webhook les envoie : types exacts comme screen.online, ou préfixes se terminant par .* comme screen.*. notification.test n'est jamais diffusé.

destination (facultatif, NotificationDestination)

Slack, Teams, PagerDuty et Telegram seulement ; obligatoire pour eux. L’identifiant sous la forme où le service l’émet : slack, l’URL du webhook entrant (hooks.slack.com) ; teams, l’URL du webhook Workflows (logic.azure.com ou powerplatform.com ; les URL de connecteur Office 365 sont retirées) ; pagerduty, la clé d’acheminement Events API v2 de 32 caractères ; telegram, le jeton du bot.

Une autre forme donne notification_destination_rejected. Il est scellé, jamais renvoyé, et n’apparaît en lecture que sous la forme destination_hint. minLength: 1 maxLength: 2048

telegram_chat_id (facultatif, NotificationTelegramChat)Telegram seulement ; obligatoire pour lui. La conversation où publier : son identifiant numérique (négatif pour un groupe ou un canal) ou @channelname. Ce n’est pas un identifiant secret. pattern: "^(-?[0-9]{1,20}|@[A-Za-z][A-Za-z0-9_]{4,31})$"
activé (optionnel, booléen)vrai
project_ids (facultatif, en ligne)Les projets que couvre la notification; null ou absent couvre tous les projets de l’organisation.
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/organizations/ORG_ID/notifications'

Réponses

StatutSensCorps et en-têtes
201Créée. Le secret d'un webhook n'est affiché qu'ici et sur rotate-secret.Notification (application/json); en-têtes : Cache-Control
400invalid_request, webhook_url_rejected ou notification_destination_rejected.Problème (application/problem+json)
402feature_not_in_plan — comme sur POST /api/notifications, pour le forfait de l’organisation.Problème (application/problem+json)
404

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)
409notification_limit_reached ou idempotency_mismatch.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)
GET/api/organizations/{org_id}/notifications/{id}

Obtenir une notification d’organisation

Une notification de l’organisation, telle que la montre GET /api/organizations/{org_id}/notifications.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
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/organizations/ORG_ID/notifications/RESOURCE_ID'

Réponses

StatutSensCorps et en-têtes
200Une notification.Notification (application/json); en-têtes : ETag
404

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)
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)
PATCH/api/organizations/{org_id}/notifications/{id}

Mettre à jour une notification d’organisation

Modifie tout membre que PATCH /api/notifications/{id} modifie, dans la notification et dans chaque projet couvert, ainsi que project_ids : absent laisse les projets inchangés, null couvre tous les projets, une liste couvre exactement ceux-ci. Un projet qui gagne la notification démarre à son événement courant (rien d’antérieur n’est envoyé); un projet qui la perd voit la notification supprimée.

Chaque projet couvert reçoit notification.updated, et la modification est consignée dans le journal d’audit de l’organisation.

Une modification qui fait couvrir à la notification un projet qu’elle ne couvre pas actuellement est contrôlée comme la création de la notification telle qu’elle sera (son canal, ses règles et ses conditions d’affichage, selon le forfait de l’organisation); couvrir moins de projets n’est jamais contrôlé, et passer d’une liste à tous les projets en couvre toujours davantage. If-Match protège la révision.

Authentification
dashboardSession
Corps de la requête
OrganizationNotificationPatch
ID d’opération
updateOrganizationNotification

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour écrire la ressource actuelle ; une révision périmée fournie est revision_conflict.
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
description (optionnelle, chaîne)Une chaîne vide efface la description. maxLength : 200
conditions (facultatif, NotificationConditions)
screen_tags (facultatif, ScreenTags)

Étiquettes de sélection de flotte, de 0 à 16 étiquettes exactes uniques, chacune correspondant à la grammaire des étiquettes médias. Sur ScreenPatch, le tableau remplace l’ensemble complet et un tableau vide le vide ; une étiquette en double ou mal formée est invalid_request. Modifier les étiquettes augmente la révision de l’écran (If-Match la protège) et ajoute screen.updated avec details.tags ; cela ne modifie jamais la révision du manifeste.

Les étiquettes ne figurent jamais dans le manifeste d’exécution ni dans l’autorisation.

audience (facultatif, en ligne)Comme sur NotificationPatch.
min_severity (facultatif, en ligne)Comme sur NotificationPatch.
severity (facultatif, en ligne)Remplace toutes les substitutions ; null ou un objet vide les efface.
active_hours (facultatif, en ligne)Remplace les heures ; null les efface.
reach_drop (facultatif, en ligne)Remplace le seuil; null l’efface.
hold_minutes (facultatif, integer)minimum: 0 maximum: 1440
recipients (facultatif, NotificationRecipients)

Courriel seulement. owner (la personne propriétaire du projet au moment de l'envoi d'un avis) ou le user_id d'une personne membre du projet; un user_id qui n'est pas celui d'un membre entraîne invalid_request. Chacun reçoit un courriel à son adresse courriel vérifiée. Une personne qui a depuis quitté le projet ou qui n'a aucune adresse courriel vérifiée est ignorée.

url (optionnelle, chaîne)maxLength : 2048 format : « uri »
event_types (facultatif, NotificationEventTypes)

Webhook seulement. Événements du projet également envoyés par POST dès qu'ils se produisent, exactement comme un webhook les envoie : types exacts comme screen.online, ou préfixes se terminant par .* comme screen.*. notification.test n'est jamais diffusé.

destination (facultatif, NotificationDestination)

Slack, Teams, PagerDuty et Telegram seulement ; obligatoire pour eux. L’identifiant sous la forme où le service l’émet : slack, l’URL du webhook entrant (hooks.slack.com) ; teams, l’URL du webhook Workflows (logic.azure.com ou powerplatform.com ; les URL de connecteur Office 365 sont retirées) ; pagerduty, la clé d’acheminement Events API v2 de 32 caractères ; telegram, le jeton du bot.

Une autre forme donne notification_destination_rejected. Il est scellé, jamais renvoyé, et n’apparaît en lecture que sous la forme destination_hint. minLength: 1 maxLength: 2048

telegram_chat_id (facultatif, NotificationTelegramChat)Telegram seulement ; obligatoire pour lui. La conversation où publier : son identifiant numérique (négatif pour un groupe ou un canal) ou @channelname. Ce n’est pas un identifiant secret. pattern: "^(-?[0-9]{1,20}|@[A-Za-z][A-Za-z0-9_]{4,31})$"
activé (optionnel, booléen)
snoozed_until (facultatif, inline)N'envoie rien avant cet instant, au plus 30 jours à l'avance; null met fin à la pause.
project_ids (facultatif, en ligne)Absent, il laisse inchangés les projets que couvre la notification; null couvre tous les projets de l’organisation; une liste couvre exactement ces projets.
Modèle de requête et réponses
shell · modèle de requête
curl --request PATCH --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/organizations/ORG_ID/notifications/RESOURCE_ID'

Réponses

StatutSensCorps et en-têtes
200Notification mise à jour.Notification (application/json); en-têtes : ETag
400invalid_request, webhook_url_rejected ou notification_destination_rejected.Problème (application/problem+json)
402feature_not_in_plan — comme sur PATCH /api/notifications/{id}, pour le forfait de l’organisation.Problème (application/problem+json)
404

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)
412revision_conflict — If-Match est périmé; la propriété current_revision de l’erreur contient la révision actuelle.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)
SUPPRIMER/api/organizations/{org_id}/notifications/{id}

Supprimer une notification d’organisation

Supprime la notification de chaque projet qu’elle couvre, avec notification.deleted dans chacun, et la consigne dans le journal d’audit de l’organisation. Les avis en attente sont marqués comme échoués avec webhook_deleted.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour écrire la ressource actuelle ; une révision périmée fournie est revision_conflict.
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
Modèle de requête et réponses
shell · modèle de requête
curl --request DELETE --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORG_ID/notifications/RESOURCE_ID'

Réponses

StatutSensCorps et en-têtes
204Supprimé.pas de corps; en-têtes : Cache-Control
404

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)
412revision_conflict — If-Match est périmé; la propriété current_revision de l’erreur contient la révision actuelle.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/organizations/{org_id}/notifications/{id}/rotate-secret

Renouveler le secret de la notification d’organisation

Notifications webhook seulement (tout autre canal donne invalid_request). Remplace le secret de signature dans tous les projets couverts à la fois, de sorte qu’un récepteur continue de vérifier un seul secret, et renvoie la notification avec le nouveau dans secret.

Comme sur POST /api/notifications/{id}/rotate-secret, au plus une tentative par projet déjà en cours peut encore arriver signée avec l’ancien secret. Une nouvelle tentative identique avec la même Idempotency-Key renvoie le même nouveau secret pendant vingt-quatre heures.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour écrire la ressource actuelle ; une révision périmée fournie est revision_conflict.
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORG_ID/notifications/RESOURCE_ID/rotate-secret'

Réponses

StatutSensCorps et en-têtes
200La notification et son nouveau secret.Notification (application/json); en-têtes : Cache-Control
400invalid_request : la notification n’est pas un webhook.Problème (application/problem+json)
404

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)
412revision_conflict — If-Match est périmé; la propriété current_revision de l’erreur contient la révision actuelle.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/organizations/{org_id}/notifications/{id}/test

Tester une notification d’organisation

Envoie un notification.test par le premier projet que couvre la notification (selon l’id de projet), comme POST /api/notifications/{id}/test en envoie un par son projet : une livraison, dont la liste des livraisons montre le résultat, tentée une seule fois.

Chaque projet couvert a le même récepteur, la même destination et le même secret, de sorte qu’un seul test valide le canal; le courriel d’un test va aux destinataires de ce projet. Une notification qui ne couvre aucun projet donne invalid_request.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORG_ID/notifications/RESOURCE_ID/test'

Réponses

StatutSensCorps et en-têtes
202La livraison de test en file d’attente.NotificationDelivery (application/json); en-têtes : RateLimit-Policy, RateLimit
404

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
GET/api/organizations/{org_id}/notifications/{id}/deliveries

Lister les livraisons de notification d’organisation

Les journaux de livraison de chaque projet que couvre la notification, en une seule liste, de la plus récente à la plus ancienne selon le moment de mise en file d’attente de chaque ligne. Chaque ligne nomme son projet (project_id), et son id ouvre GET .../deliveries/{delivery_id}/attempts. Renvoyez next_cursor comme auparavant pour la page suivante.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
avantrequêteoptionnelnext_cursor de la page précédente des livraisons.
limiterequêteoptionnel
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/organizations/ORG_ID/notifications/RESOURCE_ID/deliveries'

Réponses

StatutSensCorps et en-têtes
200Une page de livraisons.NotificationDeliveryList (application/json)
404

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)
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)
GET/api/organizations/{org_id}/notifications/{id}/deliveries/{delivery_id}/attempts

Lister les tentatives de livraison de notification d’organisation

Les tentatives d’une livraison, de la plus récente à la plus ancienne, les 20 plus récentes. Une livraison qui n’appartient pas à cette notification donne not_found.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
delivery_idcheminobligatoireL’identifiant d’une des livraisons du webhook.
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/organizations/ORG_ID/notifications/RESOURCE_ID/deliveries/DELIVERY_ID/attempts'

Réponses

StatutSensCorps et en-têtes
200Les tentatives conservées de la livraison.NotificationDeliveryAttemptList (application/json)
404

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)
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)
SUPPRIMER/api/organizations/{org_id}/notifications/{id}/unsubscribed/{user_id}

Réabonner une personne à une notification d’organisation

Envoie de nouveau les courriels d’une notification par courriel à une personne qui s’est désabonnée avec le lien de désabonnement de son courriel, dans chaque projet que couvre la notification (le lien la désabonne de tous). Idempotent : une personne qui n’est pas désabonnée ne change rien, et la réponse est la notification telle qu’elle est.

Un changement incrémente la révision et ajoute notification.updated, avec les détails change resubscribed, user_id et via api, à chaque projet couvert.

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
idcheminobligatoire
user_idcheminobligatoireLe user_id d’une personne de la liste unsubscribed de la notification.
Modèle de requête et réponses
shell · modèle de requête
curl --request DELETE --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORG_ID/notifications/RESOURCE_ID/unsubscribed/USER_ID'

Réponses

StatutSensCorps et en-têtes
200La notification, sans la personne dans unsubscribed.Notification (application/json); en-têtes : ETag
404

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)
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)
GET/api/projects/{project_id}/reports

Lister les types de rapports dans un projet

Liste les types de rapports que construit GET /api/reports/{kind}, avec les filtres de chacun, et les formats dans lesquels un rapport s'écrit. Exige la capacité des rapports.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/reports'

Réponses

StatutSensCorps et en-têtes
200Les types de rapports.ReportCatalog (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)
GET/api/projects/{project_id}/report-subscriptions

Lister les abonnements aux rapports dans un projet

Liste les rapports planifiés du projet, du plus ancien au plus récent (au plus 50), chacun avec son prochain envoi et le résultat du dernier. Exige la capacité du projet.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/report-subscriptions'

Réponses

StatutSensCorps et en-têtes
200Les abonnements aux rapports du projet.ReportSubscriptionList (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/projects/{project_id}/report-subscriptions

Créer un abonnement à un rapport dans un projet

Planifie l'envoi d'un rapport par courriel, en pièce jointe PDF, XLSX ou CSV, chaque jour, chaque semaine ou chaque mois à une heure dans un fuseau horaire.

Chaque envoi couvre la période qui le précède, en jours UTC : la veille, les sept jours précédents ou le mois dernier. recipients sont des membres du projet, désignés par user_id ou par l'adresse courriel du membre; toute autre personne est refusée, de sorte qu'un abonnement ne sert jamais à écrire à un étranger, et un membre qui part cesse de le recevoir.

Une exécution qui échoue est reprise et s’affiche avec last_status failed et last_error. Au plus 50 par organisation, tous projets confondus (report_subscription_limit_reached).

Authentification
projectBearer
Corps de la requête
ReportSubscriptionWrite
ID d’opération
createReportSubscriptionInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)minLength: 1 maxLength: 100
type (obligatoire, chaîne)Valeurs permises : "fleet_health", "uptime", "publishing", "alerts", "alert_log", "proof_of_play"
filters (facultatif, objet)Les filtres du rapport autres que les jours (GET /api/reports les liste).
schedule (obligatoire, ReportSchedule)
format (obligatoire, chaîne)Valeurs permises : "pdf", "xlsx", "csv"
recipients (obligatoire, tableau)user_id ou adresse courriel de membres du projet.
activé (optionnel, booléen)vrai
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/report-subscriptions'

Réponses

StatutSensCorps et en-têtes
201Créé.ReportSubscription (application/json); en-têtes : ETag
400

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)
402feature_not_in_plan — Les rapports font partie de Plus. Le problème nomme la fonctionnalité, le forfait du projet et required_plan.Problème (application/problem+json)
409report_subscription_limit_reached.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)
GET/api/projects/{project_id}/cards

Lister les cartes dans le projet

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
projetrequêteoptionnel
aprèsrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/cards'

Réponses

StatutSensCorps et en-têtes
200Ressource de carteobjet (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/projects/{project_id}/cards

Créer une carte de projet

Authentification
projectBearer
Corps de la requête
CardCreate
ID d’opération
createProjectCard

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
type (obligatoire, chaîne)
majeur (optionnel, entier)minimum : 1
params (obligatoire, objet)
données (optionnel, objet)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/cards'

Réponses

StatutSensCorps et en-têtes
201Ressource de carteCardInstance (application/json)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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/organizations/{org_id}/billing/portal-sessions

Créer un portail pour une organisation

Exige un administrateur désigné d’une organisation active, une authentification par cookie strictement de même origine et un JWT CSRF. L’acteur et l’URL de retour sont déterminés par le serveur. La réponse est privée et no-store. Ouvert aussi à une organisation déléguée à un revendeur, pour sa carte de paiement et ses factures passées.

Authentification
dashboardSession
Corps de la requête
EmptyPaymentRequest
ID d’opération
createOrganizationPortal

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
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/organizations/ORG_ID/billing/portal-sessions'

Réponses

StatutSensCorps et en-têtes
201Résultat de la gestion de la facturation.BillingPortalSession (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)
PUT/api/organizations/{org_id}/billing/auto-top-up

Définir la recharge automatique de l’organisation

Exige un administrateur désigné d’une organisation active, une authentification par cookie strictement de même origine et un JWT CSRF. L’acteur est déterminé par le serveur. La désactivation conserve les montants enregistrés et les dépenses mensuelles; les champs de montant sont ignorés lorsque la recharge est désactivée. La réponse est privée et no-store. La modification des paramètres lève une pause récupérable seulement après que toute facture payable en échec a été annulée en toute sécurité.

L’activer pour une organisation déléguée à un revendeur répond 409 billed_by_reseller; la désactivation reste permise.

Authentification
dashboardSession
Corps de la requête
AutoTopUpSettings
ID d’opération
setOrganizationAutoTopUp

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request PUT --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/organizations/ORG_ID/billing/auto-top-up'

Réponses

StatutSensCorps et en-têtes
200Résultat de la gestion de la facturation.AutoTopUpView (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)
GET/api/organizations/{org_id}/billing/payments

Obtenir les paiements d’une organisation

Vues des paiements d’une organisation active. Nécessite le cookie de son administrateur désigné; la visibilité du personnel ne donne aucun accès aux achats. Les paiements non configurés renvoient available false. Un retour du navigateur n’accorde jamais de crédits.

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

Paramètres

NomEnvoyerRequis ?Description
org_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/organizations/ORG_ID/billing/payments'

Réponses

StatutSensCorps et en-têtes
200Disponibilité des paiements et achats récents.OrganizationPayments (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/organizations/{org_id}/billing/credit-checkouts

Créer un paiement pour une organisation

Lancer un achat prépayé pour l’administrateur désigné d’une organisation active. Nécessite une authentification par cookie de même origine et, pour les sessions JWT, un en-tête CSRF correspondant. Le serveur définit l’organisation, le client, l’acteur et les URL de retour. Les crédits sont appliqués uniquement après confirmation du paiement par le service de facturation. En cas de réponse ambiguë, réessayer avec la même Idempotency-Key et le même montant.

Une organisation déléguée à un revendeur répond 409 billed_by_reseller.

Authentification
dashboardSession
Corps de la requête
object
ID d’opération
createOrganizationCheckout

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
amount_cents (obligatoire, entier)minimum : 10000 maximum : 1000000 format : "int64"
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 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/organizations/ORG_ID/billing/credit-checkouts'

Réponses

StatutSensCorps et en-têtes
201Achat créé ou rejoué. L’URL de paiement est absente après la fin de l’achat. Les réponses sont privées et no-store.CreditPurchase (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)
GET/api/organizations/{org_id}/billing/balance

Obtenir le solde de facturation de l’organisation

Le portefeuille de l’organisation. Nécessite un administrateur d’organisation désigné, un administrateur du revendeur auquel l’organisation est déléguée ou une session de personnel. N’accorde aucune adhésion à un projet.

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

Paramètres

NomEnvoyerRequis ?Description
org_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/organizations/ORG_ID/billing/balance'

Réponses

StatutSensCorps et en-têtes
200Solde de facturation de l’organisation.BillingBalance (application/json) ; en-têtes : Cache-Control
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)
GET/api/organizations/{org_id}/billing/statement

Obtenir le relevé de facturation de l’organisation

Entrées de journal attribuées à cette organisation au moment de la facturation, avec identités du projet et du payeur. Les transferts ne déplacent pas l’accès historique. Les entrées antérieures au contexte organisationnel enregistré restent dans leurs relevés de projet. Lues par les mêmes personnes que le solde (getOrganizationBillingBalance).

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
curseurrequêteoptionnel
limiterequêteoptionnel
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/organizations/ORG_ID/billing/statement'

Réponses

StatutSensCorps et en-têtes
200Relevé de facturation de l’organisation.BillingStatement (application/json) ; en-têtes : Cache-Control
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)
GET/api/organizations/{org_id}/billing/usage

Obtenir l’utilisation de facturation de l’organisation

Le pool d’utilisation de l’organisation et la part de chaque projet pour un mois UTC. Couvre l’utilisation payée par cette organisation; les autres coûts de payeur figurent dans le relevé de l’organisation. Lu par les mêmes personnes que le solde (getOrganizationBillingBalance).

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

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire
curseurrequêteoptionnel
limiterequêteoptionnel
périoderequêteoptionnelMois UTC au format YYYY-MM ; par défaut, le mois en cours.
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/organizations/ORG_ID/billing/usage'

Réponses

StatutSensCorps et en-têtes
200Utilisation de facturation de l’organisation.Utilisation de facturation d’organisation (application/json) ; en-têtes : Cache-Control
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)
GET/api/organizations

Liste des organisations d’agents

Organisations visibles, y compris les organisations vides pour leurs administrateurs. Les noms ne sont pas uniques.

Authentification
agentIdentityBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
agentOrganizationsList
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://api.screenrig.ai/api/organizations'

Réponses

StatutSensCorps et en-têtes
200Résultat d’organisation.Liste d’organisation (application/json) ; en-têtes : Cache-Control
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)
PATCH/api/organizations/{org_id}

Renommer les organisations d’agents

Les administrateurs désignés et les agents dont la personne responsable vérifiée est un administrateur peuvent renommer une organisation. Aucun droit de projet ou adhésion n’est accordé.

Authentification
agentIdentityBearer OU dashboardSession
Corps de la requête
RenommerOrganisation
ID d’opération
agentOrganizationsRename

Paramètres

NomEnvoyerRequis ?Description
org_idcheminobligatoire

Champs du corps de la requête

ChampDescription
nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
Modèle de requête et réponses
shell · modèle de requête
curl --request PATCH --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/organizations/ORG_ID'

Réponses

StatutSensCorps et en-têtes
200Résultat d’organisation.PageVueOrganisation (application/json) ; en-têtes : Cache-Control
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)
PUT/api/project/review-policy

Définir la politique d’examen du projet

Active ou désactive Exiger une révision pour les modifications d’agent. Lorsqu’activé, chaque agent et client de service sur le projet est soumis à un accès Proposer à chaque requête, quel que soit son justificatif. Seul le propriétaire du projet ou un administrateur de l’organisation du projet (interdit autrement) peut modifier cela ; les sessions d’ombre du personnel ne peuvent pas le changer.

If-Match porte review_policy_revision (0 autorisé) et est requis ; une valeur périmée est revision_conflict. Le désactiver nécessite une preuve, la nouvelle clé d’accès ou la preuve de mot de passe que l’approbation de connexion agent utilise ; l’activer non. Les révisions ouvertes restent décidables dans les deux cas. Ajoute project.review_policy_changed.

Authentification
dashboardSession
Corps de la requête
ReviewPolicyUpdate
ID d’opération
setProjectReviewPolicy

Paramètres

NomEnvoyerRequis ?Description
If-Matchen-têteobligatoire

Champs du corps de la requête

ChampDescription
agent_changes_require_review (obligatoire, booléen)
preuve (optionnelle, DashboardProof)
Modèle de requête et réponses
shell · modèle de requête
curl --request PUT --cookie cookies.txt --cookie-jar cookies.txt --header 'If-Match: "REVISION"' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/project/review-policy'

Réponses

StatutSensCorps et en-têtes
200La politique en vigueur.ReviewPolicy (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)
GET/api/projects/{project_id}/project/deletion-preview

Agent d’aperçu de suppression de projet dans le projet

Retourne les détails actuels de confirmation, les bloqueurs de suppression et les appareils archivés qui seront déconnectés. allowed est faux, avec une raison, quand l’appelant ne peut pas supprimer le projet (seul son propriétaire ou un administrateur de son organisation peut ; pour un agent, sa personne responsable) ou qu’un bloqueur subsiste.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
project_idrequêteoptionnelID de projet attendu ; un changement de sélection est refusé.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/deletion-preview'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectDeletionPreview (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)
PUT/api/projects/{project_id}/project/owner

Transférer l’agent propriétaire du projet dans le projet

Le propriétaire transfère la propriété à un membre existant vérifié du projet ; cela n’accorde aucune nouvelle adhésion. L’adhésion du nouveau propriétaire perd tout screen_scope et upload_scope, de sorte que le nouveau propriétaire accède à tout le projet.

Authentification
projectBearer
Corps de la requête
ProjectOwnerTransfer
ID d’opération
transferProjectOwnerAgentInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
user_id (obligatoire, chaîne)minLength : 1 maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/owner'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectContext (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/projects/{project_id}/project/move

Déplacer l’agent de projet dans le projet

Le transfert autorisé par le propriétaire transfère atomiquement l’occupation de l’écran et la nouvelle utilisation au payeur de destination ; les frais historiques conservent leur payeur.

Authentification
projectBearer
Corps de la requête
ProjectMove
ID d’opération
moveProjectAgentInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
organization_id (obligatoire, chaîne)minLength : 1 maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/move'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectContext (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)
GET/api/projects/{project_id}/project/moves

Projet autorisé déplace agent dans projet

Liste les destinations que le propriétaire administre ou dont le domaine vérifié correspond à son courriel vérifié.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
project_idrequêteoptionnelID de projet attendu ; un changement de sélection est refusé.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/moves'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjectMoveDestinations (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)
GET/api/projects/{project_id}/invitations

Lister les invitations dans le projet

Liste les enregistrements du cycle de vie des invitations pour le projet actuel, à l’exclusion des réinitialisations de connexion. Les adresses des destinataires sont visibles par le projet propriétaire, qui les a fournies. Les jetons et URL d’identifiants ne sont jamais listés.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
typerequêteoptionnel
statutrequêteoptionnel
curseurrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/invitations'

Réponses

StatutSensCorps et en-têtes
200Liste les enregistrements du cycle de vie des invitations pour le projet actuel, à l’exclusion des réinitialisations de connexion.InvitationList (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/projects/{project_id}/invitations

Créer des invitations dans le projet

Crée des invitations de membres ou d’acheteurs de publicité. La livraison par courriel ne retourne jamais de justificatif. La livraison par lien est réservée aux membres et retourne une URL, y compris lors d’une relecture idempotente exacte dans les 24 heures. Les invitations par courriel expirent après sept jours ; les liens expirent après 24 heures. Les invitations par courriel en attente du même type, adresse et projet sont réutilisées.

Un membre limité aux écrans n’invite pas de personnes (outside_screen_scope).

Une invitation par courriel project_member adressée à une personne qui serait un invité externe de l’organisation du projet (ce n’est pas son organisation d’appartenance) est soumise à la politique relative aux invités de cette organisation, et guest_not_allowed (403) répond lorsque la politique (allow, domains ou none) n’admet pas l’adresse. L’acceptation de l’invitation vérifie de nouveau.

Le personnel et les administrateurs de l’organisation sont exemptés. Un screen_scope sur l’invitation relève du périmètre d’écrans, que le forfait Enterprise inclut ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402).

Authentification
projectBearer
Corps de la requête
InvitationCreate
ID d’opération
createInvitationsInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
type (obligatoire, chaîne)Autorisé : « project_member », « ad_buyer »
livraison (optionnel, chaîne)Autorisés : « email », « link » par défaut : « email »
courriels (optionnel, tableau)
advertising (optionnel, InvitationAdvertising)Portée détenue par le vendeur : au moins un écran ou emplacement. Écrans seulement, emplacements seulement ou les deux sont acceptés.
upload_scope (facultatif, UploadScope)

Ce qu’un téléverseur peut utiliser (docs/uploaders.md) : les listes de lecture dont il modifie les pages et les dossiers de médias dans lesquels il téléverse. Les dossiers sont exactement ceux qui sont listés, jamais leurs sous-dossiers. Un id qui ne désigne aucun objet actif du projet à l’écriture donne invalid_request à sa position ; une suppression ultérieure laisse un id mort, qui ne donne aucun droit.

Le périmètre est lu à chaque requête, de sorte qu’un changement s’applique à la suivante.

screen_scope (facultatif, ScreenScope)

Ce sur quoi un membre ou un agent à périmètre peut agir (docs/screen-scope.md) : les écrans des dossiers d’écrans listés et de chaque dossier qu’ils contiennent, et les écrans listés. Au moins un ID dans l’ensemble. Un ID qui ne nomme aucun dossier ou écran actif du projet au moment de l’écriture est invalid_request à sa position ; une suppression ultérieure laisse un ID mort, qui n’accorde rien.

Le périmètre est lu à chaque requête, de sorte qu’une modification s’applique à la suivante. Les étiquettes ne sont jamais un périmètre.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/invitations'

Réponses

StatutSensCorps et en-têtes
201Crée des invitations de membres ou d’acheteurs de publicité.InvitationCreated (application/json); en-têtes : RateLimit-Policy, RateLimit
402

feature_not_in_plan — un périmètre d’écrans nécessite Enterprise, et un périmètre de téléversement (un téléverseur) nécessite Plus ; le problème nomme la fonctionnalité, le forfait du compte et required_plan. Restreindre un périmètre de téléversement et retirer l’un ou l’autre périmètre sont toujours autorisés.

Problème (application/problem+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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
GET/api/projects/{project_id}/project

Obtenir le projet dans le projet

Le projet appelant. Ne débite pas le compteur API de 1 crédit, donc un projet à zéro restant peut encore lire le restant et récupérer. Après un principal de projet réussi, les réponses JSON /api authentifiées et les réponses de problème incluent ScreenRig-Credits-Remaining, ScreenRig-Credits-Reset, et ScreenRig-Credits-Included en crédits entiers.

Les réponses SSE, runtime, contenu et non authentifiées les omettent.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project'

Réponses

StatutSensCorps et en-têtes
200ProjetProjet (application/json) ; en-têtes : ScreenRig-Credits-Remaining, ScreenRig-Credits-Reset, ScreenRig-Credits-Included, ScreenRig-Credits-Low
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)
PATCH/api/projects/{project_id}/project

Mettre à jour le projet dans le projet

Renomme le projet actuel. Les noms contiennent de 1 à 60 caractères imprimables et aucun texte ressemblant à une URL.

Authentification
projectBearer
Corps de la requête
ProjectPatch
ID d’opération
updateProjectInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
Modèle de requête et réponses
shell · modèle de requête
curl --request PATCH --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project'

Réponses

StatutSensCorps et en-têtes
200Renomme le projet actuel.Projet (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)
SUPPRIMER/api/projects/{project_id}/project

Supprimer l’agent du projet dans le projet

Seul le propriétaire du projet ou un administrateur de son organisation peut le supprimer ; tout autre appelant est refusé avec forbidden. Une personne doit aussi être membre du projet.

Un agent a besoin de la capacité projet d’adhésion cible et supprime pour sa personne responsable, qui doit être le propriétaire ou un administrateur d’organisation ; un agent sans personne responsable ne peut pas supprimer, sauf l’agent qui a inscrit le projet alors qu’aucune personne n’a accepté son inscription.

Nécessite aussi le nom et la révision actuels, zéro écran non archivé, aucun crédit, réservation ou dette dans son propre portefeuille et aucune publicité en direct. Un solde négatif accumulé sous les conditions gratuites ou de lancement ne bloque pas ; la suppression l’efface avec une écriture project_delete_writeoff. Met en file d’attente les avis aux membres et utilise la pierre tombale irréversible.

Authentification
projectBearer
Corps de la requête
ProjectDeleteConfirmation
ID d’opération
deleteProjectAgentInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)ID de projet attendu. Le serveur refuse l’action si l’identifiant actuel ou la session cookie cible un autre projet ; les clients navigateur envoient l’ID de projet de la page. minLength : 1 maxLength : 200
empty_only (optionnel, booléen)

Exiger un projet Screens vide dans la transaction de suppression, y compris contenu, autres agents ou membres, travail et correspondance. Le CLI exige en plus sa provenance d’inscription enregistrée avant d’utiliser cette garde de nettoyage. L’omission conserve la suppression explicite des membres.

nom (obligatoire, ProjectName)Nom de projet imprimable tronqué. Rejette les contrôles, textes ressemblant à des URL, @, www., et ://. minLength : 1 maxLength : 60
révision (obligatoire, entier)minimum : 1
Modèle de requête et réponses
shell · modèle de requête
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project'

Réponses

StatutSensCorps et en-têtes
200Résultat du cycle de vie du projetProjetSupprimé (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)
GET/api/projects/{project_id}/applications

Lister les applications dans le projet

Liste les applications, les plus récentes d’abord, au maximum 500 par page. Les noms sont des étiquettes et ne doivent pas être uniques ; adressez une application par son identifiant. next_cursor est la position de la dernière ligne retournée tant qu’il reste des lignes ; renvoyez-le comme after, avec les mêmes filtres, pour la page suivante. next_cursor est null à la dernière page.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
aprèsrequêteoptionnelnext_cursor de la page précédente de la même liste, avec les mêmes filtres. Omission commence à la ligne la plus récente. Une valeur qui n’est pas un tel curseur est invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/applications'

Réponses

StatutSensCorps et en-têtes
200ApplicationsApplicationList (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/projects/{project_id}/applications

Téléverser l’application dans le projet

Diffuse un tar.gz produit par CLI directement dans une mise en scène durable bornée. Les métadonnées sont dans les en-têtes, donc l’archive n’est jamais enveloppée en base64 ni matérialisée en JSON par le serveur.

Le proxy devant l’API met fin à une requête à laquelle il n’a pas répondu en environ 100 s, donc une grande archive sur une liaison montante lente échoue ici ; POST /api/applications/uploads envoie plutôt l’archive directement au magasin d’objets.

Authentification
projectBearer
Corps de la requête
string
ID d’opération
uploadApplicationInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire
ScreenRig-Archive-SHA256en-têteobligatoire
ScreenRig-Expanded-Bytesen-têteobligatoire
ScreenRig-File-Counten-têteobligatoire
ScreenRig-SDK-Versionen-têteoptionnel
ScreenRig-Application-Nameen-têteoptionnel

Nom ASCII de l’application ; exclusif avec ScreenRig-Application-Name*. Les espaces en début et fin sont supprimés. Les contrôles et valeurs d’en-tête dupliquées sont rejetés. Le nom décodé est limité à 120 valeurs scalaires Unicode.

ScreenRig-Application-Name*en-têteoptionnel

Nom d’application Unicode encodé en RFC 8187 UTF-8'' suivi d’octets UTF-8 encodés en pourcentage (langue vide, jeu de caractères UTF-8 exact). Mutuellement exclusif avec ScreenRig-Application-Name. Les échappements invalides, UTF-8 invalide, contrôles et valeurs d’en-tête en double sont rejetés.

Les espaces blancs en début et fin sont supprimés ; le nom décodé est limité à 120 valeurs scalaires Unicode. Aucun en-tête de nom ne peut renommer une mise à jour de version. Cela évite les Unicode bruts dans les valeurs d’en-tête HTTP.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'ScreenRig-Archive-SHA256: VALUE' --header 'ScreenRig-Expanded-Bytes: VALUE' --header 'ScreenRig-File-Count: VALUE' --header 'Content-Type: application/gzip' --data-binary '@request.bin' 'https://api.screenrig.ai/api/projects/PROJECT_ID/applications'

Réponses

StatutSensCorps et en-têtes
202Téléversement acceptéOpération acceptée (application/json) ; en-têtes : RateLimit-Policy, RateLimit
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/projects/{project_id}/applications/uploads

Créer un téléversement d’application dans le projet

Déclare un téléversement direct d’un tar.gz produit par la CLI qui crée une nouvelle application. La réponse est une autorisation signée pour exactement un PUT d’objet de l’archive, donc les octets vont directement au magasin d’objets et ne passent jamais par l’API, dont le proxy met fin à une requête à laquelle il n’a pas répondu en environ 100 s.

Envoyez l’archive par PUT à upload_url, puis validez avec POST /api/applications/uploads/{id}/commit et attendez l’opération. L’application, sa version et l’opération de réception existent dès cette réponse, comme après POST /api/applications. Un téléversement non validé dans les 24 heures échoue, et une application qui n’a jamais publié de version est supprimée.

La même Idempotency-Key et le même corps renvoient le même téléversement avec une URL fraîchement signée. GET /api/capabilities définit features.application_direct_uploads là où ces routes sont servies.

Authentification
projectBearer
Corps de la requête
ApplicationUploadDeclaration
ID d’opération
createApplicationUploadInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
nom (optionnel, chaîne)

Nom d’une nouvelle application, rogné ; au plus 120 caractères Unicode et aucun caractère de contrôle. Omis ou vide sélectionne un nom généré. Une déclaration de version (POST /api/applications/{id}/uploads) ne doit pas en porter un. maxLength: 120

sha256 (obligatoire, chaîne)SHA-256 des octets de l’archive. pattern: "^[0-9a-f]{64}$"
compressed_bytes (obligatoire, entier)Taille de l’archive en octets. minimum : 1 maximum : 104 857 600
expanded_bytes (obligatoire, entier)minimum : 1 maximum : 262 144 000
file_count (obligatoire, entier)minimum : 1 maximum : 5 000
sdk_version (optionnel, chaîne)maxLength : 64
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/applications/uploads'

Réponses

StatutSensCorps et en-têtes
201Autorisation signée pour exactement un PUT d’objet de l’archive. Envoyez la méthode retournée et chaque en-tête retourné textuellement ; le PUT doit commencer avant expires_at, deux heures après la déclaration.ApplicationUploadSession (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
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)
GET/api/projects/{project_id}/playlists

Lister les listes de lecture V2 dans le projet

Liste de playlists versionnées pouvant exposer des pages d’emplacement publicitaire. La liste v1 refuse une page contenant un document publicitaire avec version_required au lieu de le filtrer.

Pages comme listPlaylists, les plus récentes d’abord, au maximum 200 par page et moins une fois qu’une page contient 8 Mio de listes de lecture stockées. next_cursor est la position de la dernière ligne retournée tant qu’il reste des lignes ; renvoyez-le comme after, avec les mêmes filtres, pour la page suivante. next_cursor est nul à la dernière page. library=true liste à la place les listes de lecture de la Bibliothèque de l’organisation (en lecture seule ; planifiez-les ou créez-en à partir de leurs modèles).

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
libraryrequêteoptionnel

true liste le projet Bibliothèque de l’organisation au lieu de ce projet : ses éléments sont en lecture seule ici et portent library true. Une organisation sans Bibliothèque, ou le projet Bibliothèque lui-même, ne liste rien avec true.

aprèsrequêteoptionnelnext_cursor de la page précédente de la même liste, avec les mêmes filtres. Omission commence à la ligne la plus récente. Une valeur qui n’est pas un tel curseur est invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playlists'

Réponses

StatutSensCorps et en-têtes
200Listes de lecture avec l’union de la page d’emplacement publicitaire.PlaylistV2List (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/projects/{project_id}/playlists

Créer une liste de lecture V2 dans le projet

Entrée de création pour l’union des pages d’emplacement publicitaire. Au maximum 16 pages d’emplacement, au moins une page ordinaire sans visibilité, et la réutilisation d’une définition d’emplacement sur différentes pages restent des vérifications serveur. La résolution de référence et le DNS restent des vérifications serveur.

Une écriture contenant une page iframe que le Player web ne peut pas encadrer est tout de même enregistrée ; sa réponse comprend des avertissements (PlaylistWarning) et le journal du projet reçoit un événement playlist.iframe_framing_refused par page concernée.

Une écriture dont le src d’iframe, le fallback_src ou les params d’application lisent un jeton d’écran ({screen.field.NAME} et les autres des schémas de primitives) qui manque à un écran affichant la liste de lecture répond aussi avec un avertissement screen_fact_missing nommant les 20 premiers de ces écrans ; les manifestes de ces écrans omettent cette primitive.

Un src ou fallback_src d’iframe qui est un lien Google Slides, Docs ou Sheets (partage, publication sur le Web ou intégration) ou un lien Embed Microsoft 365 OneDrive ou SharePoint est stocké reconstruit pour l’écran, où Slides boucle et avance selon le delayms du lien plafonné à la durée de la page, et Docs, Sheets, Word et Excel se rechargent toutes les 5 minutes.

Un code d’intégration <iframe> collé dans src ou fallback_src est lu pour son src. Un fichier qui demande aux spectateurs de se connecter est refusé avec document_not_shared (400), dont errors[0].field est ce src ou fallback_src et dont detail nomme le paramètre de partage à modifier.

Authentification
projectBearer
Corps de la requête
PlaylistCreateRequest
ID d’opération
createPlaylistV2InProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Screenrig-Review-Noteen-têteoptionnel

Note optionnelle du proposant sur une écriture de classe revue, envoyée en UTF-8 encodé en pourcentage (ce que encodeURIComponent de JavaScript écrit). Le serveur la décode en pourcentage (une échappée invalide est 400 invalid_request) ; la note décodée est du texte brut, au plus 280 caractères après suppression des espaces, sans caractères de contrôle (sinon 400 invalid_request).

Stocké lors de la révision quand l’écriture devient une ; ignoré lorsqu’elle s’applique en direct.

Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playlists'

Réponses

StatutSensCorps et en-têtes
202

L’écriture est devenue une révision et attend l’approbation d’une personne (docs/reviews.md), sous l’accès Proposer, ou à n’importe quel niveau d’accès quand elle atteint un écran d’un dossier d’écrans protégé, où un second approbateur décide (docs/screen-scope.md). Une personne approuve, rejette ou demande des modifications dans le tableau de bord à review.url.

Une relecture d’Idempotency-Key répond avec le même corps.

ReviewPending (application/json)
201Liste de lecture avec ses pages adslot.PlaylistV2 (application/json)
402

feature_not_in_plan — Déclarer des champs, verrouiller une primitive ou modifier une liste de lecture qui déclare des champs relève des modèles de liste de lecture, que le forfait du projet n’inclut pas ; required_plan nomme le forfait qui les inclut. Créer une liste de lecture à partir d’un modèle est toujours autorisé.

Un format de 2 afficheurs ou plus (un mur vidéo) fait partie de Plus ; un format de région et une liste de lecture sans format sont inclus dans tous les forfaits. Le problème nomme la fonctionnalité, le forfait du projet et required_plan.

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)
GET/api/projects/{project_id}/screens

Lister les écrans dans le projet

La liste par défaut retourne les écrans pairing_pending et actifs. Passez state=archived pour lister uniquement les écrans archivés. Passez tag pour lister uniquement les écrans dont les tags contiennent ce tag exact ; les écrans sans tag sont omis lorsque le filtre est présent.

Passez field, une fois par champ, sous la forme NAME:VALUE pour ne lister que les écrans dont les champs contiennent toutes les valeurs, et near sous la forme LAT,LON,KM pour ne lister que les écrans situés à KM kilomètres ou moins du point; les écrans sans emplacement sont omis, et chaque filtre se combine avec state et tag.

Passez folder comme ID de dossier d’écrans pour ne lister que les écrans directement à l’intérieur (pas ceux de ses sous-dossiers), ou root pour les écrans hors de tout dossier.

Les écrans sont du plus récent au plus ancien, 500 par page au plus. next_cursor est la position de la dernière ligne renvoyée tant qu’il reste des lignes ; renvoyez-le comme after, avec les mêmes filtres, pour la page suivante. next_cursor est null sur la dernière page. Un appelant limité aux écrans (docs/screen-scope.md) ne liste que les écrans de son périmètre.

Une requête qui ne nomme aucun projet omet chaque projet où l’appelant est limité aux écrans ; nommez le projet pour le lister.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
étatrequêteoptionnelOmettre pour pairing_pending et active. Passez archived pour lister uniquement les écrans archivés.
étiquetterequêteoptionnelÉtiquette d’écran exacte. Les écrans non étiquetés sont omis lorsque ce filtre est présent.
fieldrequêteoptionnel

NAME:VALUE, séparé au premier deux-points : seuls les écrans dont le champ NAME contient exactement VALUE. Répétez le paramètre pour plusieurs champs; chacun doit correspondre, et un nom ne peut être donné qu'une fois. Un paramètre mal formé ou répété entraîne invalid_request, qui nomme field.

nearrequêteoptionnel

LAT,LON,KM en degrés décimaux et en kilomètres, par exemple 47.6062,-122.3321,25 : seuls les écrans dont l'emplacement se trouve à KM kilomètres ou moins du point. La latitude va de -90 à 90, la longitude de -180 à 180, et KM est supérieur à 0 et d'au plus 20038. Les écrans sans emplacement sont omis. Une valeur mal formée entraîne invalid_request, qui nomme near.

dossierrequêteoptionnelUn ID de dossier d’écrans ne conserve que les écrans directement dans ce dossier, pas ceux de ses sous-dossiers ; root ne conserve que les écrans hors de tout dossier. Omettre liste tous les écrans.
aprèsrequêteoptionnelnext_cursor de la page précédente de la même liste, avec les mêmes filtres. Omission commence à la ligne la plus récente. Une valeur qui n’est pas un tel curseur est invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screens'

Réponses

StatutSensCorps et en-têtes
200ÉcransScreenList (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)
GET/api/projects/{project_id}/screen-folders

Lister les dossiers d’écrans dans le projet

Liste chaque dossier d’écrans du projet, au maximum 1000, ordonnés par nom.

Les dossiers organisent les écrans et les ciblent : une feuille d’audience de campagne {"folder": ID} correspond aux écrans de ce dossier et de chaque dossier à l’intérieur, un sélecteur d’action de flotte by:folder agit sur les mêmes écrans, et le default_playlist_id d’un dossier est ce que montrent ses écrans sans liste de lecture propre. parent_id est null à la racine du projet ; construisez l’arbre à partir de parent_id. screens compte les écrans actifs directement à l’intérieur de chaque dossier.

Le dossier d’un écran est Screen.folder_id. Un appelant limité aux écrans (docs/screen-scope.md) liste les dossiers de son périmètre et les dossiers au-dessus, qui sont en lecture seule pour que son arbre ait une racine ; les dossiers au-dessus n’ont pas de nombre d’écrans et les dossiers frères sont masqués. Une requête qui ne nomme aucun projet omet chaque projet où l’appelant est limité aux écrans.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screen-folders'

Réponses

StatutSensCorps et en-têtes
200Dossiers d’écransScreenFolderList (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/projects/{project_id}/screen-folders

Créer un dossier d’écrans dans le projet

Crée un dossier d’écrans à la racine du projet (parent_id null ou absent) ou à l’intérieur de parent_id. Les noms sont tronqués, contiennent de 1 à 100 caractères Unicode sans contrôles, ne sont ni "." ni "..", et sont uniques parmi les dossiers frères (resource_conflict).

Une organisation contient au maximum 1000 dossiers, tous projets confondus (quota_exceeded), imbriqués au maximum à 10 niveaux (invalid_request). default_playlist_id, lorsqu’il est défini, doit nommer une liste de lecture approuvée (playlist_not_approved). Émet screen.folder_created.

Un appelant limité aux écrans (docs/screen-scope.md) ne crée un dossier que dans un dossier de son périmètre ; la racine du projet ou tout autre parent est outside_screen_scope. Créer un dossier dans un dossier protégé est une révision protected_change (202 pending_review) décidée par un second approbateur.

Authentification
projectBearer
Corps de la requête
ScreenFolderCreate
ID d’opération
createScreenFolderInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)Tronqué ; 1 à 100 caractères Unicode, sans contrôles, ni . ou .., unique parmi les dossiers frères. minLength: 1 maxLength: 100
parent_id (optionnel, en ligne)Le dossier dans lequel le créer ; null ou absent pour la racine du projet.
default_playlist_id (optionnel, chaîne)Une liste de lecture approuvée pour les écrans du dossier qui n’ont pas la leur. minLength: 1
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screen-folders'

Réponses

StatutSensCorps et en-têtes
201Dossier créé.ScreenFolder (application/json) ; en-têtes : ETag
202

L’écriture est devenue une révision et attend l’approbation d’une personne (docs/reviews.md), sous l’accès Proposer, ou à n’importe quel niveau d’accès quand elle atteint un écran d’un dossier d’écrans protégé, où un second approbateur décide (docs/screen-scope.md). Une personne approuve, rejette ou demande des modifications dans le tableau de bord à review.url.

Une relecture d’Idempotency-Key répond avec le même corps.

ReviewPending (application/json)
403outside_screen_scope comme sur OutsideScreenScope, ou approver_required - un membre limité aux écrans qui ne peut pas approuver les révisions ne modifie ni ce qu’un écran diffuse ni quand (docs/screen-scope.md).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/projects/{project_id}/screens/move

Déplacer les écrans dans le projet

Déplace des écrans (screen_ids) et des dossiers (folder_ids) dans un dossier (folder_id), ou à la racine du projet lorsque folder_id est null, en une seule requête tout ou rien d’au plus 1000 identifiants. Chaque identifiant doit exister (not_found). Un dossier ne peut pas être déplacé dans lui-même ni dans un dossier qu’il contient, et le déplacement doit maintenir chaque dossier dans une profondeur maximale de 10 niveaux (invalid_request).

Les éléments déjà dans la destination sont laissés tels quels ; chaque écran et dossier déplacé fait avancer sa révision. Les écrans déplacés réévaluent leur liste de lecture en 15 secondes environ : levels nomme les campagnes dont ils rejoignent ou quittent l’audience de dossier et les listes de lecture par défaut de dossier qu’ils gagnent ou perdent. Émet screen.moved.

Un appelant limité aux écrans (docs/screen-scope.md) déplace des écrans et des dossiers de son périmètre vers un dossier de son périmètre ; tout ID ou toute destination en dehors de celui-ci, ainsi que la racine du projet, fait refuser tout le déplacement (outside_screen_scope), y compris quand un écran quitte le périmètre entre la vérification et l’écriture.

Un déplacement vers l’intérieur ou l’extérieur d’un dossier protégé est une révision protected_change (202 pending_review) décidée par un second approbateur.

Authentification
projectBearer
Corps de la requête
ScreenMove
ID d’opération
moveScreensInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
folder_id (obligatoire, en ligne)Dossier de destination ; null pour la racine du projet.
screen_ids (optionnel, array)
folder_ids (optionnel, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screens/move'

Réponses

StatutSensCorps et en-têtes
200Combien d’écrans et de dossiers ont été déplacés, et les levels que les écrans déplacés gagnent ou perdent.ScreenMoveResult (application/json)
202

L’écriture est devenue une révision et attend l’approbation d’une personne (docs/reviews.md), sous l’accès Proposer, ou à n’importe quel niveau d’accès quand elle atteint un écran d’un dossier d’écrans protégé, où un second approbateur décide (docs/screen-scope.md). Une personne approuve, rejette ou demande des modifications dans le tableau de bord à review.url.

Une relecture d’Idempotency-Key répond avec le même corps.

ReviewPending (application/json)
403outside_screen_scope comme sur OutsideScreenScope, ou approver_required - un membre limité aux écrans qui ne peut pas approuver les révisions ne modifie ni ce qu’un écran diffuse ni quand (docs/screen-scope.md).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)
GET/api/projects/{project_id}/schedule/calendar

Obtenir le calendrier de programmation dans le projet

Répond à ce que jouent les écrans d’un sujet sur [from, to) et pourquoi, pour le calendrier de programmation du tableau de bord : exactement un parmi screen_id, folder_id (les écrans du dossier et de chaque dossier qu’il contient), tag ou campaign_id (les écrans de son audience).

Les écrans dont les piles ont des entrées identiques (mêmes niveaux, défaut, fuseau horaire et nombre d’afficheurs) partagent un groupe avec une seule chronologie, de sorte qu’un grand sujet coûte quelques dizaines de chronologies ; un groupe liste jusqu’à 500 de ses écrans et une réponse au plus 200 groupes (truncated).

Chaque groupe porte sa pile, la plus prioritaire en premier (prise de contrôle, campagnes qui atteignent les écrans, leurs propres entrées de programmation, puis la liste de lecture par défaut ou celle du dossier le plus proche), les périodes de chaque niveau (plays sur chaque afficheur qu’il cible, partial avec les afficheurs sur lesquels il joue, outranked, ou conditional tant qu’il attend une interaction ou une condition de données que seul un Player observe), ce que montre chaque afficheur (on_screen ; la région principale d’une page complète) et conflicts (deux campagnes de même priorité en vigueur à la fois ; un niveau en vigueur qui ne joue jamais). from et to sont des instants RFC 3339, to après from, à au plus 93 jours d’écart ; ils sont tronqués à la minute.

Les règles sont lues dans le fuseau horaire de chaque groupe, comme le font le balayage et chaque Player ; chaque niveau est jugé jouable. Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer un screen_id ou un folder_id dans son périmètre ; une étiquette, un campaign_id ou l’absence de sujet est outside_screen_scope.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
derequêteobligatoire
àrequêteobligatoire
screen_idrequêteoptionnel
folder_idrequêteoptionnel
étiquetterequêteoptionnel
campaign_idrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/schedule/calendar?from=FROM&to=TO'

Réponses

StatutSensCorps et en-têtes
200Le calendrier du sujet.ScheduleCalendar (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)
GET/api/projects/{project_id}/schedule/imports/template

Obtenir le modèle d’importation d’horaires dans le projet

Répond avec une feuille contenant les colonnes que lit une importation d’horaires et trois lignes d’exemple (un code d’écran, un dossier d’écrans et une étiquette), en CSV ou, avec format=xlsx, en classeur XLSX.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/schedule/imports/template'

Réponses

StatutSensCorps et en-têtes
200La feuille modèle.string (text/csv), string (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)
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/projects/{project_id}/schedule/imports/preview

Aperçu de l’importation d’horaires dans le projet

Lit une feuille de lignes d’horaire par rapport au projet et répond à ce que ferait sa validation, sans rien écrire.

Chaque ligne nomme une cible (un écran par identifiant, par la valeur d’un champ d’écran comme un code de salle, ou par nom ; folder:NAME ; tag:NAME ; plusieurs séparées par ; ou |), un contenu (un nom de fichier multimédia, ou playlist:NAME ou un identifiant de liste de lecture), un début et une fin (une date seule comme fin ferme ce jour), et facultativement timezone, days (Mon-Fri), une plage quotidienne (daily_start, daily_end), priority de 0 à 100, un nom et des numéros d’affichage.

Les heures sont lues sur l’horloge propre à chaque écran ; une colonne timezone les convertit depuis un autre fuseau.

Chaque ligne est vérifiée et signale ses erreurs par colonne : écran, dossier ou étiquette inconnu ou ambigu, fichier manquant ou ambigu, fichier qui ne peut pas remplir un écran, heures invalides ou inversées, fin dans le passé, aucune indication de temps, écran sans fuseau horaire ni liste de lecture par défaut, deux lignes en vigueur en même temps sur un écran à la même priorité, et plus de niveaux que n’en contient un écran (32), ou plus de campagnes que n’en contient son organisation, tous projets confondus (100 ; chaque niveau partagé en compte une).

Les lignes qui s’accordent sur le contenu, les heures, la priorité et le nom forment un seul niveau : un écran donne une entrée de l’horaire propre à cet écran ; plusieurs écrans, un dossier ou une étiquette donnent un niveau partagé (une campagne), qui l’emporte sur les niveaux propres d’un écran.

La réponse liste les niveaux avec ce que fait une validation à chacun (create, update, unchanged), les niveaux qu’une exécution antérieure de la même importation a créés et que la feuille n’a plus (removals), les piles des écrans telles qu’elles seraient (calendar), et une empreinte à envoyer à la validation. La feuille est des lignes JSON, un CSV ou un XLSX, de 5 000 lignes au plus.

Non disponible pour un appelant limité aux écrans (outside_screen_scope). L’importation d’horaires fait partie du forfait Enterprise ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402). Le modèle est ouvert à tous les forfaits.

Authentification
projectBearer
Corps de la requête
ScheduleImportRequest
ID d’opération
previewScheduleImportInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
namerequêteoptionnelLe nom de l’importation ; importer de nouveau sous le même nom met à jour les niveaux qu’elle a créés (default import). Envoyé avec un corps de fichier.
fuseau horairerequêteoptionnelLe fuseau IANA dans lequel les heures sont écrites quand une ligne n’a pas de timezone. Sans fuseau, les heures sont lues sur l’horloge propre à chaque écran.
sourcerequêteoptionnelLe nom du fichier, enregistré avec l’importation.
code_fieldrequêteoptionnelLire un code d’écran seulement dans ce champ d’écran (par exemple code ou room_id) ; sinon un code correspond à n’importe quel champ.

Champs du corps de la requête

ChampDescription
nom (optionnel, chaîne)Identifie l’importation ; le même nom met à jour les niveaux qu’elle a créés (default import). minLength: 1 maxLength: 80
source (facultatif, chaîne)Le fichier d’où viennent les lignes. maxLength: 200
fuseau horaire (optionnel, chaîne)Le fuseau IANA dans lequel les heures sont écrites quand une ligne n’a pas de timezone.
code_field (facultatif, chaîne)Lire un code d’écran seulement dans ce champ d’écran.
fingerprint (facultatif, chaîne)L’empreinte de l’aperçu ; requise par la validation.
rows (obligatoire, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/schedule/imports/preview'

Réponses

StatutSensCorps et en-têtes
200L’aperçu. valid est false tant qu’une ligne a une erreur.ScheduleImportPreview (application/json)
402feature_not_in_plan — L’importation d’horaires fait partie du forfait Enterprise ; le problème nomme la fonctionnalité, le forfait du compte et required_plan.Problème (application/problem+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/projects/{project_id}/schedule/imports

Valider l’importation d’horaires dans le projet

Valide une importation prévisualisée : la même feuille et l’empreinte que son aperçu a renvoyée. Chaque niveau est créé, mis à jour ou supprimé, les horaires des écrans et les niveaux partagés sont écrits en une seule transaction, et l’événement d’importation schedule.imported est ajouté : toutes les lignes s’appliquent ou aucune.

Les listes de lecture à fichier unique dont les fichiers de la feuille ont besoin sont créées en premier (elles ne changent rien sur aucun écran). Une feuille dont les lignes ont des erreurs est refusée (schedule_import_invalid) ; un projet qui a changé depuis l’aperçu, ou des lignes qui se lisent autrement, est refusé (schedule_import_stale), et le client refait un aperçu.

Importer de nouveau la même feuille sous le même nom ne change rien ; une ligne modifiée met à jour son niveau et une ligne retirée supprime son niveau. Demande une personne qui peut approuver dans le tableau de bord et, pour un agent, des identifiants avec accès en écriture.

Une validation qui mettrait à jour ou supprimerait une campagne réservée répond reserved_item (403) et n’écrit rien, sauf si elle est validée par une personne qui peut approuver.

Une validation qui atteint un écran protégé est refusée en entier avec protected_target, même quand l’importation n’a aucun niveau mais retire les entrées d’importation d’un écran protégé ou supprime une campagne d’importation dont l’audience en atteint un.

Dans un projet avec des dossiers d’écrans protégés, une validation dont l’aperçu échoue à cause d’un service, et non de la feuille, répond dependency_unavailable et n’écrit rien : renvoyez la même requête après une courte attente. Une erreur de validation de feuille, de campagne ou d’écran répond comme la validation le ferait (invalid_request et les autres problèmes ci-dessus).

Non disponible pour un appelant limité aux écrans. L’importation d’horaires fait partie du forfait Enterprise ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402). Le modèle est ouvert à tous les forfaits.

Authentification
projectBearer
Corps de la requête
ScheduleImportRequest
ID d’opération
commitScheduleImportInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
fingerprintrequêteoptionnelL’empreinte de l’aperçu, pour un corps CSV ou XLSX ; un corps JSON la porte comme membre.
namerequêteoptionnelLe nom de l’importation ; importer de nouveau sous le même nom met à jour les niveaux qu’elle a créés (default import). Envoyé avec un corps de fichier.
fuseau horairerequêteoptionnelLe fuseau IANA dans lequel les heures sont écrites quand une ligne n’a pas de timezone. Sans fuseau, les heures sont lues sur l’horloge propre à chaque écran.
sourcerequêteoptionnelLe nom du fichier, enregistré avec l’importation.
code_fieldrequêteoptionnelLire un code d’écran seulement dans ce champ d’écran (par exemple code ou room_id) ; sinon un code correspond à n’importe quel champ.

Champs du corps de la requête

ChampDescription
nom (optionnel, chaîne)Identifie l’importation ; le même nom met à jour les niveaux qu’elle a créés (default import). minLength: 1 maxLength: 80
source (facultatif, chaîne)Le fichier d’où viennent les lignes. maxLength: 200
fuseau horaire (optionnel, chaîne)Le fuseau IANA dans lequel les heures sont écrites quand une ligne n’a pas de timezone.
code_field (facultatif, chaîne)Lire un code d’écran seulement dans ce champ d’écran.
fingerprint (facultatif, chaîne)L’empreinte de l’aperçu ; requise par la validation.
rows (obligatoire, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/schedule/imports'

Réponses

StatutSensCorps et en-têtes
200Ce que la validation a appliqué.ScheduleImportCommitted (application/json)
402feature_not_in_plan — L’importation d’horaires fait partie du forfait Enterprise ; le problème nomme la fonctionnalité, le forfait du compte et required_plan.Problème (application/problem+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)
409

protected_target - la modification atteint un écran d’un dossier d’écrans protégé et n’a aucune forme de révision (docs/screen-scope.md). Levez la protection du dossier au moyen d’une révision, effectuez la modification, puis protégez de nouveau le dossier.

Problème (application/problem+json)
500dependency_unavailable - la vérification des dossiers d’écrans protégés n’a pas pu s’exécuter ; renvoyez la même requête après une courte attente.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/projects/{project_id}/project/browser-links/claim

Réclamer le lien du navigateur dans le projet

Réclame un code de lien de navigateur pour le projet authentifié et crée atomiquement exactement un écran pairing_pending initial plus sa subvention de provisioning de navigateur existante. L’inscription reste limitée au projet. La réponse contient uniquement des métadonnées sûres et ne contient jamais de jeton de provisioning, URL fragmentée, cookie ou preuve.

Authentification
projectBearer
Corps de la requête
BrowserLinkClaimRequest
ID d’opération
claimBrowserLinkInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
code (obligatoire, chaîne)modèle : "^[23456789ABCDEFGHJKMNPQRSTUVWXYZ]{3}-?[23456789ABCDEFGHJKMNPQRSTUVWXYZ]{3}$"
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/browser-links/claim'

Réponses

StatutSensCorps et en-têtes
201Revendication de lien de navigateur sans fragment, sûre pour la relecture exacte.BrowserLinkClaim (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
400

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)
403

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)
404

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)
409

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)
410

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
500

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)
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/projects/{project_id}/screens/pair

Jumeler écran dans projet

Réclame une session d’association Player globale à la flotte de six caractères. Les tentatives Idempotency-Key exactes retournent le résultat original durable sans consommer à nouveau le quota.

La session du tableau de bord réclame dans son projet actuel avec le même corps, la même Idempotency-Key, les mêmes budgets et les mêmes problèmes, sauf que son not_found pour un code inconnu ou déjà réclamé ne nomme aucune commande CLI ; c’est un changement d’état, il suit donc les règles de mutation du tableau de bord, une session fantôme sans mode d’écriture du personnel est refusée, et les événements que la réclamation ajoute nomment l’utilisateur du tableau de bord. folder_id nomme le dossier où l’écran arrive.

Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer un dossier de son périmètre et ne jumelle qu’en tant que personne qui peut approuver (outside_screen_scope, approver_required).

Authentification
projectBearer
Corps de la requête
Écran de jumelage
ID d’opération
pairScreenInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
code (obligatoire, chaîne)modèle : "^[23456789ABCDEFGHJKMNPQRSTUVWXYZ]{6}$"
étiquette (optionnelle, chaîne)minLength : 1 maxLength : 120
folder_id (facultatif, chaîne)

Le dossier d’écrans où l’écran arrive ; omis, il l’amène à la racine du projet. Un appelant limité aux écrans doit envoyer un dossier de son périmètre (sinon outside_screen_scope). Un dossier que le projet ne contient pas donne invalid_request pour un appelant du projet entier.

Fait partie de la requête idempotente : un autre folder_id sous la même Idempotency-Key donne idempotency_mismatch. minLength: 1

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screens/pair'

Réponses

StatutSensCorps et en-têtes
201Réclamation d’écran pairing_pending durable.PairingClaim (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
400

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)
401

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)
404

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)
409

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)
413

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
500

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)
403outside_screen_scope comme sur OutsideScreenScope, ou approver_required - un membre limité aux écrans qui ne peut pas approuver les révisions ne modifie ni ce qu’un écran diffuse ni quand (docs/screen-scope.md).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/projects/{project_id}/screens/provision

Approvisionner l’écran dans le projet

Provisionnement facultatif d’un nouvel écran, réservé au navigateur. Crée toujours un nouvel écran pairing_pending ; au plus cinq attendent d’être jumelés en même temps (quota_exceeded). Les nouvelles tentatives exactes redonnent le même jeton de fragment pendant dix minutes. Le jumelage à six caractères reste la valeur par défaut et le seul flux de récupération. folder_id nomme le dossier où l’écran arrive.

Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer un dossier de son périmètre (sinon outside_screen_scope).

Authentification
projectBearer
Corps de la requête
ApprovisionnerÉcran
ID d’opération
provisionScreenInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
étiquette (optionnelle, chaîne)minLength : 1 maxLength : 120
folder_id (facultatif, chaîne)Le dossier d’écrans où l’écran arrive, comme sur PairScreen. minLength: 1
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screens/provision'

Réponses

StatutSensCorps et en-têtes
201Nouveau lien de provisionnement du navigateur.ScreenProvisioning (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
400

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)
401

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)
409

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)
410

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)
413

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
500

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)
403outside_screen_scope comme sur OutsideScreenScope, ou approver_required - un membre limité aux écrans qui ne peut pas approuver les révisions ne modifie ni ce qu’un écran diffuse ni quand (docs/screen-scope.md).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/projects/{project_id}/screens/actions

Appliquer les actions d’écran dans le projet

Applique une action à une flotte sélectionnée sans limite de nombre d’écrans. Sélectionnez un screen_ids unique ou une étiquette correspondant aux écrans actifs dans l’ordre de création. La sélection résolue est épinglée avant toute mutation, stockée en morceaux limités, et conservée pendant vingt-quatre heures sous Idempotency-Key.

Chaque étape utilise son chemin de mutation à écran unique, en préservant les révisions, événements, signaux d’exécution et limites par écran. Une réponse contient une page limitée de résultats ; correspondants, réussis et échoués décrivent cette page. HTTP 202 inclut le total, l’offset et next_cursor. Continuez avec le même sélecteur, la même action et Idempotency-Key, en passant next_cursor comme after.

Respectez Retry-After lorsqu’il est présent, y compris une page avec zéro résultat. La réponse renvoie Idempotency-Key, y compris une clé générée lorsque l’appelant l’a omise ; conservez cette clé pour les suites. Le HTTP 200 termine la sélection. Les pages répondues rejouent exactement, y compris les échecs par écran ; les étapes interrompues rejouent sans répéter leurs effets.

Les grandes actions sont limitées par les budgets existants de 600 par minute et par organisation pour rechargement, toast, prise de contrôle, horaires de playlist, redémarrage, affichage et horaires d’affichage ; l’épuisement du budget de l’organisation met l’action en pause au lieu de refuser la flotte. L’épuisement par écran échoue uniquement pour cet écran.

Une étape assign, takeover ou set_playlist_schedule qui lie une liste de lecture ayant un format à un écran dont le mur a une autre forme échoue pour cet écran seul avec 409 playlist_format_mismatch. Les changements d’assignation et d’étiquette n’ont pas de budget de messages.

Une assignation dont la liste de lecture contient un src d’iframe ou des params d’application qui lisent un jeton d’écran manquant à un écran de la page ajoute un avertissement screen_fact_missing à cette page (warnings, PlaylistWarning). L’échec partiel est un résultat normal. Toutes les pages et tentatives sous une même clé forment une seule action mesurée.

Les requêtes utilisent une charge utile en octets bornée ; utilisez une étiquette pour une sélection plus grande que la charge utile de transport. Un sélecteur ou une action mal formé est refusé avant qu’un écran soit touché. Un sélecteur ou une action mal formé est refusé avant qu’un écran soit touché.

Un appelant limité aux écrans (docs/screen-scope.md) sélectionne par screen_ids ou par dossier, chaque écran de son périmètre ; un sélecteur d’étiquette, un écran en dehors du périmètre ou un écran inconnu fait refuser toute l’action (outside_screen_scope) avant que quoi que ce soit soit épinglé ou proposé.

Assign, takeover, takeover_clear, set_playlist_schedule et clear_playlist_schedule qui atteignent un écran protégé deviennent une révision décidée par un second approbateur (202 pending_review) à tous les niveaux d’accès ; set_tags, add_tags et remove_tags sur un écran protégé donnent protected_target (409).

Une action set_playlist_schedule avec une entrée en pause (un brouillon) relève du contrôle des changements d’horaire, que le forfait Enterprise inclut ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402).

Authentification
projectBearer
Corps de la requête
ScreenActionRequest
ID d’opération
applyScreenActionsInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Screenrig-Review-Noteen-têteoptionnel

Note optionnelle du proposant sur une écriture de classe revue, envoyée en UTF-8 encodé en pourcentage (ce que encodeURIComponent de JavaScript écrit). Le serveur la décode en pourcentage (une échappée invalide est 400 invalid_request) ; la note décodée est du texte brut, au plus 280 caractères après suppression des espaces, sans caractères de contrôle (sinon 400 invalid_request).

Stocké lors de la révision quand l’écriture devient une ; ignoré lorsqu’elle s’applique en direct.

Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
aprèsrequêteoptionnelnext_cursor de la page de résultats précédente. Réutilisez le Idempotency-Key original et le corps de la requête.

Champs du corps de la requête

ChampDescription
sélecteur (obligatoire, ScreenActionSelector)
action (obligatoire, ScreenAction)Une action de flotte, discriminée par type. Chaque membre porte uniquement ses propres paramètres ; un membre d’un autre type est un champ inconnu et invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/screens/actions'

Réponses

StatutSensCorps et en-têtes
200Résultats par écran. Le succès partiel est une réponse normale.ScreenActionResult (application/json) ; en-têtes : Idempotency-Key, Cache-Control, RateLimit-Policy, RateLimit
202

Il reste des écrans (continuez avec next_cursor et la même Idempotency-Key et le même corps, en respectant Retry-After), ou, avec le statut pending_review, l’action est devenue une révision sous l’accès Proposer (docs/reviews.md), ou à n’importe quel niveau d’accès parce qu’elle atteint un écran d’un dossier d’écrans protégé (docs/screen-scope.md).

Seules les actions assigner, prendre le contrôle, takeover_clear, set_playlist_schedule et clear_playlist_schedule deviennent des révisions ; toute autre action est insufficient_access pour Proposer.

inline (application/json) ; en-têtes : Idempotency-Key, Retry-After, Cache-Control, RateLimit-Policy, RateLimit
400

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)
401

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)
402

feature_not_in_plan — set_reboot_schedule avec enabled true (redémarrages planifiés) et set_playlist_schedule avec un verrou displays (murs vidéo) font partie de Plus ; les actions d’effacement et les commandes ponctuelles sont ouvertes. payment_required — le projet n’a plus de crédit. Le problème nomme la fonctionnalité, le forfait du projet et required_plan.

Problème (application/problem+json)
403insufficient_access, outside_screen_scope quand un appelant limité aux écrans sélectionne en dehors de son périmètre, ou approver_required pour un membre limité aux écrans qui ne peut pas approuver.Problème (application/problem+json)
409

playlist_format_mismatch et les autres conflits de l’action, ou protected_target quand set_tags, add_tags, remove_tags, toast, display, display_clear, set_display_schedule ou clear_display_schedule atteint un écran d’un dossier d’écrans protégé.

Problème (application/problem+json)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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/projects/{project_id}/tab-shares

Démarrer un partage d’onglets dans un projet

Affiche des onglets de navigateur sur les écrans du projet nommé; la requête, la réponse, l’accès et les limites sont ceux de POST /api/tab-shares.

Authentification
projectBearer
Corps de la requête
TabShareWrite
ID d’opération
startTabShareInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
screen_ids (optionnel, array)Écrans par id. Les doublons sont regroupés.
folder_ids (optionnel, tableau)Dossiers d’écrans; chacun inclut tous ses sous-dossiers.
tags (optionnel, array)Un écran portant au moins une des étiquettes.
tabs (obligatoire, array)
cookies (optionnel, array)Les témoins de l’expéditeur pour les pages, au plus 64 KiB encodés. Secrets; voir POST /api/tab-shares.
reload_s (optionnel, integer)0 (jamais, par défaut) ou de 60 à 86400 : fréquence de rechargement de l’iframe de chaque page.
until (optionnel, string)Strictement dans le futur et au plus 24 heures à l’avance; 24 heures à partir de maintenant si omis. Fin de la reprise de chaque cible et expiration de la liste temporaire. format: "date-time"
qr (optionnel, boolean)Quand true, chaque page affiche un code QR de son adresse en bas à droite. Par défaut false.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/tab-shares'

Réponses

StatutSensCorps et en-têtes
200Le partage. Au moins un écran a été repris.TabShare (application/json) ; en-têtes : RateLimit-Policy, RateLimit
400

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)
401

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)
404

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)
409

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
403outside_screen_scope comme sur OutsideScreenScope, ou approver_required - un membre limité aux écrans qui ne peut pas approuver les révisions ne modifie ni ce qu’un écran diffuse ni quand (docs/screen-scope.md).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)
GET/api/projects/{project_id}/campaigns

Lister les campagnes d’un projet

Liste les campagnes du projet par ordre de priorité (au plus 100), l’ordre dans lequel la résolution les lit. reserved est présent sur chaque campagne.

Un appelant limité aux écrans (docs/screen-scope.md) voit chaque campagne, avec editable à true seulement quand toute l’audience est dans son périmètre (une feuille d’étiquette et la règle racine de tous les écrans ne le sont jamais ; une règle all exige un enfant contenu, une règle any chaque enfant) et que l’appelant peut modifier ce qui est diffusé.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/campaigns'

Réponses

StatutSensCorps et en-têtes
200Les campagnes du projet.CampaignList (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/projects/{project_id}/campaigns

Créer une campagne dans un projet

createCampaign pour le projet nommé dans le chemin. reserved à true réserve la campagne, et seule une personne qui peut approuver le définit (reserved_item pour un agent, un client de service ou toute autre personne), ce qui ajoute campaign.reserved_changed.

Un appelant limité aux écrans (docs/screen-scope.md) ne crée une campagne que pour une audience dans son périmètre (feuilles folder et screen_id ; ni étiquette, ni tous les écrans), sinon outside_screen_scope, et seulement en tant que personne qui peut approuver (approver_required).

Une campagne dont l’audience atteint un écran protégé est une révision protected_change décidée par un second approbateur (202 pending_review) à tous les niveaux d’accès. reserved true relève des dossiers protégés et paused true sur une nouvelle campagne (un brouillon) relève du contrôle des changements d’horaire, les deux faisant partie du forfait Enterprise ; un projet dont le forfait n’inclut pas cette fonctionnalité est refusé avec feature_not_in_plan (402).

Authentification
projectBearer
Corps de la requête
CampaignWrite
ID d’opération
createCampaignInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)minLength : 1 maxLength : 120
playlist_id (obligatoire, chaîne)minLength : 1
audience (obligatoire, CampaignAudience)

Les écrans qu’une campagne cible : exactement un parmi all (chaque règle correspond), any (au moins une correspond), tag (l’écran porte l’étiquette), screen_id (cet écran) ou folder (les écrans de ce dossier d’écrans et de chaque dossier à l’intérieur, GET /api/screen-folders ; le dossier doit exister).

Les règles s’imbriquent sur 3 niveaux au plus et une audience a au plus 500 règles. {"all": []} correspond à chaque écran du projet ; ailleurs, all et any listent au moins une règle.

from (optionnel, string)motif : « ^[0-9]{4}-[0-9]{2}-[0-9]{2}T([01][0-9]|2[0-3]):[0-5][0-9]$ »
until (optionnel, string)Postérieur à from. motif : « ^[0-9]{4}-[0-9]{2}-[0-9]{2}T([01][0-9]|2[0-3]):[0-5][0-9]$ »
windows (optionnel, array)
monthly (facultatif, tableau)
dates (facultatif, tableau)
except (facultatif, tableau)Dates civiles, stockées en ordre croissant et une seule fois chacune. Une exception supprime chaque occurrence que sa date commence, fins nocturnes comprises ; elle se situe entre from et until.
data (facultatif, PageDataCondition)

Un prédicat de données de carte, évalué avant l’heure civile. Les données manquantes ou expirées ne correspondent jamais. La page respecte aussi ses bornes temporelles ordinaires. Nécessite la capacité hôte page.conditions ; les hôtes plus anciens reçoivent la page désactivée.

interaction (facultatif, LevelInteraction)

Le niveau est en vigueur tant que quelqu’un utilise l’écran : d’un toucher, d’un clic ou d’une touche jusqu’à ce que idle_s secondes s’écoulent sans saisie. Usage typique : une page interactive au-dessus d’une boucle d’attraction. idle_s est stocké et renvoyé (60 si omis).

covers (facultatif, chaîne)

Où le niveau joue : la page complète (default, stocké absent) ou main, la page elle-même, pour une liste de lecture ordinaire ; header, footer ou side, une bande dessinée par-dessus la page, pour une liste de lecture de région de cette seule région (PlaylistRegionFormat). Une liste de lecture de région est refusée avec full ou main, et une bande exige une liste de lecture de région disposée sur un affichage ciblé.

Autorisés : « full », « main », « header », « footer », « side »

displays (facultatif, tableau)Les sorties d’un mur vidéo sur lesquelles il joue ; absent, il joue sur chaque sortie.
start (facultatif, chaîne)on_time bascule à la limite, en interrompant l’élément en cours ; next_item (par défaut, stocké absent) attend sa fin. Autorisés : « next_item », « on_time »
priority (optionnel, integer)par défaut : 0 minimum : 0 maximum : 100
paused (optionnel, boolean)par défaut : false
reserved (facultatif, booléen)Seule une personne qui peut approuver réserve une campagne (sinon reserved_item). default: false
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/campaigns'

Réponses

StatutSensCorps et en-têtes
201Créé.Campaign (application/json) ; en-têtes : ETag
202

L’écriture est devenue une révision et attend l’approbation d’une personne (docs/reviews.md), sous l’accès Proposer, ou à n’importe quel niveau d’accès quand elle atteint un écran d’un dossier d’écrans protégé, où un second approbateur décide (docs/screen-scope.md). Une personne approuve, rejette ou demande des modifications dans le tableau de bord à review.url.

Une relecture d’Idempotency-Key répond avec le même corps.

ReviewPending (application/json)
402

feature_not_in_plan — Les dossiers protégés et le contrôle des changements d’horaire font partie du forfait Enterprise ; le problème nomme la fonctionnalité, le forfait du compte et required_plan. Une campagne qui verrouille une liste de lecture sur l’afficheur 2 ou au-delà d’un mur vidéo (displays) fait partie de Plus. Le problème nomme la fonctionnalité, le forfait du projet et required_plan.

Problème (application/problem+json)
403

outside_screen_scope ou approver_required comme sur ScreenScopePlays, ou reserved_item - une campagne réservée n’est modifiée, mise en pause, supprimée ni dé-réservée que par une personne qui peut approuver les révisions, jamais par un agent ou un client de service (docs/screen-scope.md).

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)
GET/api/projects/{project_id}/connections

Lister les connexions d’un projet

Liste les connexions du projet, les plus récentes d’abord, au plus 200 par page ; renvoyez next_cursor comme after pour la suivante. Un secret, une clé ou un jeton d’actualisation n’est jamais renvoyé : secret indique si l’un d’eux est conservé et un indice qui n’est pas secret. Une lecture ne porte jamais de lien de consentement.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
aprèsrequêteoptionnelnext_cursor de la page précédente de la même liste, avec les mêmes filtres. Omission commence à la ligne la plus récente. Une valeur qui n’est pas un tel curseur est invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/connections'

Réponses

StatutSensCorps et en-têtes
200Une page de connexions.ConnectionList (application/json); en-têtes : Cache-Control
400invalid_request, y notamment un curseur mal formé.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/projects/{project_id}/connections

Créer une connexion dans un projet

Crée dans ce projet une connexion à Microsoft ou à Google : le mode own_app avec les propres identifiants du client, ou le mode screenrig_app, qui répond consent_url, un lien à usage unique pour la personne qui le complète (voir createConnection). Ajoute connection.created. Une nouvelle tentative identique avec la même Idempotency-Key renvoie la même connexion.

Authentification
projectBearer
Corps de la requête
ConnectionWrite
ID d’opération
createConnectionInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
provider (obligatoire, chaîne)Autorisés : « microsoft », « google »
mode (obligatoire, chaîne)Autorisés : « own_app », « screenrig_app »
nom (obligatoire, chaîne)minLength : 1 maxLength : 80
config (facultatif, ConnectionConfigWrite)Microsoft, mode own_app : les deux membres. Non accepté pour une connexion Google ni pour le mode screenrig_app.
secret (facultatif, chaîne)

Mode own_app. Microsoft : la valeur de l’un des secrets client de l’application (pas son ID ; 1024 caractères au plus), avec config.tenant_id et config.client_id. Google : le fichier de clé JSON du compte de service, en entier (16384 octets au plus). Scellé à l’arrivée et jamais renvoyé ; la CLI le lit depuis un fichier ou l’entrée standard, jamais depuis un argument.

Non accepté en mode screenrig_app. minLength: 1 maxLength: 16384

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/connections'

Réponses

StatutSensCorps et en-têtes
201Créée. Une connexion en mode screenrig_app porte consent_url et consent_expires_at.ConnectionConsent (application/json); en-têtes : ETag, Location, Cache-Control
400invalid_request, qui nomme le champ non valide.Problème (application/problem+json)
409connection_app_not_configured, connection_limit_reached ou idempotency_mismatch.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)
GET/api/projects/{project_id}/bi-connections

Lister les connexions BI dans le projet

Liste les connexions BI du projet, de la plus ancienne à la plus récente, 200 par page ; renvoyez next_cursor comme cursor pour la suivante. Un secret n’est jamais renvoyé : secret indique s’il est défini et ses 4 derniers caractères.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
curseurrequêteoptionnelnext_cursor de la page précédente.
limiterequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/bi-connections'

Réponses

StatutSensCorps et en-têtes
200Une page de connexions.BIConnectionList (application/json); en-têtes : Cache-Control
400invalid_request, y notamment un curseur mal formé.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/projects/{project_id}/bi-connections

Créer une connexion BI dans le projet

Ajoute une connexion à un système BI que le projet possède. Pour Grafana : son adresse (http ou https sur un hôte public, avec un préfixe de chemin facultatif) et un jeton de compte de service avec le rôle Viewer. Le jeton est scellé et jamais renvoyé.

Grafana renders dashboards for screens through its Image Renderer plugin or remote rendering service, so the customer installs one; run POST /api/bi-connections/{id}/test to check. For Power BI (kind powerbi): config.tenant_id and config.client_id of a Microsoft Entra app registration and its client secret value as secret.

Un administrateur Power BI doit activer les paramètres de développeur Embed content in apps et Service principals can call Fabric public APIs pour l’application (portail d’administration, paramètres du locataire), l’application doit être Membre ou Administrateur de chaque espace de travail qu’elle affiche, et les rapports ont besoin d’une capacité Embedded, Fabric ou Premium en production.

For Tableau (kind tableau): config.url (the https address of Tableau Server, or of your Tableau Cloud pod such as https://10ay.online.tableau.com), config.site (the site content URL, empty for the default site), config.client_id and config.secret_id of a connected app with direct trust, config.username (the Tableau user the screens views are shown as) and the secret value as secret.

Ajoutez embed_origin de la réponse à la liste d’autorisation des domaines de l’application connectée et activez le secret. Quiconque détient un ticket d’écran peut intégrer toute vue que cet utilisateur peut voir : utilisez donc un utilisateur qui ne voit que les tableaux de bord des écrans. Tableau Cloud, ou Tableau Server 2023.3 ou version ultérieure.

Pour une page web avec connexion (kind web) : le compte de service d’un site qui affiche son tableau de bord derrière une connexion. config.login_mode est auto (config.login_url, config.username et le mot de passe comme secret : le moteur de rendu ouvre la page de connexion et remplit le formulaire), steps (config.login_url et config.steps, un script d’étapes goto, fill, click, press, wait_for et wait_ms dont les valeurs peuvent contenir {{username}}, {{password}} et {{otp}}) ou none (aucune connexion : la connexion affiche les pages avec les cookies que vous lui donnez). totp_secret est la clé base32, ou l’adresse otpauth://, de l’application d’authentification du compte : le serveur calcule le code à usage unique (RFC 6238) et n’envoie au moteur de rendu que le code. cookies est un fichier de cookies exporté d’un navigateur connecté, pour un site dont la connexion ne peut pas être scriptée (authentification unique approuvée sur un téléphone, vérification d’appareil) ; le serveur garde le fichier et le renouvelle à partir des cookies que renvoie chaque capture, de sorte qu’une connexion est rare.

Le mot de passe, la graine et les cookies sont scellés et jamais renvoyés. Utilisez un compte de service en lecture seule. Le mot de passe n’est saisi que dans config.login_url et les étapes goto : les déplacer vers une autre origine exige donc secret de nouveau. Après cinq connexions refusées de suite, la connexion cesse de se connecter jusqu’à ce que ses identifiants changent.

Un serveur sans moteur de rendu de pages répond bi_web_unavailable. Ajoute bi_connection.created. Une nouvelle tentative identique avec la même Idempotency-Key renvoie cette même réponse.

Authentification
projectBearer
Corps de la requête
BIConnectionWrite
ID d’opération
createBIConnectionInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)minLength : 1 maxLength : 80
type (obligatoire, chaîne)Autorisés : « grafana », « powerbi », « tableau », « web »
config (obligatoire, BIConnectionConfig)
secret (facultatif, chaîne)

Requis sauf pour web, et pour une connexion Power BI qui nomme connection_id. Le jeton du compte de service (Grafana), la valeur du secret client de l’application (Power BI), la valeur du secret de l’application connectée (Tableau) ou le mot de passe du compte de service (web : requis par login_mode auto, inutilisé par none).

Scellé à l’arrivée ; la CLI le lit depuis un fichier ou l’entrée standard, jamais depuis un argument. minLength: 1 maxLength: 4096

totp_secret (facultatif, chaîne)

Web : la clé base32 de l’application d’authentification du compte (de 16 à 128 caractères, espaces permis), ou son adresse otpauth://totp, qui peut fixer l’algorithme (SHA1, SHA256, SHA512), le nombre de chiffres (6 à 8) et la période. Scellé ; seul le code calculé quitte le serveur. maxLength: 1024

cookies (optionnel, array)Web : un fichier de cookies exporté d’un navigateur connecté. Scellé ; renouvelé à chaque capture.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/bi-connections'

Réponses

StatutSensCorps et en-têtes
201Créé.BIConnection (application/json); en-têtes : ETag, Cache-Control
400invalid_request, y notamment une adresse qui n’est pas un hôte public d’Internet.Problème (application/problem+json)
402feature_not_in_plan — le forfait du projet n’inclut pas les tableaux de bord BI ; required_plan nomme le forfait qui les inclut.Problème (application/problem+json)
409idempotency_mismatch.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)
GET/api/projects/{project_id}/bi-views

Lister les vues BI dans le projet

Lists the project's BI views, oldest first, 200 to a page; pass next_cursor back as cursor for the next. Each carries embed_url, the address an iframe primitive shows (content_fit fill); it is null where this server has no embed host.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
curseurrequêteoptionnelnext_cursor de la page précédente.
limiterequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/bi-views'

Réponses

StatutSensCorps et en-têtes
200Une page de vues.BIViewList (application/json); en-têtes : Cache-Control
400invalid_request, y notamment un curseur mal formé.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/projects/{project_id}/bi-views

Créer une vue BI dans le projet

Ajoute une vue d’un tableau de bord Grafana de la connexion, ou d’un seul de ses panneaux (url : une adresse /d/{uid}/... sur l’hôte de la connexion, ou target), ou d’un lien de tableau de bord public Grafana (kind grafana et target.public_url, sans connexion).

Put the answer's embed_url in an iframe primitive: the server renders the dashboard as a PNG through Grafana's /render API, refreshed every refresh_s (30 to 86400, default 300) and shared by every screen of the same size; the screen never talks to Grafana. A public dashboard plays live from Grafana, which must allow embedding.

La page d’intégration n’affiche qu’un ticket que porte le manifeste de l’écran : une vue ne passe donc que sur les écrans de son propre projet.

For Power BI (kind powerbi): a report of a workspace the connection's app is a member of (url: an app.powerbi.com /groups/{workspace}/reports/{report} address, or target with workspace_id and report_id), with pages to show and rotate_s to rotate through them (pages listing two or more, or rotate_all_pages, need rotate_s of 10 to 3600; one report page needs none), and refresh_s of 0 (no refresh) or 60 to 86400 (default 300).

The page asks the server for a short-lived view-only embed token (GenerateToken, App owns data) and renews it before it expires; the screen never holds the client secret. A Power BI Publish to web link is a view without a connection (kind powerbi, target.public_url https://app.powerbi.com/view?r=...), framed as it is.

For Tableau (kind tableau): a view of the connection site (url: an address copied from Tableau, such as https://HOST/t/SITE/views/WORKBOOK/VIEW or Tableau Cloud https://HOST/#/site/SITE/views/WORKBOOK/VIEW, or Workbook/View; or target.view), optionally with target.rotate_sheets and rotate_s of 10 to 3600 to turn the workbook published sheets (rotate_s and rotate_sheets go together; rotate_sheets may be given as the whole target beside url), and refresh_s of 0 (no refresh) or 60 to 86400 (default 300).

The page asks the server for a five minute JWT with only the embed scope, signed with the connected app secret, and builds the Embedding API v3 tableau-viz from the Tableau host; the screen never holds the secret.

Une visualisation Tableau Public est une vue sans connexion (kind tableau, target.public_url, reconstruite comme https://public.tableau.com/views/WORKBOOK/VIEW) et accepte aussi rotate_sheets. Pour une page web (kind web) : une page du site de la connexion web (url : une adresse https sur un hôte public, sans target).

Le navigateur en périphérie l’ouvre en étant connecté, attend l’élément wait_for s’il est défini et wait_ms millisecondes (jusqu’à 10000), et dessine clip, un sélecteur CSS, s’il est défini, sinon la page entière.

L’image est redessinée toutes les refresh_s (60 à 86400, 300 par défaut) et partagée par tous les écrans de même taille, et seulement tant qu’un écran affiche la vue ; quand une capture échoue, la dernière image reste à l’écran. Réglez wait_for sur un élément qui n’existe que lorsque la page est connectée, de sorte qu’une page de connexion ne soit jamais affichée. Ajoute bi_view.created.

Authentification
projectBearer
Corps de la requête
BIViewWrite
ID d’opération
createBIViewInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
connection_id (facultatif, chaîne)
kind (facultatif, chaîne)Requis sans connection_id ; sinon il doit correspondre à la connexion. Autorisés : « grafana », « powerbi », « tableau », « web »
nom (obligatoire, chaîne)minLength : 1 maxLength : 80
url (optionnelle, chaîne)

Une adresse de tableau de bord /d/{uid}/... sur l’hôte de la connexion. Le serveur y lit orgId, viewPanel (N ou panel-N) ou panelId, from, to, var-* et theme. Tableau : une adresse de vue sur l’hôte de la connexion (/views/W/V, /t/SITE/views/W/V, #/site/SITE/views/W/V) ou Workbook/View. Web : l’adresse https de la page sur un hôte public. maxLength: 2048

target (facultatif, BITarget)

Ce qu’une vue affiche. Grafana avec une connexion : dashboard_uid (et facultativement un panneau). Power BI avec une connexion : workspace_id et report_id, avec pages ou rotate_all_pages. Tableau avec une connexion : view (Workbook/View), avec rotate_sheets. Web avec une connexion : url. Sans connexion : seulement public_url (et rotate_sheets pour Tableau).

refresh_s (facultatif, entier)Grafana 30 à 86400 ; Power BI et Tableau 0 ou 60 à 86400 ; web 60 à 86400. default: 300 minimum: 0 maximum: 86400
rotate_s (facultatif, entier)Power BI et Tableau : 0 ou 10 à 3600 ; obligatoire pour une cible qui fait défiler des pages ou des feuilles. default: 0 minimum: 0 maximum: 3600
fit (facultatif, chaîne)Autorisés : « contain », « cover », « fill » par défaut : « contain »
wait_for (facultatif, chaîne)Web : un sélecteur CSS d’un élément qui s’affiche quand la page est prête, et seulement quand elle est connectée. maxLength: 512
wait_ms (facultatif, entier)Web : les millisecondes à attendre une fois la page prête. minimum: 0 maximum: 10000
clip (facultatif, chaîne)Web : un sélecteur CSS de la partie de la page à dessiner. maxLength: 512
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/bi-views'

Réponses

StatutSensCorps et en-têtes
201Créé.BIView (application/json); en-têtes : ETag, Cache-Control
400invalid_request, y compris une url qui n’est pas une adresse de tableau de bord de la connexion.Problème (application/problem+json)
402feature_not_in_plan — le forfait du projet n’inclut pas les tableaux de bord BI ; required_plan nomme le forfait qui les inclut.Problème (application/problem+json)
404not_found : la connexion ne fait pas partie de ce projet.Problème (application/problem+json)
409idempotency_mismatch.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)
GET/api/projects/{project_id}/triggers

Lister les déclencheurs dans le projet

Liste les déclencheurs d’alerte CAP du projet, du plus ancien au plus récent (au maximum 20), chacun avec son URL d’ingestion, nom d’utilisateur et dernière alerte. Le mot de passe n’est jamais retourné ici.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/triggers'

Réponses

StatutSensCorps et en-têtes
200Les déclencheurs du projet.TriggerList (application/json) ; en-têtes : Cache-Control
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/projects/{project_id}/triggers

Créer un déclencheur dans le projet

Crée un déclencheur d’alerte CAP : une URL entrante à laquelle un système de notification d’urgence (Everbridge, Rave, Alertus, relais IPAWS et autres émetteurs CAP 1.2) poste des alertes, avec des identifiants HTTP Basic.

La réponse est le seul endroit où le mot de passe apparaît (avec la réponse de rotation) : stockez-le immédiatement dans le système d’envoi. target est une balise (chaque écran actif avec elle à l’arrivée de l’alerte) ou jusqu’à 500 screen_ids.

Une alerte prend le contrôle de chaque écran cible avec une liste de lecture par défaut jusqu’à l’alerte <expires>, sinon pour default_for_seconds (60 à 604800, défaut 3600) ; voir POST /api/triggers/{id}/cap. Une organisation a au maximum 20 déclencheurs, tous projets confondus (trigger_limit_reached). Ajoute trigger.created.

Une nouvelle tentative exacte avec la même Idempotency-Key renvoie cette même réponse, mot de passe compris, pendant vingt-quatre heures. Un déclencheur dont le sélecteur atteint un écran protégé donne protected_target (409), et un échec de lecture de la protection d’un écran donne dependency_unavailable (500, relancez la même requête) ; un déclencheur n’est pas disponible pour un appelant limité aux écrans.

Authentification
projectBearer
Corps de la requête
TriggerWrite
ID d’opération
createTriggerInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
kind (facultatif, chaîne)Autorisés : "cap", "overlay" par défaut : "cap"
étiquette (obligatoire, chaîne)minLength : 1 maxLength : 80
cible (requise, TriggerTarget)Exactement un de tag et screen_ids.
default_for_seconds (optionnel, entier)

Durée pendant laquelle une alerte sans <expires> retient les écrans : de 60 à 604800, 3600 par défaut, pour un déclencheur CAP ; durée pendant laquelle un envoi sans duration retient son alerte : de 10 à 604800, 600 par défaut, pour un déclencheur de superposition. minimum : 10 maximum : 604800

pull (optionnel, CapPull)

Sources CAP que la plateforme lit pour le déclencheur, avec où se trouvent les écrans cibles et quelles alertes comptent : les paramètres d’un placement de carte d’alerte cap (docs/feeds.md « CAP alerts »). Chaque URL source est récupérée une fois par minute pour chaque déclencheur et placement qui la nomme.

Sans sources, les flux publics de la plateforme couvrant l’emplacement sont lus (NWS, Canada NAAD et MeteoAlarm pour un emplacement avec codes régionaux). L’alerte correspondante la plus sévère prend le contrôle des écrans cibles exactement comme un message poussé le ferait ; lorsque les sources n’en montrent aucune (annulation ou expiration), une alerte tirée prend fin.

Une source périmée ou défaillante ne termine jamais une alerte. location est requis sauf si des sources sont données.

overlay (facultatif, TriggerOverlayWrite)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/triggers'

Réponses

StatutSensCorps et en-têtes
201Créé, avec son URL, nom d’utilisateur et mot de passe.TriggerWithPassword (application/json); en-têtes : ETag, Cache-Control
400invalid_request, incluant une étiquette mal formée ou à la fois une étiquette et des screen_ids.Problème (application/problem+json)
409trigger_limit_reached, idempotency_mismatch, ou protected_target quand le sélecteur atteint un écran d’un dossier d’écrans protégé.Problème (application/problem+json)
500dependency_unavailable - la vérification des dossiers d’écrans protégés n’a pas pu s’exécuter ; renvoyez la même requête après une courte attente.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)
GET/api/projects/{project_id}/events

Lister les événements dans le projet

Liste les événements durables du projet par ordre croissant de séquence.

La pagination est contiguë : passez le next_cursor retourné comme after pour continuer exactement là où la page s’est arrêtée. next_cursor est le curseur du dernier événement retourné tant que des événements plus récents existent déjà, et nul à la fin de l’historique. limit par défaut à 50 et accepte 1-200 ; une valeur hors plage est refusée avec invalid_request et un membre errors[] nommant limit.

Le décalage de pagination n’est pas supporté. source=log liste le journal du Player à la place : les rapports de conditions envoyés par les Players (runtime.reported) triés par heure de réception, filtrés par screen_id et gravité sur une fenêtre de à (par défaut les dernières 24 heures, au maximum 31 jours).

Ses curseurs sont opaques : lg1_ ou ev1_ selon l'endroit où le serveur garde le journal du Player, donc renvoyez celui qu'une page a retourné ; un curseur de l'autre type est refusé avec invalid_request nommant le champ. Les enregistrements du journal du Player n'ont pas de séquence, ne sont pas sur GET /stream/project et ne sont pas livrés aux webhooks.

Un enregistrement est reconnu lorsque la file d’attente du journal du lecteur l’accepte et est conservé pour la rétention d’événements du projet. Un sondage avec le dernier curseur et la fenêtre par défaut suit le journal. Les enregistrements du journal du lecteur ne figurent pas dans la liste par défaut (source=project). from et to sont refusés avec invalid_request sauf si source est log.

La liste de projets prend screen_id, playlist_id et application_id pour lire les événements d’un écran, d’une liste de lecture ou d’une application, tous limités au projet des identifiants (un id nomme quels événements lire, jamais à qui) : screen_id garde les événements dont la ressource est cet écran ; playlist_id les événements dont la ressource est cette liste de lecture plus ceux qui la nomment comme details.playlist_id (un écran la prenant) ; application_id les événements dont la ressource est cette application plus ceux dont la ressource la porte comme application_id (ses versions et entrées clé/valeur).

Une valeur qui n’est pas un identifiant de son type est refusée avec invalid_request nommant le champ ; playlist_id et application_id sont refusés avec source=log, dont les enregistrements appartiennent uniquement à un écran.

Les deux sources prennent resource_id, type et gravité (au minimum), combinés entre eux, avec les filtres d’identifiant et la pagination ; un enregistrement de journal Player est un enregistrement runtime.reported dont la ressource est son écran, donc un resource_id qui n’est pas cet écran ou un type qui exclut runtime.reported renvoie une page vide. before (ou order=desc) affiche les plus récents en premier : next_cursor est alors le curseur de l’élément le plus ancien retourné et renvoyé comme before pour continuer vers les éléments plus anciens.

Sans from, une page source=log la plus récente d’abord remonte au-delà des 24 heures par défaut jusqu’au plus ancien enregistrement que la rétention d’événements du projet conserve, au maximum 31 jours sous le bord supérieur de la page par requête. Une page source=log la plus récente d’abord peut contenir moins que limit d’enregistrements, voire aucun, avec un next_cursor ; null la termine toujours, à la fin du journal conservé.

Un appelant limité aux écrans (docs/screen-scope.md) lit un flux filtré : les événements des écrans de son périmètre, des dossiers d’écrans qu’il peut voir (les siens, ceux au-dessus et ceux à l’intérieur ; screen.moved seulement quand la destination est dans son périmètre), des campagnes, des listes de lecture, des médias, des applications et des cartes, et les révisions playlist_change.

Tout autre événement est omis, de sorte qu’une page peut contenir moins d’événements que limit, voire aucun, avec un next_cursor ; continuez la pagination avec celui-ci. source=log exige un screen_id dans son périmètre. Les événements sur le projet lui-même ne sont pas envoyés.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
aprèsrequêteoptionnel

Un curseur d’une réponse précédente : ev1_ pour les événements de projet (et les flux d’événements). Le journal du Lecteur (source=log) pagine avec les curseurs lg1_ ou ev1_ selon l’endroit où le serveur le conserve ; traitez-les comme opaques et renvoyez celui qu’une page a retourné. Un curseur d’un autre type est refusé avec invalid_request.

avantrequêteoptionnel

Pages les plus récentes d’abord, strictement plus anciennes que ce curseur : un next_cursor d’une page la plus récente d’abord, ou n’importe quel curseur d’élément (ev1_ pour les événements de projet ; pour source=log le curseur opaque que ses éléments portent). Vide ou absent avec order=desc commence à l’élément le plus récent.

ordrerequêteoptionnelpages asc plus anciennes d’abord avec after ; pages desc plus récentes d’abord avec before. before implique desc ; order=asc avec before est refusé.
limiterequêteoptionnelTaille de la page. Une valeur hors plage 1-200 est refusée avec invalid_request et un membre errors[] dont le champ est limit.
sourcerequêteoptionnelle projet liste les événements séquencés du projet. le journal liste le journal du Player : rapports d’état du Player (runtime.reported), par ordre croissant de réception.
resource_idrequêteoptionnelSeuls les éléments dont resource.id est cet id (un écran, liste de lecture, média, webhook, agent ou identifiant d’application). Avec source=log, c’est l’écran de l’enregistrement.
typerequêteoptionnelUn type d’événement exact tel que playlist.updated, ou un préfixe de famille se terminant par un point tel que playlist. pour chaque type playlist.*.
screen_idrequêteoptionnelSeulement les événements de cet écran : avec source=project ceux dont la ressource est l’écran, avec source=log ses enregistrements de journal Player. Un autre type d’id est refusé avec invalid_request.
playlist_idrequêteoptionnelAvec source=project, uniquement les événements de cette liste de lecture : ceux dont la ressource est la liste de lecture et ceux la nommant comme details.playlist_id. Refusé avec source=log.
application_idrequêteoptionnel

Avec source=project, uniquement les événements de cette application : ceux dont la ressource est l’application et ceux dont la ressource la porte comme application_id (ses versions et entrées clé/valeur). Refusé avec source=log.

gravitérequêteoptionnelGravité minimale : info affiche tous les éléments, warning conserve avertissements et erreurs, error conserve les erreurs. Les deux sources.
derequêteoptionnelAvec source=log, le début de la fenêtre (inclusif). Par défaut, 24 heures avant to ; une page la plus récente d’abord sans from remonte à la rétention d’événements du projet à la place.
àrequêteoptionnelAvec source=log, la fin de la fenêtre (exclusif). Par défaut, maintenant. La fenêtre est au maximum de 31 jours.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/events'

Réponses

StatutSensCorps et en-têtes
200Événements durables (source=project) ou enregistrements de journal Player (source=log)EventList (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)
GET/api/projects/{project_id}/project/capabilities

Obtenir les capacités du projet dans le projet

Le plan du projet appelant, les indicateurs indépendants annonceur/écrans avec leur révision, l’ensemble des capacités effectives dérivées, les fonctionnalités de plan dont il dispose (plan_features) et ses limites (limits). Ne reflète jamais une revendication client ; un plan inconnu échoue fermé comme interdit.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/project/capabilities'

Réponses

StatutSensCorps et en-têtes
200Capacités du projet.ProjectCapabilities (application/json) ; en-têtes : Cache-Control
403interdit - le forfait du projet n’est pas dans le catalogue.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)
GET/api/projects/{project_id}/billing/balance

Obtenir le solde de facturation dans le projet

Le snapshot du solde conscient de la source du projet appelant. Tous les montants en millicrédits sont des chaînes décimales canoniques. C’est un snapshot, pas une autorité de paiement ; rails_available est faux tant que la carte, la taxe et la voie de retrait sont indisponibles.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/billing/balance'

Réponses

StatutSensCorps et en-têtes
200Instantané du solde.BillingBalance (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)
GET/api/projects/{project_id}/billing/statement

Obtenir le relevé de facturation dans le projet

Pagination stable par curseur sur les entrées de journal immuables publiées pour le projet appelant. Les retenues ne sont pas des entrées publiées. Les corrections renvoient à l’événement original au lieu de le réécrire. Il n’y a aucune mutation arbitraire de subvention ou de paiement sur cette surface.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
curseurrequêteoptionnel
limiterequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/billing/statement'

Réponses

StatutSensCorps et en-têtes
200Page de relevé.BillingStatement (application/json)
400invalid_request - limite hors plage.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)
GET/api/projects/{project_id}/billing/usage

Obtenir l’utilisation de facturation dans le projet

L’utilisation du projet appelant pour un mois UTC, avec les octets servis et reçus (jamais facturés), le stockage facturé au-delà du stockage gratuit du forfait du payeur (allowance.storage_bytes), et les requêtes API, les événements de flux de projet facturés et les tentatives de livraison par webhook comptés dans la limite gratuite de 10 000 par mois. Un projet qui paie pour lui-même lit son propre pool.

Un projet qu’un autre payeur finance partage la réserve de ce payeur avec les autres projets du payeur ; il lit sa propre part, et payer nomme le payeur. Le total de la réserve du payeur reste sur les lectures de facturation du payeur.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
périoderequêteoptionnelMois UTC au format YYYY-MM ; par défaut, le mois en cours.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/billing/usage'

Réponses

StatutSensCorps et en-têtes
200Utilisation du projet.ProjectBillingUsage (application/json) ; en-têtes : Cache-Control
400invalid_request - la période n’est pas un mois UTC au format YYYY-MM.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)
GET/api/projects/{project_id}/advertising/network

Obtenir le réseau publicitaire dans le projet

Le réseau unique du vendeur appelant, incluant ses frais de service ScreenRig résolus. Les vendeurs ne peuvent pas modifier ces frais.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/network'

Réponses

StatutSensCorps et en-têtes
200Réseau.AdvertisingNetwork (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/projects/{project_id}/advertising/network

Créer un réseau publicitaire dans le projet

Crée le réseau unique du vendeur appelant s’il est absent. Nécessite screens=true. Idempotent ; la répétition retourne le même réseau.

Authentification
projectBearer
Corps de la requête
AdvertisingNetworkCreate
ID d’opération
createAdvertisingNetworkInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)maxLength : 120
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/network'

Réponses

StatutSensCorps et en-têtes
200Réseau.AdvertisingNetwork (application/json)
403interdit - le projet ne dispose pas de la capacité écran ou a un forfait inconnu.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/projects/{project_id}/advertising/network/rate

Définir le taux publicitaire par défaut dans le projet

Définit le taux par défaut du projet du vendeur par tranche de 15 secondes de lecture terminée. Un changement qui modifie le taux effectif d’une campagne acceptée met en pause toute cette campagne avec price_change_pending ; un changement masqué ou sans effet ne le fait pas. If-Match porte la révision du réseau.

Authentification
projectBearer
Corps de la requête
AdvertisingRate
ID d’opération
setAdvertisingDefaultRateInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour écrire la ressource actuelle ; une révision périmée fournie est revision_conflict.

Champs du corps de la requête

ChampDescription
rate_mcr_per_15s (obligatoire, McrString)Montant exact en millicrédits sous forme de chaîne décimale canonique. 1 crédit équivaut à 1000 mcr. motif : "^-?[0-9]+$"
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/network/rate'

Réponses

StatutSensCorps et en-têtes
200Réseau mis à jour.AdvertisingNetwork (application/json)
412revision_conflict - If-Match est périmé.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)
GET/api/projects/{project_id}/advertising/inventory

Lister l’inventaire publicitaire dans le projet

L’inventaire auquel le vendeur appelant a souscrit.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/inventory'

Réponses

StatutSensCorps et en-têtes
200Inventaire.AdvertisingInventoryList (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)
GET/api/projects/{project_id}/advertising/slots

Lister les emplacements publicitaires dans le projet

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/slots'

Réponses

StatutSensCorps et en-têtes
200Emplacements.AdvertisingSlotList (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/projects/{project_id}/advertising/slots

Créer un emplacement publicitaire dans le projet

Crée un emplacement vendeur réutilisable. Les images durent de 5 à 30 secondes et les vidéos au maximum la limite de la plateforme de 120 secondes. Les publicités sont toujours muettes.

Authentification
projectBearer
Corps de la requête
AdvertisingSlotWrite
ID d’opération
createAdvertisingSlotInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)minLength : 1 maxLength : 120
activé (optionnel, booléen)
accepted_media (obligatoire, tableau)
max_image_duration_ms (obligatoire, entier)minimum : 5 000 maximum : 30 000
max_video_duration_ms (obligatoire, entier)minimum : 1 000 maximum : 120 000
rate_override_mcr_per_15s (optionnel, en ligne)
vast_tag_url (optionnel, en ligne)

La balise publicitaire VAST 2-4 propre au vendeur, testée quand aucune campagne invitée ne remplit ce créneau sur les écrans du vendeur. HTTPS sur port 443 ou 8443 vers un hôte public uniquement.

Le backend le récupère, suit jusqu’à cinq Wrappers, ingère le MediaFile MP4 ou WebM progressif choisi dans les médias du projet, et déclenche Impression, creativeView et start à un début accepté, complete à une fin acceptée, et Error en cas d’échec. Les traceurs de quartiles ne sont pas déclenchés.

Les macros [CACHEBUSTING], [TIMESTAMP], [SCREENRIG_SCREEN_ID], [SCREENRIG_SLOT_ID] et [SCREENRIG_PAGE_ID] sont développées. Le slot doit accepter la vidéo. Null, absent ou vide efface la balise. Les acheteurs ne la voient jamais.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/slots'

Réponses

StatutSensCorps et en-têtes
201Emplacements.AdvertisingSlot (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)
GET/api/projects/{project_id}/advertising/memberships

Lister les adhésions publicitaires dans le projet

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/memberships'

Réponses

StatutSensCorps et en-têtes
200Adhésions.AdvertisingMembershipList (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)
GET/api/projects/{project_id}/advertising/networks

Lister les réseaux publicitaires joints dans le projet

Réseaux auxquels l’annonceur appelant appartient actuellement, avec la portée et la politique de révision qui lui ont été accordées. Le nombre d’écrans n’est pas un nombre d’impressions garanti.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/networks'

Réponses

StatutSensCorps et en-têtes
200Réseaux rejoints.AdvertisingJoinedNetworkList (application/json)
403interdit - le projet ne possède pas le drapeau annonceur.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)
GET/api/projects/{project_id}/advertising/creatives

Lister les créations publicitaires dans le projet

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/creatives'

Réponses

StatutSensCorps et en-têtes
200Créations publicitaires.AdvertisingCreativeList (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/projects/{project_id}/advertising/creatives

Créer une création publicitaire dans le projet

Lie une révision média prête et possédée à une création immuable. Ne copie pas les octets, ne téléverse pas à nouveau, ni ne recharge la génération. Les médias inconnus ou non prêts sont rejetés.

Authentification
projectBearer
Corps de la requête
AdvertisingCreativeCreate
ID d’opération
createAdvertisingCreativeInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
media_id (obligatoire, chaîne)
copy (optionnel, chaîne)maxLength : 500
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/creatives'

Réponses

StatutSensCorps et en-têtes
201Création publicitaire.AdvertisingCreative (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)
GET/api/projects/{project_id}/advertising/campaigns

Lister les campagnes publicitaires dans le projet

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/campaigns'

Réponses

StatutSensCorps et en-têtes
200Campagnes.AdvertisingCampaignList (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/projects/{project_id}/advertising/campaigns

Créer une campagne publicitaire dans le projet

Crée une campagne brouillon. Les brouillons ne détiennent pas d’argent, ne réservent rien et n’autorisent aucune diffusion. L’activation nécessite un devis explicitement accepté.

Authentification
projectBearer
Corps de la requête
AdvertisingCampaignDraft
ID d’opération
createAdvertisingCampaignInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)minLength : 1 maxLength : 120
category (optionnel, AdvertisingCategory)

La catégorie de l’annonceur. Deux publicités d’une même catégorie ne jouent jamais dans la même pause publicitaire sur un écran ; une publicité sans catégorie n’est jamais séparée.

Autorisés : « alcohol », « apparel », « automotive », « beauty », « cannabis », « consumer_electronics », « education », « entertainment », « financial_services », « food_and_beverage », « gambling », « government », « grocery », « health_and_pharma », « home_and_garden », « insurance », « jobs », « legal », « media », « political », « quick_service_restaurants », « real_estate », « restaurants », « retail », « sports_and_fitness », « technology », « telecom », « tobacco_and_vaping », « travel », « utilities »

daily_cap_mcr (obligatoire, McrString)Montant exact en millicrédits sous forme de chaîne décimale canonique. 1 crédit équivaut à 1000 mcr. motif : "^-?[0-9]+$"
lifetime_cap_mcr (obligatoire, McrString)Montant exact en millicrédits sous forme de chaîne décimale canonique. 1 crédit équivaut à 1000 mcr. motif : "^-?[0-9]+$"
image_duration_ms (optionnel, entier)Durée d’affichage de l’image pour toute la campagne. Les vidéos conservent leur durée vérifiée par le serveur. par défaut : 10000 minimum : 5000 maximum : 30000
max_play_price_mcr (optionnel, en ligne)Prix maximum positif de lecture terminée. Omettre pour aucun plafond supplémentaire.
flight_start (obligatoire, chaîne)format : « date-time »
flight_end (obligatoire, chaîne)format : « date-time »
réseaux (obligatoire, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/campaigns'

Réponses

StatutSensCorps et en-têtes
201Campagne brouillon.AdvertisingCampaign (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)
GET/api/projects/{project_id}/advertising/reviews

Lister les revues publicitaires dans le projet

Versions créatives soumises au vendeur appelant pour revue. Un vendeur voit uniquement la création soumise exacte, jamais la bibliothèque de l’acheteur.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/reviews'

Réponses

StatutSensCorps et en-têtes
200Révisions.AdvertisingReviewList (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)
GET/api/projects/{project_id}/advertising/reports/spend

Obtenir les dépenses publicitaires dans le projet

Dépenses et livraisons limitées à un acheteur pour une campagne. Les montants sont des chaînes décimales mcr. Ne révèle jamais les revenus du vendeur, l’état bancaire ou l’usage global du projet.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
campaign_idrequêteobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/reports/spend?campaign_id=CAMPAIGN_ID'

Réponses

StatutSensCorps et en-têtes
200Rapport de dépenses.AdvertisingSpendReport (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)
GET/api/projects/{project_id}/advertising/reports/delivery

Obtenir la diffusion publicitaire dans le projet

Brut, frais de service et net à l’échelle du vendeur pour une fenêtre, avec ses propres preuves de diffusion. Ne révèle jamais le portefeuille de l’acheteur ni d’autres réseaux. Seules les preuves de diffusion terminée autorisées établissent une diffusion facturable. La fenêtre fait au maximum 92 jours ; une fenêtre plus large est invalid_request.

Quand il contient plus de 5000 règlements, la réponse définit tronqué, les totaux et les comptes couvrent toujours tous, et les lignes listent seulement les 5000 premiers.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
derequêteobligatoire
àrequêteobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/advertising/reports/delivery?from=FROM&to=TO'

Réponses

StatutSensCorps et en-têtes
200Rapport de livraison.AdvertisingDeliveryReport (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)
GET/api/projects/{project_id}/playback

Lister les agrégats de lecture dans le projet

Agrégats quotidiens de lecture.

JSON retourne au plus 200 lignes et n’est pas limité en débit. format=csv (ou Accept text/csv sans application/json) diffuse chaque ligne correspondante entre day_from et day_to (jours UTC inclus ; day_to par défaut aujourd’hui et day_from 30 jours avant ; au plus 366 jours, sinon invalid_request) en CSV avec une ligne d’en-tête fixe (PlaybackAggregateCsv) ; seule la forme CSV dépense les budgets playback-export-org (30 par minute) et playback-export-ip (60 par minute).

Chaque forme est une requête d’API mesurée. Les réponses portent Vary Accept. Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer screen_id, qui doit être un écran de son périmètre (sinon outside_screen_scope) ; les formes CSV suivent la même règle.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
screen_idrequêteoptionnel
media_idrequêteoptionnel
jourrequêteoptionnelJour calendaire UTC de l’agrégat.
day_fromrequêteoptionnelPremier jour UTC, inclus. Exclut day. Avec day_to couvre au maximum 366 jours. CSV le définit par défaut à 30 jours avant day_to.
day_torequêteoptionnelDernier jour UTC, inclusivement. Exclut le jour. CSV le définit par défaut à aujourd’hui (UTC).
formatrequêteoptionneljson (par défaut), csv, xlsx ou pdf. Si omis, un en-tête Accept qui nomme text/csv sans application/json sélectionne csv. xlsx et pdf écrivent les 50000 premières lignes de la même liste.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playback'

Réponses

StatutSensCorps et en-têtes
200

Agrégats quotidiens de lecture pour le projet appelant, images et vidéos confondues. Une ligne par écran, média et jour UTC. Les jours les plus récents en premier. Les identifiants filtrent uniquement les lignes du demandeur et ne font jamais de recherche inter-projets.

PlaybackAggregateList (application/json), PlaybackAggregateCsv (text/csv) ; en-têtes : Vary, RateLimit-Policy, RateLimit
400

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
GET/api/projects/{project_id}/playback/plays

Lister les lectures de lecture dans le projet

Enregistrements par lecture : une ligne par playback.media_started accepté (ou playback.video_started ancien) et une ligne par playback.application_started accepté (release_id défini, champs médias vides) du projet appelant, du plus ancien au plus récent selon received_at, égalités selon insertion. bornes from (incluse) et to (exclue) sur received_at ; to par défaut à maintenant, from à 24 heures avant to, et la plage au maximum 31 jours (sinon invalid_request).

Les 5 dernières secondes ne sont pas encore retournées : la fin effective est au plus maintenant moins 5 secondes (délai de stabilisation), donc une queue en direct ne saute jamais une ligne qui s’engage derrière son curseur. screen_id, media_id, playlist_id (la liste de lecture dont le début a été montré), et tag (une étiquette d’écran portée par l’écran lors de la réception de la lecture) filtrent.

Une page playlist_id peut contenir moins de lignes que la limite, voire aucune, avec un next_cursor quand une longue série de lectures d’autres listes a été parcourue ; null met toujours fin à la plage.

JSON est une page d'au plus limit lignes (par défaut 200, au plus 1000) avec next_cursor, null à la fin de la plage ; renvoyez-le comme cursor avec les mêmes filtres. order=desc (ou before) pagine les plus récentes en premier dans la même plage : next_cursor est alors le curseur de la ligne la plus ancienne retournée, null au début de la plage, et est renvoyé comme before (exclusif) avec les mêmes filtres ; order=asc avec before est refusé avec invalid_request nommant order, et cursor avec une page newest-first nommant cursor.

Une page la plus récente en premier peut contenir moins de lignes que la limite, voire aucune, avec un next_cursor ; null met toujours fin à la liste.

Une page ultérieure ne saute jamais une ligne qui existait lorsque la page antérieure a été lue et ne répète pas une ligne, sauf qu’un démarrage du Player renvoyé après un rapport non accusé de réception (le même play_id, reçu un instant plus tard) peut apparaître à nouveau sur une page ultérieure ; le flux CSV le liste une fois. format=csv (ou Accept text/csv sans application/json) diffuse chaque lecture du curseur à la fin de la plage en CSV (PlaybackPlayCsv), le plus récent en bas avant avec order=desc ; la limite est refusée avec CSV.

La mesure se fait par requête : chaque page JSON coûte un crédit de requête API, tandis qu’un flux CSV couvrant toute la plage en coûte un seul. Chaque requête de lectures (page ou flux) utilise les budgets playback-export-org (30 par minute) et playback-export-ip (60 par minute).

Un flux limite chaque écriture (15 secondes) et se termine à la déconnexion du client ; s’il échoue après l’en-tête 200, la connexion est interrompue, donc une exportation qui lit jusqu’à une fin propre est complète. Les réponses portent Vary Accept. Les lectures sont conservées pour la rétention d’événements du forfait (30 jours est le minimum livré ; la rétention selon le forfait utilise la fenêtre propre de 7 ou 90 jours).

Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer screen_id, qui doit être un écran de son périmètre (sinon outside_screen_scope) ; les formes CSV suivent la même règle.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
derequêteoptionnelLimite inférieure inclusive sur received_at. Par défaut 24 heures avant to.
àrequêteoptionnelLimite supérieure exclusive sur received_at. Par défaut maintenant. to - from est au maximum 31 jours.
screen_idrequêteoptionnel
media_idrequêteoptionnel
playlist_idrequêteoptionnelSeules les lectures affichées de cette liste de lecture.
étiquetterequêteoptionnelUne étiquette d’écran que l’écran portait lorsque la lecture a été reçue.
curseurrequêteoptionnelnext_cursor de la page précédente, avec les mêmes filtres. Opaque.
ordrerequêteoptionnelpages asc plus anciennes d’abord avec curseur ; pages desc plus récentes d’abord avec before. before implique desc ; order=asc avec before est refusé.
avantrequêteoptionnelPages les plus récentes d’abord, strictement plus anciennes que cette position : le next_cursor d’une page la plus récente d’abord, avec les mêmes filtres. Opaque.
limiterequêteoptionnelTaille de page JSON. Refusé avec CSV.
formatrequêteoptionneljson (par défaut), csv, xlsx ou pdf. Si omis, un en-tête Accept qui nomme text/csv sans application/json sélectionne csv. xlsx et pdf écrivent les 50000 premières lignes de la même liste.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playback/plays'

Réponses

StatutSensCorps et en-têtes
200Une page de lectures, ou le flux CSV.PlaybackPlayList (application/json), PlaybackPlayCsv (text/csv) ; en-têtes : Cache-Control, Vary, RateLimit-Policy, RateLimit
400

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)
401

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
GET/api/projects/{project_id}/playback/totals

Obtenir les totaux de lecture dans le projet

Totaux de lecture du projet appelant sur des jours UTC inclusifs, lus depuis les totaux quotidiens : by=day renvoie une ligne par jour avec lectures (screen_id ou media_id restreint à un écran ou média), by=screen et by=media classent les écrans ou médias les plus actifs (top, au plus 100), et by=screen_day renvoie la série journalière des écrans principaux (top au plus 10). day_to par défaut aujourd’hui (UTC) et day_from 29 jours avant.

Une série de jours couvre au maximum 366 jours (92 lorsqu’elle est restreinte à un écran ou un média) ; un classement au maximum 92. Les comptes incluent chaque démarrage enregistré par le projet, y compris ceux stockés avant l’existence des rollups de lecture.

Les rollups suivent l’ingestion jusqu’à environ 21 minutes. truncated est vrai lorsqu’un classement a été construit à partir de tranches d’une fenêtre trop grande pour une seule lecture : il couvre les meilleures clés de chaque tranche. Pas de limitation de débit. Une requête API mesurée.

Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer screen_id, qui doit être un écran de son périmètre (sinon outside_screen_scope) ; les formes CSV suivent la même règle.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
parrequêteoptionneljour : lectures par jour ; écran, médias : les clés les plus actives ; screen_day : la série journalière des écrans principaux.
day_fromrequêteoptionnelPremier jour UTC, inclus. Par défaut, 29 jours avant day_to. Une série de jours couvre au maximum 366 jours (92 lorsqu’elle est limitée à un écran ou un média), un classement au maximum 92.
day_torequêteoptionnelDernier jour UTC, inclusivement. Par défaut aujourd’hui (UTC).
screen_idrequêteoptionnel
media_idrequêteoptionnel
hautrequêteoptionnelNombre d’écrans ou de médias qu’un classement retourne (au maximum 10 pour by=screen_day). Refusé avec by=day.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playback/totals'

Réponses

StatutSensCorps et en-têtes
200Totaux du regroupement demandé.PlaybackTotals (application/json) ; en-têtes : Cache-Control
400

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)
401

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)
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)
GET/api/projects/{project_id}/playback/completeness

Obtenir l'exhaustivité de la lecture d'un projet

Parmi les lectures effectuées par les écrans, combien sont parvenues au backend, et où se situent les lectures manquantes. Les Players numérotent les débuts de lecture de leurs médias; un début qui n'est jamais arrivé laisse donc un trou dans la numérotation, par exemple lorsqu'un écran reste hors ligne au-delà de sa file de rapports de 24 heures ou que la file abandonne des rapports.

Sur les jours UTC compris entre day_from et day_to, bornes incluses (day_to vaut par défaut aujourd'hui, en UTC, et day_from 29 jours avant; la période couvre au plus 92 jours), la réponse contient measured_plays, les lectures numérotées qui sont arrivées; missing_plays, les numéros que les Players ont sautés; completeness, measured_plays divisé par leur somme, null lorsque les deux valent 0; days, les trois mêmes chiffres pour chaque jour qui en compte, du plus ancien au plus récent, un trou étant compté au jour UTC de la lecture qui le suit; et gaps, les trous du plus récent au plus ancien, chacun avec son screen_id, son day, from et to (les heures de début des lectures de part et d'autre du trou) et missing_plays. screen_id restreint days et gaps à un seul écran; limit (100 par défaut, 500 au plus) plafonne gaps, et truncated vaut true lorsqu'il en existe davantage.

Un écran éteint ne produit aucune lecture et ne laisse aucune lacune. Les lectures sans numéro (anciens Players, débuts de lecture enregistrés avant les numéros de lecture) ne sont pas mesurées : elles figurent dans play_count de GET /api/playback/totals et dans aucun de ces chiffres. Sans limite de débit. Une requête d'API mesurée.

Un appelant limité aux écrans (docs/screen-scope.md) doit envoyer screen_id, qui doit être un écran de son périmètre (sinon outside_screen_scope) ; les formes CSV suivent la même règle.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
day_fromrequêteoptionnelPremier jour UTC, inclus. Par défaut, 29 jours avant day_to. Avec day_to, la période couvre au plus 92 jours.
day_torequêteoptionnelDernier jour UTC, inclusivement. Par défaut aujourd’hui (UTC).
screen_idrequêteoptionnel
limiterequêteoptionnelNombre maximal de lacunes à lister, des plus récentes aux plus anciennes.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/playback/completeness'

Réponses

StatutSensCorps et en-têtes
200L'exhaustivité de la période et ses lacunes.PlaybackCompleteness (application/json); en-têtes : Cache-Control
400

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)
401

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)
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)
GET/api/projects/{project_id}/health/trend

Obtenir Health Trend dans le projet

La santé de la flotte du projet par heure UTC : combien d’écrans ont rapporté, et combien d’entre eux étaient chauds (à 80 °C ou plus), avaient un afficheur déconnecté ou plantaient (3 crashs ou plus en 24 heures). from (inclus) et to (exclus) par défaut les dernières 24 heures, au maximum 93 jours ; une page contient au maximum limit lignes (par défaut 100, au maximum 500) avec next_cursor, nul à la fin.

Les heures suivent les rapports avec un décalage d’environ 5 minutes au plus. Refusé à un appelant limité aux écrans (outside_screen_scope) ; GET /api/screens/{id}/health/history est la forme par écran.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
derequêteoptionnelLimite inférieure inclusive sur l’heure du rapport. Par défaut 24 heures avant to.
àrequêteoptionnelLimite supérieure exclusive sur l’heure du rapport. Par défaut maintenant.
limiterequêteoptionnelTaille de la page.
curseurrequêteoptionnelnext_cursor de la page précédente, avec les mêmes filtres. Opaque.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/health/trend'

Réponses

StatutSensCorps et en-têtes
200Une page de santé horaire de la flotte.HealthTrend (application/json) ; en-têtes : Cache-Control
400

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)
401

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)
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)
GET/api/projects/{project_id}/uptime/daily

Obtenir le temps de disponibilité du projet dans le projet

Disponibilité quotidienne des écrans du projet sur des jours UTC inclusifs (par défaut et plage comme GET /api/screens/{id}/uptime). Chaque ligne totalise les secondes en ligne et hors ligne des écrans avec un état enregistré ce jour-là ; la couverture est la part de la journée de ces écrans avec un état enregistré.

Les intervalles comptent à leur fin, de sorte que la ligne d’aujourd’hui couvre les intervalles terminés jusqu’ici ; le nombre en ligne en direct se trouve dans le résumé du tableau de bord. Refusé à un appelant limité aux écrans (outside_screen_scope) ; GET /api/screens/{id}/uptime est la forme par écran.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
day_fromrequêteoptionnelPremier jour UTC, inclus. Par défaut, 29 jours avant day_to. Avec day_to couvre au maximum 366 jours.
day_torequêteoptionnelDernier jour UTC, inclusivement. Par défaut aujourd’hui (UTC).
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/uptime/daily'

Réponses

StatutSensCorps et en-têtes
200Lignes quotidiennes de disponibilité, les plus anciennes en premier.ProjectUptime (application/json) ; en-têtes : Cache-Control
400

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)
401

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)
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)
GET/api/projects/{project_id}/card-types

Lister les types de carte dans le projet

Découvrez les cartes intégrées du catalogue publié de cet environnement, fusionné avec le catalogue fournisseur. Les actualisations et vérifications du schéma se font en arrière-plan; cette route n’appelle jamais le seau edge. Chaque entrée liste sa copie actuelle, son niveau et les mises en page autorisées par ce niveau, ainsi que chaque majeur servi.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/card-types'

Réponses

StatutSensCorps et en-têtes
200Catalogue de cartes intégré, ordonné par idCardCatalogue (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)
GET/api/projects/{project_id}/card-data

Lister les données de carte dans le projet

Liste les documents de données de carte du projet, au maximum 200 par ordre croissant de clé. next_cursor est la dernière clé retournée ; renvoyez-la comme after pour la page suivante, null s’il n’y en a plus. Les documents de données de carte contiennent les propriétés dynamiques des emplacements de carte (sections de menu, éléments de ticker, tuiles KPI) ; la clé de données de l’emplacement en nomme un.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
aprèsrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/card-data'

Réponses

StatutSensCorps et en-têtes
200Documents de données de carteCardDataList (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)
GET/api/projects/{project_id}/media

Lister les médias dans le projet

Liste les médias prêts, les plus récents d’abord, au maximum 1000 par page. folder conserve uniquement les fichiers directement dans un dossier média (son ID), ou root uniquement ceux à la racine de la bibliothèque ; un ID de dossier bien formé qui ne nomme aucun dossier ne liste rien. next_cursor est la position de la dernière ligne retournée tant qu’il reste des lignes ; renvoyez-le comme after, avec les mêmes filtres, pour la page suivante. next_cursor est null à la dernière page.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
étiquetterequêteoptionnelÉtiquette média exacte. Les objets non étiquetés sont omis lorsque ce filtre est présent.
primitifrequêteoptionnel
dossierrequêteoptionnelUn ID de dossier média ne conserve que les fichiers directement dans ce dossier, pas ceux de ses sous-dossiers ; la racine ne conserve que les fichiers à la racine de la bibliothèque. Omettre liste tous les fichiers.
idsrequêteoptionnel

ID de médias séparés par des virgules, au plus 200 distincts ; au-delà, c’est invalid_request sur ids. Ne garde que ces fichiers : un ID qui ne désigne aucun fichier prêt est absent, et les autres filtres ainsi que la pagination s’appliquent toujours. Une valeur vide ne liste rien.

libraryrequêteoptionnel

true liste le projet Bibliothèque de l’organisation au lieu de ce projet : ses éléments sont en lecture seule ici et portent library true. Une organisation sans Bibliothèque, ou le projet Bibliothèque lui-même, ne liste rien avec true.

aprèsrequêteoptionnelnext_cursor de la page précédente de la même liste, avec les mêmes filtres. Omission commence à la ligne la plus récente. Une valeur qui n’est pas un tel curseur est invalid_request.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media'

Réponses

StatutSensCorps et en-têtes
200MédiasMediaList (application/json)
POST/api/projects/{project_id}/media/generations

Créer une génération de médias dans le projet

Générer une image fixe à partir d’une invite, la stocker comme média privé prêt du projet et facturer son utilisation. Le POST répond 202 immédiatement avec Operation, avec ou sans Prefer: respond-async, car un proxy devant l’API abandonne une requête qui n’envoie aucun octet pendant 100 s et une image fixe de haute qualité peut prendre plus de temps.

Interrogez GET /api/operations/{id} jusqu’à ce que Operation soit succeeded, lorsque son result vaut {media_id, usage: {quality, credits, usd}} (MediaGenerationUsage), ou failed, lorsque son error indique le problème. Un refus décidé avant tout travail du fournisseur (payment_required, reseller_generation_limit, rate_limited, not_ready, invalid_request) répond toujours au POST.

Il n'inclut jamais les octets d'image, b64_json, clés d'objet, URL signées, URL du fournisseur, coût du fournisseur, jetons du fournisseur, ni le nom du modèle de déploiement. L'invite est des octets client et n'est pas renvoyée.

Avant que le prompt n’atteigne le fournisseur d’image, le serveur y ajoute des exigences de cadrage fixes : l’œuvre doit remplir le cadre de bord à bord, et aucune télévision, moniteur, écran, afficheur, bordure, cadre, montage, support, mur, pièce, maquette d’appareil, ombre portée ou photographie d’un panneau installé ne peut être représenté, et toute description dans le prompt de l’appelant indiquant où le panneau sera suspendu ou quel appareil l’affichera est traitée comme des métadonnées de placement plutôt que comme sujet.

Les règles décoratives et bordures à l’intérieur du design lui-même restent disponibles. L’invite de l’appelant n’est jamais réécrite ni supprimée et est stockée inchangée. Idempotency-Key rejoue la même Operation, jamais une deuxième tentative facturée. Les clients ne font pas de PUT ni ne valident les octets générés.

La version stockée est un WebP avec perte (qualité 90) à la taille exacte du format avec un bord court de 1080 px (16:9 est 1920x1080, 9:16 1080x1920, 1:1 1080x1080, 4:3 1440x1080, 3:4 1080x1440, 3:2 1620x1080, 2:3 1080x1620) ; la toile du fournisseur est recadrée au centre et rééchantillonnée à cette taille.

Le nom de fichier est distinctif par génération, generated-16x9-1a2b3c4d.webp, avec le suffixe tiré de l’identifiant média. Récupérez les octets avec GET /api/media/{id}/content. Own-gen-then-upload reste valide.

Sur Standard, le solde restant qui ne peut couvrir deux fois le coût fournisseur de l’image fixe, arrondi aux crédits entiers, après le plancher d’introduction (moins 1 000 000 crédits jusqu’au 2027-01-01, puis zéro) renvoie payment_required, sauf SCREENRIG__ENVIRONMENT=development, et l’admission avant l’appel fournisseur exige un solde au-dessus de ce plancher du minimum par qualité : 200 crédits pour faible, 800 pour moyen, 2000 pour élevé.

Les autres forfaits ne sont jamais refusés pour leur solde.

Une organisation facturée par l’entremise d’un revendeur est refusée avec reseller_generation_limit (402) dès que les clients délégués de son revendeur se sont vu facturer la limite mensuelle de génération d’images ($100 au prix de liste tant que le revendeur attend son examen, $1,000 ensuite, comptés par mois UTC), sauf si le crédit propre de l’organisation couvre l’image; une génération déjà admise se termine.

Une configuration vide du fournisseur sélectionné renvoie not_ready. Jeton de projet uniquement. Une seule génération en cours par organisation; tout parallélisme supplémentaire est rate_limited.

Authentification
projectBearer
Corps de la requête
MediaGenerationRequest
ID d’opération
createMediaGenerationInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire
Preferen-têteoptionnelFacultatif. La route répond 202 immédiatement avec Operation, avec ou sans cet en-tête ; interrogez Operation.

Champs du corps de la requête

ChampDescription
invite (requis, chaîne)minLength : 1 maxLength : 4000
aspect_ratio (optionnel, chaîne)Autorisés : « 1:1 », « 16:9 », « 9:16 », « 4:3 », « 3:4 », « 3:2 », « 2:3 » par défaut : « 16:9 »
qualité (optionnelle, chaîne)Autorisé : « low », « medium », « high » par défaut : « medium »
étiquette (optionnelle, chaîne)modèle : "^[A-Za-z0-9]{1,32}$"
références (optionnelles, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media/generations'

Réponses

StatutSensCorps et en-têtes
202

La génération a été acceptée et se poursuit ; interrogez GET /api/operations/{id} jusqu’à ce que Operation soit succeeded (result media_id et usage) ou failed (error). Le même Idempotency-Key répond avec la même Operation.

Opération (application/json) ; en-têtes : Preference-Applied, RateLimit-Policy, RateLimit
402

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)
404

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)
500

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)
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)
GET/api/projects/{project_id}/media-folders

Lister les dossiers de médias dans le projet

Liste chaque dossier média dans le projet, au maximum 1000, ordonnés par nom. Les dossiers organisent la bibliothèque multimédia, et un sélecteur de liste de lecture par :folder lit directement les fichiers dans un dossier. Le parent_id d’un dossier est null à la racine de la bibliothèque.

Construisez l’arbre à partir du parent_id ; le dossier d’un fichier est Media.folder_id. library=true liste à la place les dossiers de la Bibliothèque de l’organisation (en lecture seule ; un sélecteur by:folder peut en nommer un).

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
libraryrequêteoptionnel

true liste le projet Bibliothèque de l’organisation au lieu de ce projet : ses éléments sont en lecture seule ici et portent library true. Une organisation sans Bibliothèque, ou le projet Bibliothèque lui-même, ne liste rien avec true.

Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-folders'

Réponses

StatutSensCorps et en-têtes
200Dossiers médiasMediaFolderList (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/projects/{project_id}/media-folders

Créer un dossier de médias dans le projet

Crée un dossier média à la racine de la bibliothèque (parent_id nul ou absent) ou à l’intérieur de parent_id. Les noms sont rognés, contiennent de 1 à 100 caractères Unicode sans contrôles, ne sont ni « . » ni « .. », et peuvent se répéter. Une organisation contient au maximum 1000 dossiers, tous projets confondus (quota_exceeded), imbriqués au maximum à 10 niveaux (invalid_request). Émet media.folder_created.

Authentification
projectBearer
Corps de la requête
MediaFolderCreate
ID d’opération
createMediaFolderInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
nom (obligatoire, chaîne)Tronqué ; 1 à 100 caractères Unicode, sans contrôles, ni . ou .. minLength : 1 maxLength : 100
parent_id (optionnel, en ligne)Le dossier dans lequel le créer ; null ou absent pour la racine de la bibliothèque.
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-folders'

Réponses

StatutSensCorps et en-têtes
201Dossier créé.MediaFolder (application/json) ; en-têtes : ETag
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/projects/{project_id}/media/move

Déplacer les médias dans le projet

Déplace des fichiers (media_ids) et des dossiers (folder_ids) dans un dossier (folder_id), ou à la racine de la bibliothèque lorsque folder_id est null, en une seule requête tout ou rien d’au plus 1000 identifiants. Chaque identifiant doit exister (not_found). Un dossier ne peut pas être déplacé dans lui-même ou un dossier à l’intérieur, et le déplacement doit maintenir chaque dossier dans 10 niveaux (invalid_request).

Les éléments déjà dans la destination sont laissés tels quels ; chaque fichier et dossier déplacé avance sa révision. Déplacer des fichiers change ce que les sélecteurs by:folder de leurs anciens et nouveaux dossiers lisent, depuis la résolution du prochain sélecteur de chaque écran ; déplacer un dossier ne change pas les fichiers propres à un dossier. Émet media.moved.

Un déplacement d’identifiant Propose rend chaque fichier déplacé en attente et met en file sa revue média, et les sélecteurs des listes de lecture approuvées le résolvent par le dossier avec lequel il a été approuvé jusqu’à ce qu’une personne approuve le changement (docs/reviews.md).

Authentification
projectBearer
Corps de la requête
MediaMove
ID d’opération
moveMediaInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
folder_id (obligatoire, en ligne)Dossier de destination ; nul pour la racine de la bibliothèque.
media_ids (optionnel, tableau)
folder_ids (optionnel, tableau)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media/move'

Réponses

StatutSensCorps et en-têtes
200Nombre de fichiers et dossiers déplacés.MediaMoveResult (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/projects/{project_id}/media/uploads

Créer un téléversement de médias dans le projet

Authentification
projectBearer
Corps de la requête
MediaUploadDeclaration
ID d’opération
createMediaUploadInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire
project_idrequêteoptionnel

Requis avec dashboardSession : le projet où le fichier a été mis en file d’attente. Doit correspondre au projet sélectionné de la session, sinon resource_conflict. Cela lie l’admission de téléversement entre onglets. L’ID de téléversement retourné reste limité au projet pour le téléversement et la validation d’octets. Omission avec un porteur de projet.

Champs du corps de la requête

ChampDescription
nom de fichier (obligatoire, chaîne)Nom des octets téléversés, tels qu’ils seront envoyés : un nom de fichier seul d’au plus 255 octets UTF-8, sans répertoire, barre oblique inverse ni caractères de contrôle. minLength : 1 maxLength : 255
source_filename (optionnel, chaîne)

Nom de fichier original de l’appelant avant toute transcodification côté client. Nom de fichier seul, d’au plus 255 octets UTF-8. Stocké tel quel dans le média prêt sous source_filename et utilisé pour dériver filename. minLength : 1 maxLength : 255

content_type (obligatoire, chaîne)Autorisés : « image/png », « image/jpeg », « image/webp », « image/gif », « video/mp4 », « video/webm », « audio/mpeg »
octets (obligatoire, entier)minimum : 1 maximum : 1 073 741 824
sha256 (obligatoire, chaîne)modèle : "^[a-f0-9]{64}$"
étiquette (optionnelle, chaîne)modèle : "^[A-Za-z0-9]{1,32}$"
folder_id (facultatif, chaîne)

Le dossier de médias où arrive le média prêt ; omis, il arrive à la racine de la bibliothèque. Le dossier doit exister lorsque le téléversement est déclaré (sinon invalid_request sur folder_id) et lorsqu’il est validé (l’opération échoue avec invalid_request : déclarez-le de nouveau). Un téléverseur (docs/uploaders.md) doit envoyer l’un de ses dossiers (sinon outside_upload_scope).

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media/uploads'

Réponses

StatutSensCorps et en-têtes
201

Autorisation signée de courte durée pour exactement un PUT d’objet privé. Envoyez la méthode retournée et chaque en-tête retourné textuellement. C’est aussi ainsi que le tableau de bord téléverse. Son navigateur envoie les octets par PUT directement au stockage d’objets, jamais via l’API, car un proxy devant l’API refuse un corps de la requête de plus de 100 MB.

Un navigateur définit Content-Length lui-même à partir du corps, donc il envoie chaque en-tête retourné sauf celui-là.

MediaUploadSession (application/json) ; en-têtes : Cache-Control, RateLimit-Policy, RateLimit
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/projects/{project_id}/selectors/preview

Sélecteur d’aperçu dans le projet

Aperçu en lecture seule des correspondances d’images ou vidéos prêtes appartenant au projet actuel. Retourne l’ordre des fichiers et la politique normalisée ; la lecture aléatoire est mélangée à chaque nouvelle passe sur le lecteur. Ne fait pas avancer les curseurs, créer des droits de contenu, ni modifier les manifestes. Plus de 1024 correspondances retourne invalid_request.

Authentification
projectBearer
Corps de la requête
SelectorPreviewInput
ID d’opération
previewSelectorInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
fuseau horaire (optionnel, chaîne)Fuseau IANA dans lequel la disponibilité des médias est lue ; UTC par défaut.
rect (optionnel, objet)La taille rect de la primitive ; obligatoire avec selector.fit aspect.
primitif (obligatoire, chaîne)Autorisés : « image », « video »
sélecteur (obligatoire, en ligne)
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/selectors/preview'

Réponses

StatutSensCorps et en-têtes
200Correspondances actuelles du sélecteur.SelectorPreview (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)
GET/api/projects/{project_id}/feedback/bugs

Lister les rapports de bogue dans le projet

Retourne les rapports de bogues du projet appelant, les plus récents d’abord, jusqu’à cent. Les soumissions d’un autre projet ne sont jamais retournées. Lire un fil possédé par son ID de rétroaction. Il n’y a pas de curseur de pagination en v1. Chaque soumission porte son statut et les réponses du personnel/agent, les plus anciennes d’abord.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/feedback/bugs'

Réponses

StatutSensCorps et en-têtes
200Rapports de bogues appartenant au projet appelant.FeedbackList (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/projects/{project_id}/feedback/bugs

Signaler un bogue dans le projet

Enregistre un rapport de bogue pour le projet appelant. Les champs propres à une soumission ne peuvent être mis à jour ou supprimés ; ajoutez une correction ou plus d’informations avec une réponse sur le même fil de retour.

Une nouvelle tentative exacte portant la même Idempotency-Key retourne la soumission originale pendant vingt-quatre heures au lieu de créer un doublon, et un corps différent sous cette clé retourne idempotency_mismatch. Chaque soumission est filtrée avant d’être stockée.

Un corps de moins de 12 caractères ou 3 mots retourne submission_too_short ; un texte ne décrivant aucun problème ou demande (caractères aléatoires, frappes au clavier) retourne submission_unclear ; spam, texte avec beaucoup de liens, injection de prompt et texte malveillant retournent submission_rejected.

Une soumission refusée n’est pas stockée, son détail de problème ne répète jamais le texte soumis, et une nouvelle tentative exacte sous le même Idempotency-Key renvoie le même refus.

Ne jamais placer de justificatifs, cookies, en-têtes d’autorisation, nonces d’achèvement, URL signées ou clés d’objet dans le titre, le corps ou le contexte ; le texte en forme de justificatif (jetons ScreenRig, JWT, jetons porteurs, clés cloud et API, clés privées) est remplacé par [caviardé] avant que la soumission soit stockée, et la réponse porte le texte caviardé.

Lorsque le modèle de filtrage est brièvement indisponible, la soumission est acceptée et mise en attente pour un nouveau filtrage en arrière-plan ; après plusieurs acceptations similaires en une heure, le projet reçoit submission_screening_unavailable (500, Retry-After) et réessaie la même requête plus tard.

Authentification
projectBearer
Corps de la requête
FeedbackWrite
ID d’opération
reportBugInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
titre (obligatoire, chaîne)Résumé sur une seule ligne. Les espaces en début et fin sont supprimés, et les caractères de contrôle sont refusés. minLength : 1 maxLength : 120
corps (obligatoire, chaîne)Description complète. Saut de ligne et tabulation sont les seuls caractères de contrôle acceptés. minLength : 1 maxLength : 4000
context (optionnel, FeedbackContext)

Enveloppe de diagnostic fermée. Chaque membre est un scalaire contraint optionnel, l’imbrication est structurellement impossible, et un membre inconnu est rejeté avec invalid_request. La forme existe pour qu’un client ne puisse pas persister des valeurs d’argument, des identifiants ou des données d’environnement libres à travers elle.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/feedback/bugs'

Réponses

StatutSensCorps et en-têtes
201Rapport de bogue stocké. Une nouvelle tentative idempotente exacte renvoie cette même soumission.FeedbackSubmission (application/json) ; en-têtes : RateLimit-Policy, RateLimit
400

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)
409

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)
422

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
GET/api/projects/{project_id}/feedback/features

Lister les demandes de fonctionnalités dans le projet

Retourne les demandes de fonctionnalités du projet appelant, les plus récentes d’abord, jusqu’à cent. Les soumissions d’un autre projet ne sont jamais retournées. Lire un fil possédé par son ID de rétroaction. Il n’y a pas de curseur de pagination en v1. Chaque soumission porte son statut et les réponses du personnel/agent, les plus anciennes d’abord.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/feedback/features'

Réponses

StatutSensCorps et en-têtes
200Demandes de fonctionnalités appartenant au projet appelant.FeedbackList (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/projects/{project_id}/feedback/features

Demander une fonctionnalité dans un projet

Enregistre une demande de fonctionnalité pour le projet appelant. Les champs propres à une soumission ne peuvent être mis à jour ou supprimés ; ajoutez une correction ou plus d’informations avec une réponse sur le même fil de retour.

Une nouvelle tentative exacte portant la même Idempotency-Key retourne la soumission originale pendant vingt-quatre heures au lieu de créer un doublon, et un corps différent sous cette clé retourne idempotency_mismatch. Chaque soumission est filtrée avant d’être stockée.

Un corps de moins de 12 caractères ou 3 mots retourne submission_too_short ; un texte ne décrivant aucun problème ou demande (caractères aléatoires, frappes au clavier) retourne submission_unclear ; spam, texte avec beaucoup de liens, injection de prompt et texte malveillant retournent submission_rejected.

Une soumission refusée n’est pas stockée, son détail de problème ne répète jamais le texte soumis, et une nouvelle tentative exacte sous le même Idempotency-Key renvoie le même refus.

Ne jamais placer de justificatifs, cookies, en-têtes d’autorisation, nonces d’achèvement, URL signées ou clés d’objet dans le titre, le corps ou le contexte ; le texte en forme de justificatif (jetons ScreenRig, JWT, jetons porteurs, clés cloud et API, clés privées) est remplacé par [caviardé] avant que la soumission soit stockée, et la réponse porte le texte caviardé.

Lorsque le modèle de filtrage est brièvement indisponible, la soumission est acceptée et mise en attente pour un nouveau filtrage en arrière-plan ; après plusieurs acceptations similaires en une heure, le projet reçoit submission_screening_unavailable (500, Retry-After) et réessaie la même requête plus tard.

Authentification
projectBearer
Corps de la requête
FeedbackWrite
ID d’opération
requestFeatureInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
titre (obligatoire, chaîne)Résumé sur une seule ligne. Les espaces en début et fin sont supprimés, et les caractères de contrôle sont refusés. minLength : 1 maxLength : 120
corps (obligatoire, chaîne)Description complète. Saut de ligne et tabulation sont les seuls caractères de contrôle acceptés. minLength : 1 maxLength : 4000
context (optionnel, FeedbackContext)

Enveloppe de diagnostic fermée. Chaque membre est un scalaire contraint optionnel, l’imbrication est structurellement impossible, et un membre inconnu est rejeté avec invalid_request. La forme existe pour qu’un client ne puisse pas persister des valeurs d’argument, des identifiants ou des données d’environnement libres à travers elle.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/feedback/features'

Réponses

StatutSensCorps et en-têtes
201Demande de fonctionnalité stockée. Une nouvelle tentative idempotente exacte renvoie cette même soumission.FeedbackSubmission (application/json) ; en-têtes : RateLimit-Policy, RateLimit
400

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)
409

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)
422

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)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
GET/api/projects/{project_id}/service-clients

Lister les clients de service dans le projet

Les clients de service du projet (spécification : un serveur client, script ou tâche CI appartenant au projet), du plus récent au plus ancien, actifs et révoqués, avec leurs clés publiques, identifiants secrets et usage ; jamais un secret ou son résumé. Nécessite la capacité du projet.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/service-clients'

Réponses

StatutSensCorps et en-têtes
200Le client de service.ServiceClientList (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/projects/{project_id}/service-clients

Créer un client de service dans le projet

Crée un client de service appartenant au projet avec un nom, des capacités (omises signifie les six ; chacune doit être détenue par le gestionnaire, sinon 403), un accès (lecture, par défaut, ou gestion), et une clé JWK publique (OKP Ed25519, EC P-256 ou RSA d’au moins 2048 bits) et/ou un secret vrai. Le secret est retourné une seule fois, ici uniquement. Au maximum 50 clients actifs par organisation.

Les agents ont besoin de la portée d’identité, de la gestion d’identité active, de leur propre droit de gestion avec la capacité projet sur le projet, et d’un rôle d’administrateur d’organisation actif ; une personne utilise la session du tableau de bord avec project_id et une preuve récente (type service_client_change, sujet l’identifiant client, ou l’identifiant projet lors de la création) dans le corps. Un jeton de service est refusé 403.

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
agentIdentityBearer
Corps de la requête
ServiceClientChange
ID d’opération
createServiceClientInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire

Champs du corps de la requête

ChampDescription
project_id (optionnel, chaîne)Session du tableau de bord uniquement.
preuve (optionnelle, DashboardProof)
nom (optionnel, chaîne)minLength : 1 maxLength : 80
capacités (facultatif, tableau)
accès (facultatif, chaîne)Gérer nécessite une personne pouvant approuver les révisions (403 approver_required). Autorisé : « lire », « proposer », « gérer »
clé (optionnelle, objet)Une JWK publique : OKP Ed25519, EC P-256 ou RSA d’au moins 2048 bits.
secret (optionnel, booléen)Générer un secret (création uniquement).
upload_scope (facultatif, UploadScope)

Ce qu’un téléverseur peut utiliser (docs/uploaders.md) : les listes de lecture dont il modifie les pages et les dossiers de médias dans lesquels il téléverse. Les dossiers sont exactement ceux qui sont listés, jamais leurs sous-dossiers. Un id qui ne désigne aucun objet actif du projet à l’écriture donne invalid_request à sa position ; une suppression ultérieure laisse un id mort, qui ne donne aucun droit.

Le périmètre est lu à chaque requête, de sorte qu’un changement s’applique à la suivante.

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/service-clients'

Réponses

StatutSensCorps et en-têtes
201Le client de service.ServiceClientResult (application/json)
402

feature_not_in_plan — un périmètre de téléversement crée un téléverseur, et le forfait du projet n’inclut pas les téléverseurs ; required_plan nomme le forfait qui les inclut. Restreindre un périmètre et le retirer sont toujours autorisés.

Problème (application/problem+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)
GET/api/projects/{project_id}/media-sync-accounts

Lister les comptes de synchronisation de médias dans le projet

Lists the project's media sync accounts, newest first (200 per page; next_cursor continues). Each shows its tenant and client id, its state and its last test; the client secret is never returned, only whether one is set and its last four characters.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
curseurrequêteoptionnelLe next_cursor de la page précédente.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-sync-accounts'

Réponses

StatutSensCorps et en-têtes
200Les comptes du projet.MediaSyncAccountList (application/json); en-têtes : Cache-Control
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/projects/{project_id}/media-sync-accounts

Créer un compte de synchronisation de médias dans le projet

Ajoute un compte qui synchronise en lecture. kind microsoft365 stocke les identifiants de l’application Microsoft Entra propre au projet, de sorte que les synchronisations peuvent lire un dossier SharePoint ou OneDrive Entreprise : config.tenant_id est l’ID de répertoire ou le domaine principal du locataire (common, organizations et consumers sont refusés), config.client_id l’ID d’application de l’application, et secret la valeur de l’un des secrets client de l’application ; l’application exige l’autorisation d’application Microsoft Graph Sites.Selected (accordée sur chaque site) ou Files.Read.All, avec le consentement administrateur.

Au lieu de ces trois paramètres, config.connection_id désigne une connexion Microsoft du projet (createConnection), dans l’un ou l’autre mode, qui se connecte et détient le secret. kind canva ne prend qu’un nom : le compte est pending_consent et la réponse porte authorize_url, un lien à usage unique (valable jusqu’à authorize_expires_at) que la personne titulaire du compte Canva ouvre, connectée à Canva, pour le connecter par l’intégration Canva de screenRIG.

L’autorisation appartient au projet ; ses synchronisations survivent donc à la personne qui a effectué la connexion.

Un serveur sans l’intégration Canva répond 409 canva_not_configured. kind dropbox fonctionne comme canva : le compte est pending_consent et authorize_url est un lien à usage unique que la personne titulaire du compte Dropbox ouvre, connectée à Dropbox, pour autoriser un accès en lecture seule (files.metadata.read, files.content.read, account_info.read, sharing.read).

La connexion passe par l’application Dropbox de screenRIG, ou par l’application Dropbox propre au client lorsque config.app_key la désigne (PKCE, donc sans secret d’application ; l’application doit déclarer https://API_ORIGIN/api/dropbox/callback comme URI de redirection).

Un serveur sans l’application Dropbox de screenRIG répond 409 dropbox_not_configured à un compte dropbox sans app_key. kind google_drive est ready d’emblée et lit les dossiers partagés avec config.service_account_email : le compte de service de screenRIG, ou celui du client lorsque secret est la clé JSON de ce compte de service.

Un dossier partagé avec le compte de service de screenRIG ne se synchronise que si un membre du projet dont le courriel est vérifié l’a partagé ou en est propriétaire. Un serveur sans le compte de service de screenRIG répond 409 google_drive_not_configured à un compte google_drive sans clé. Un secret est scellé au repos et n’est jamais renvoyé ni journalisé. Ajoute media_sync_account.created.

Une nouvelle tentative identique avec la même Idempotency-Key renvoie le même compte (une nouvelle tentative Canva ou Dropbox reçoit un nouveau lien).

Authentification
projectBearer
Corps de la requête
MediaSyncAccountWrite
ID d’opération
createMediaSyncAccountInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
type (obligatoire, chaîne)Autorisés : « microsoft365 », « canva », « dropbox », « google_drive »
nom (obligatoire, chaîne)minLength : 1 maxLength : 80
config (facultatif, object)

Pour microsoft365, soit tenant_id et client_id (les deux) avec secret, soit connection_id seul : l’ID d’une connexion Microsoft de ce projet. Pour dropbox, app_key nomme facultativement l’application Dropbox propre au client. Non accepté pour canva ni pour google_drive.

secret (facultatif, chaîne)

Requis pour microsoft365 avec tenant_id et client_id : la valeur de l’un des secrets client de l’application (pas son ID), 1024 caractères au plus.

Pour google_drive, facultatif : la clé JSON du compte de service Google Cloud propre au client (type service_account), dont le client_email devient le service_account_email du compte ; sans elle, la lecture passe par le compte de service de screenRIG. Non accepté avec connection_id, ni pour canva ni pour dropbox. minLength: 1 maxLength: 8192

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-sync-accounts'

Réponses

StatutSensCorps et en-têtes
201Créé, avec son secret masqué ; un compte Canva ou Dropbox porte aussi authorize_url.MediaSyncAccountConnect (application/json); en-têtes : ETag, Cache-Control
400invalid_request.Problème (application/problem+json)
402feature_not_in_plan — le forfait du projet n’inclut pas la synchronisation de médias ; required_plan nomme le forfait qui l’inclut.Problème (application/problem+json)
409

canva_not_configured (ce serveur n’a pas d’intégration Canva ; kind canva seulement), dropbox_not_configured (aucune application Dropbox de screenRIG et aucun config.app_key ; kind dropbox seulement), google_drive_not_configured (aucun compte de service de screenRIG et aucune clé ; kind google_drive seulement), resource_conflict ou idempotency_mismatch.

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)
GET/api/projects/{project_id}/media-syncs

Lister les synchronisations de médias dans le projet

Lists the project's media syncs, newest first (200 per page; next_cursor continues), optionally of one account_id or state. Each shows its source folder, the media folder it fills, its cadence, state, next run and the summary of its last run.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
curseurrequêteoptionnelLe next_cursor de la page précédente.
account_idrequêteoptionnelNe liste que les synchronisations qui lisent via ce compte.
étatrequêteoptionnelNe liste que les synchronisations dans cet état.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-syncs'

Réponses

StatutSensCorps et en-têtes
200Les synchronisations du projet.MediaSyncList (application/json); en-têtes : Cache-Control
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/projects/{project_id}/media-syncs

Créer une synchronisation de médias dans le projet

provider canva : lit le design (design est son id ou son adresse canva.com/design/ID/...) via un compte Canva connecté, et enregistre la synchronisation, à exécuter maintenant.

Each run asks Canva for the design's last change and, when it moved, exports the pages (pages, default all; format png gives one image per page and mp4 one video) and imports them into the media folder, replacing the bytes of a page already imported under the same media id so the playlists that use it update; a page the design no longer has leaves play like a removed SharePoint file.

Un design que Canva ne montre plus arrête la synchronisation à l’état error (erreur d’exécution design_unavailable) et conserve les médias.

Un design ou une page que le compte ne peut pas voir est 409 media_sync_source_refused. provider dropbox : url est l’adresse du dossier dans Dropbox (https://www.dropbox.com/home/...), un lien de dossier partagé que le compte connecté a ajouté à son Dropbox, ou un chemin commençant par / ; elle est lue une fois par un compte Dropbox connecté et la synchronisation est stockée, à exécuter maintenant.

Les dossiers d’un espace d’équipe sont lus à partir de la racine de l’équipe. Chaque exécution reprend à la position que Dropbox a enregistrée dans le dossier ; seuls les changements sont donc lus.

Un dossier que le compte ne peut pas ouvrir est 409 media_sync_source_refused ; un compte dont Dropbox n’honore plus la connexion est 409 dropbox_reconnect_required. provider google_drive : url est l’adresse Google Drive du dossier (https://drive.google.com/drive/folders/ID) ou son ID, le dossier étant partagé (le rôle Lecteur suffit) avec le service_account_email du compte.

Chaque exécution liste le dossier et compare la somme de contrôle de chaque fichier. Les fichiers Google Docs, Sheets et Slides sont ignorés comme unsupported_type. Un dossier que l’adresse ne permet pas d’ouvrir est 409 media_sync_source_refused.

Lorsqu’il est lu par le compte de service de screenRIG, le dossier doit être partagé par un membre du projet dont le courriel est vérifié, ou lui appartenir (403 media_sync_sharer_not_member), et chaque exécution le revérifie (l’erreur d’exécution sharer_not_member arrête la synchronisation à l’état error). provider sharepoint : lit l’adresse du dossier par le compte (une adresse de site SharePoint comme https://TENANT.sharepoint.com/sites/SITE/LIBRARY/FOLDER, ou un lien de partage ; l’application doit pouvoir y accéder : Sites.Selected exige une autorisation sur le site, un lien de partage exige Files.Read.All) et stocke la synchronisation, à exécuter maintenant. folder_id est le dossier de médias où aboutissent les fichiers ; sans lui, la synchronisation en crée un nommé d’après le dossier source.

Each run imports the images (png, jpeg, webp, gif), videos (mp4, webm) and audio (mp3) directly in the source folder, replaces the bytes of a file that changed under the same media id so playlists that use it update, and takes a file removed at the source out of play: its media is deleted, or, while screens still hold it, moved to a Removed subfolder and deleted later.

Subfolders are ignored; other files are listed as skipped with the reason. every is the seconds between runs, 300 to 86400, default 900. A folder the provider refuses is 409 media_sync_source_refused and one it cannot reach is 500 media_sync_source_unavailable; nothing is stored. Appends media_sync.created.

Authentification
projectBearer
Corps de la requête
MediaSyncWrite
ID d’opération
createMediaSyncInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
provider (obligatoire, chaîne)Autorisés : « sharepoint », « canva », « dropbox », « google_drive »
account_id (obligatoire, chaîne)Un compte du type du fournisseur : microsoft365 pour sharepoint, canva, dropbox ou google_drive.
url (optionnelle, chaîne)

sharepoint (obligatoire) : l’adresse SharePoint du dossier ou un lien de partage, lue une fois pour trouver le dossier et non stockée. dropbox (obligatoire) : l’adresse Dropbox du dossier, un lien de dossier partagé que le compte a ajouté, ou un chemin commençant par /. google_drive (obligatoire) : l’adresse Google Drive du dossier ou son ID. maxLength: 4096

design (facultatif, chaîne)canva (obligatoire) : l’identifiant du design, ou son adresse canva.com/design/ID/... maxLength: 2048
pages (optionnel, tableau)canva : les pages à synchroniser ; omettez-le pour toutes les pages. Un design qui compte ensuite moins de pages retire du jeu les pages manquantes.
format (facultatif, chaîne)canva : png donne une image par page ; mp4 une vidéo des pages. Allowed: "png", "mp4" default: "png"
folder_id (facultatif, chaîne)Le dossier de médias où arrivent les fichiers. Omettez-le pour en créer un du nom du dossier source.
every (facultatif, entier)Secondes entre les exécutions ; 900 par défaut. minimum: 300 maximum: 86400
nom (optionnel, chaîne)Par défaut, le nom du dossier source. minLength: 1 maxLength: 80
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/media-syncs'

Réponses

StatutSensCorps et en-têtes
201Créée, à exécuter maintenant.MediaSync (application/json); en-têtes : ETag, Cache-Control
400invalid_request.Problème (application/problem+json)
402feature_not_in_plan — le forfait du projet n’inclut pas la synchronisation de médias ; required_plan nomme le forfait qui l’inclut.Problème (application/problem+json)
403media_sync_sharer_not_member : un dossier Google Drive lu par le compte de service de screenRIG n’a pas été partagé par un membre du projet dont le courriel est vérifié et ne lui appartient pas.Problème (application/problem+json)
409

media_sync_source_refused (le fournisseur a refusé l’application, sa permission ou le dossier), dropbox_reconnect_required (le compte Dropbox doit être reconnecté), dropbox_not_configured, google_drive_not_configured, resource_conflict (la même source est déjà synchronisée dans ce dossier de médias) ou idempotency_mismatch.

Problème (application/problem+json)
500media_sync_source_unavailable : le fournisseur est inaccessible ou a répondu par un échec.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)
GET/api/projects/{project_id}/fleet-links

Lister les liens de flotte dans le projet

Liste les liens de flotte du projet, du plus ancien au plus récent (au maximum 50). Sous Gérer effectif, chaque URL est vide et url_redacted est vrai, puisque l’URL crée des écrans.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/fleet-links'

Réponses

StatutSensCorps et en-têtes
200Les liens de flotte du projet.FleetLinkList (application/json) ; en-têtes : Cache-Control
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/projects/{project_id}/fleet-links

Créer un lien de flotte dans le projet

Crée un lien flotte : une URL Lecteur (https://play.<domain>/player/#fleet=<secret>) qui transforme chaque appareil l’ouvrant en son propre écran dans ce projet, sans code de jumelage. Mettez-le dans un gestionnaire d’appareils, comme une app kiosque de la console Google Admin.

Chaque nouvel écran reçoit les étiquettes, les champs et la liste de lecture du lien, ainsi qu’une étiquette provenant de l’appareil (son identifiant d’actif administrateur, puis l’emplacement), sinon la prochaine étiquette par défaut. Un lecteur qui détient déjà un écran n’en crée jamais un autre : sa clé conserve l’identité de l’écran lors des rechargements et des relances.

Après une réinitialisation complète ou une réinstallation, un appareil qui rapporte le numéro de série ou le DUID d’un écran lié à une flotte créée par ce projet récupère cet écran (screen.recovered) au lieu d’en créer un nouveau, une fois que l’ancienne clé est silencieuse depuis dix minutes.

Le secret voyage dans le fragment d’URL, que les navigateurs n’envoient jamais au serveur. max_screens plafonne les écrans que le lien crée et expires_at met fin au lien à ce moment-là, comme le fait sa désactivation. Une organisation compte au plus 50 liens de flotte, tous projets confondus (fleet_link_limit_reached). Ajoute fleet_link.created.

Une nouvelle tentative exacte avec la même Idempotency-Key retourne cette même réponse pendant vingt-quatre heures.

Authentification
projectBearer
Corps de la requête
FleetLinkWrite
ID d’opération
createFleetLinkInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
étiquette (obligatoire, chaîne)minLength : 1 maxLength : 80
activé (optionnel, booléen)Par défaut à vrai.
étiquettes (optionnelles, ScreenTags)

Étiquettes de sélection de flotte, de 0 à 16 étiquettes exactes uniques, chacune correspondant à la grammaire des étiquettes médias. Sur ScreenPatch, le tableau remplace l’ensemble complet et un tableau vide le vide ; une étiquette en double ou mal formée est invalid_request. Modifier les étiquettes augmente la révision de l’écran (If-Match la protège) et ajoute screen.updated avec details.tags ; cela ne modifie jamais la révision du manifeste.

Les étiquettes ne figurent jamais dans le manifeste d’exécution ni dans l’autorisation.

fields (optionnel, objet)Champs avec lesquels commence chaque écran que crée le lien ; les placements de cartes les lisent par {screen.field.NAME}.
playlist_id (optionnel, chaîne)
max_screens (optionnel, entier)minimum : 1 maximum : 10 000
expires_at (optionnel, chaîne)Date d'expiration du lien (RFC 3339); un lien dont l'échéance est dépassée ne crée ni ne récupère d'écran. L'absence de valeur signifie qu'il n'expire jamais. Une date déjà passée est acceptée et fait expirer le lien aussitôt. format: "date-time"
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/fleet-links'

Réponses

StatutSensCorps et en-têtes
201Créé, avec son URL.FleetLink (application/json) ; en-têtes : Cache-Control
400invalid_request, incluant un playlist_id inconnu ou une étiquette ou un champ mal formé.Problème (application/problem+json)
409fleet_link_limit_reached ou idempotency_mismatch.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)
GET/api/projects/{project_id}/webhooks

Lister les webhooks dans le projet

Liste les notifications webhook du projet au format webhook, de la plus ancienne à la plus récente (50 au plus); GET /api/notifications liste tous les canaux. Le secret de signature n’est jamais renvoyé ici. Exige la capacité project; un justificatif d’identité limité aux rapports est refusé avec 403 forbidden, car la réponse comprend les URL des récepteurs.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/webhooks'

Réponses

StatutSensCorps et en-têtes
200Les webhooks du projet.WebhookList (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/projects/{project_id}/webhooks

Créer un webhook dans le projet

Crée un webhook qui reçoit les événements durables du projet sous forme de POST HTTPS signés. L’URL doit être https sur un hôte Internet public : une adresse IP littérale ou chaque réponse DNS actuelle du nom doit être publique (privé, loopback, link-local, CGNAT, IPv6 hors 2000::/3, documentation et autres plages réservées sont refusées avec webhook_url_rejected).

Le port doit être 443 (par défaut) ou 8443, sinon webhook_url_rejected. L’hôte est résolu et vérifié à nouveau avant chaque livraison et la connexion est établie à l’adresse vérifiée exacte, donc une réponse DNS qui change plus tard ne peut pas rediriger les livraisons. event_types liste les types d’événements exacts (screen.online) ou les préfixes finissant par .* (screen.*).

Une organisation compte au plus 50 notifications, tous canaux confondus (webhook_limit_reached). Le serveur génère le secret de signature et ne le renvoie que dans cette réponse et dans rotate-secret; conservez-le. Une nouvelle tentative identique avec la même Idempotency-Key renvoie cette même réponse, secret compris, pendant vingt-quatre heures.

La livraison commence avec le premier événement après notification.created.

Authentification
projectBearer
Corps de la requête
Écriture webhook
ID d’opération
createWebhookInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
url (obligatoire, chaîne)URL https sur un hôte Internet public, port 443 (par défaut) ou 8443. Pas d’informations utilisateur ni de fragment. maxLength : 2048 format : « uri »
event_types (obligatoire, WebhookEventTypes)

Types d'événements exacts comme screen.online, ou préfixes se terminant par .* comme screen.* (tous les types commençant par screen.). notification.test n'est jamais diffusé par un abonnement; il n'est envoyé que par POST /api/webhooks/{id}/test.

activé (optionnel, booléen)vrai
description (optionnelle, chaîne)maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/webhooks'

Réponses

StatutSensCorps et en-têtes
201Créé. Le secret n’est affiché qu’ici et lors de la rotation du secret.WebhookWithSecret (application/json) ; en-têtes : Cache-Control
400invalid_request ou webhook_url_rejected.Problème (application/problem+json)
409webhook_limit_reached, idempotency_mismatch ou resource_conflict lorsque le projet n’appartient à aucune organisation.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)
GET/api/projects/{project_id}/alerts

Lister les alertes dans le projet

Liste les alertes d’écran du projet : une par écran et par condition tant qu’elle dure (open), et celles qui ont pris fin pendant la rétention d’événements du forfait (resolved).

Une alerte s’ouvre lorsque l’événement de sa condition arrive (screen.offline, un changement d’état de santé display_disconnected, temperature_high ou on_battery, screen.storage_shortfall, un screen.manifest_upgrade bloqué, un screen.status_changed de niveau erreur, un screen.glass_changed dont le verdict est bloqué, vide ou figé) et se résout à l’événement qui met fin à sa condition ; crashing est un avis, pas une alerte. counts.attention compte les alertes ouvertes qui ne sont ni acquittées, ni reportées, ni en sourdine, le nombre que le tableau de bord affiche.

Un écran qui redémarre à cause d’un redémarrage envoyé par le backend n’ouvre aucune alerte screen_offline ou display_disconnected avant la fin du redémarrage ou dix minutes après son envoi ; une condition qui tient toujours à ce moment ouvre alors son alerte. Les alertes ouvertes viennent d’abord, les plus récentes en premier ; renvoyez next_cursor comme avant pour la page suivante.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
formatrequêteoptionneljson (par défaut) renvoie le rapport en JSON. csv, xlsx et pdf renvoient les mêmes lignes en pièce jointe (chaque page d'un rapport paginé, jusqu'à 50000 lignes).
étatrequêteoptionnel
screen_idrequêteoptionnel
avantrequêteoptionnelnext_cursor de la page précédente.
limiterequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/alerts'

Réponses

StatutSensCorps et en-têtes
200Une page d’alertes.AlertList (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)
GET/api/projects/{project_id}/alert-mutes

Lister les mises en sourdine d’alertes dans le projet

Liste les mises en sourdine du projet qui ne sont pas terminées, celles qui finissent le plus tôt d’abord (au plus 50).

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/alert-mutes'

Réponses

StatutSensCorps et en-têtes
200Les mises en sourdine en cours du projet.AlertMuteList (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/projects/{project_id}/alert-mutes

Créer une mise en sourdine d’alertes dans le projet

Met des écrans en sourdine pour la maintenance jusqu’à un instant au plus 30 jours plus tard : les écrans nommés par screen_ids, et chaque écran portant l’une des étiquettes de tags au moment où un avis est dû. Leurs alertes continuent de s’ouvrir et de se résoudre, marquées muted, mais ne demandent jamais d’attention; les avis de chaque notification à leur sujet sont ignorés (muted).

Une organisation compte au plus 50 mises en sourdine en cours, tous projets confondus (alert_mute_limit_reached). Ajoute alert_mute.created.

Authentification
projectBearer
Corps de la requête
AlertMuteWrite
ID d’opération
createAlertMuteInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
screen_ids (optionnel, array)
étiquettes (optionnelles, ScreenTags)

Étiquettes de sélection de flotte, de 0 à 16 étiquettes exactes uniques, chacune correspondant à la grammaire des étiquettes médias. Sur ScreenPatch, le tableau remplace l’ensemble complet et un tableau vide le vide ; une étiquette en double ou mal formée est invalid_request. Modifier les étiquettes augmente la révision de l’écran (If-Match la protège) et ajoute screen.updated avec details.tags ; cela ne modifie jamais la révision du manifeste.

Les étiquettes ne figurent jamais dans le manifeste d’exécution ni dans l’autorisation.

until (obligatoire, string)Au plus 30 jours plus tard. format: "date-time"
note (facultatif, string)maxLength : 200
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/alert-mutes'

Réponses

StatutSensCorps et en-têtes
201Créé.AlertMute (application/json)
409alert_mute_limit_reached ou idempotency_mismatch.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)
GET/api/projects/{project_id}/notifications

Lister les notifications d'un projet

Liste les notifications de l’organisation qui couvrent le projet, de tous les canaux, de la plus ancienne à la plus récente (50 au plus). status, failing_since, last_success_at et last_failure_at sont ceux de ce projet. Le secret de signature d’un webhook n’est jamais renvoyé ici.

Exige la capacité project; un justificatif d’identité limité aux rapports est refusé avec 403 forbidden, car la réponse comprend les URL des récepteurs et les destinataires.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/notifications'

Réponses

StatutSensCorps et en-têtes
200Les notifications du projet.NotificationList (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/projects/{project_id}/notifications

Créer une notification dans un projet

Crée une notification. channel email envoie à recipients (propriétaire, ou user_ids des membres du projet) ; channel webhook fait un POST, signé, vers url, qui suit les règles d’URL de webhook (https sur un hôte public d’Internet, port 443 ou 8443, sinon webhook_url_rejected). conditions liste les changements d’état d’écran qui la déclenchent ; une notification par courriel en exige au moins un, un webhook exige conditions ou event_types. screen_tags limite conditions aux écrans portant l’une de ces étiquettes ; vide signifie tous les écrans, ou audience indique quels écrans selon les règles d’une audience de campagne. min_severity et severity filtrent et classent les avis, et active_hours met en attente ou abandonne les avis en dehors de ses fenêtres.

Une condition ne notifie qu’après avoir duré hold_minutes (10 par défaut), et un avis de résolution suit lorsqu’elle disparaît après l’envoi d’un avis. La notification couvre ce projet seul; une organisation compte au plus 50 notifications, sans compter celles que le système crée par défaut (notification_limit_reached).

Le secret de signature d’un webhook est généré par le serveur et renvoyé uniquement dans cette réponse et dans rotate-secret; conservez-le. Une nouvelle tentative identique avec la même Idempotency-Key renvoie cette même réponse, secret compris, pendant vingt-quatre heures. Les avis commencent avec le premier événement après notification.created.

Authentification
projectBearer
Corps de la requête
NotificationWrite
ID d’opération
createNotificationInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
channel (obligatoire, string)Autorisés : « email », « webhook », « slack », « teams », « pagerduty », « telegram »
description (optionnelle, chaîne)Un nom destiné aux personnes. maxLength: 200
conditions (facultatif, NotificationConditions)
screen_tags (facultatif, ScreenTags)

Étiquettes de sélection de flotte, de 0 à 16 étiquettes exactes uniques, chacune correspondant à la grammaire des étiquettes médias. Sur ScreenPatch, le tableau remplace l’ensemble complet et un tableau vide le vide ; une étiquette en double ou mal formée est invalid_request. Modifier les étiquettes augmente la révision de l’écran (If-Match la protège) et ajoute screen.updated avec details.tags ; cela ne modifie jamais la révision du manifeste.

Les étiquettes ne figurent jamais dans le manifeste d’exécution ni dans l’autorisation.

audience (optionnel, CampaignAudience)

Les écrans qu’une campagne cible : exactement un parmi all (chaque règle correspond), any (au moins une correspond), tag (l’écran porte l’étiquette), screen_id (cet écran) ou folder (les écrans de ce dossier d’écrans et de chaque dossier à l’intérieur, GET /api/screen-folders ; le dossier doit exister).

Les règles s’imbriquent sur 3 niveaux au plus et une audience a au plus 500 règles. {"all": []} correspond à chaque écran du projet ; ailleurs, all et any listent au moins une règle.

min_severity (facultatif, NotificationSeverity)

La gravité d’un avis, de la moins grave à la plus grave. Un avis ouvert a la gravité de sa condition : error pour screen_offline et warning pour toute autre condition, sauf si la gravité de la notification en décide autrement. Un avis résolu et un test sont info. Autorisés : « info », « warning », « error »

severity (facultatif, NotificationSeverityOverrides)

Condition vers gravité pour cette notification, comme {"not_playing": "error"}. Elle compte pour min_severity et est la gravité que Teams et PagerDuty affichent pour la condition. Une condition non listée garde sa valeur par défaut. Lors d’un patch, un objet vide, comme null, efface chaque substitution.

active_hours (facultatif, NotificationActiveHours)

Quand les avis ouverts partent : les fenêtres (screenrig.schedule/v1), lues dans timezone. Un avis qui arrive à échéance pendant qu’elles sont fermées attend la prochaine ouverture (outside hold, la valeur par défaut) et part alors si sa condition tient toujours, de sorte qu’une condition qui disparaît d’abord n’envoie rien, ou est ignoré (outside drop ; last_error outside_hours).

Un avis résolu pour un avis ouvert qui a été envoyé part toujours, dans les heures ou non, et un test les ignore. crashing est mis en attente ou abandonné comme n’importe quelle autre condition. Les heures jugent un avis lorsqu’il part pour la première fois ; un avis en échec est retenté selon le calendrier habituel, quelles que soient les heures.

Ajouter, modifier ou retirer les heures fait juger de nouveau aussitôt les avis mis en attente pour les anciennes.

reach_drop (facultatif, NotificationReachDrop)

La plus petite baisse de la portée d’une campagne pour laquelle un avis reach_dropped est envoyé : screens est le moins d’écrans perdus (1 par défaut) et percent, s’il est défini, la plus petite part des écrans que la campagne atteignait lors de sa publication ; une baisse doit remplir les deux seuils.

Une baisse plus petite ne met aucun avis en file, et un avis en file dont la baisse est passée sous le seuil à l’échéance est ignoré (condition_cleared). Seulement avec la condition reach_dropped ; sur une notification sans elle, invalid_request.

hold_minutes (facultatif, integer)Durée pendant laquelle une condition doit persister avant de notifier. La condition crashing n'est jamais mise en attente. default: 10 minimum: 0 maximum: 1440
recipients (facultatif, NotificationRecipients)

Courriel seulement. owner (la personne propriétaire du projet au moment de l'envoi d'un avis) ou le user_id d'une personne membre du projet; un user_id qui n'est pas celui d'un membre entraîne invalid_request. Chacun reçoit un courriel à son adresse courriel vérifiée. Une personne qui a depuis quitté le projet ou qui n'a aucune adresse courriel vérifiée est ignorée.

url (optionnelle, chaîne)Webhook seulement : URL https sur un hôte Internet public, port 443 (par défaut) ou 8443. Ni userinfo ni fragment. maxLength: 2048 format: "uri"
event_types (facultatif, NotificationEventTypes)

Webhook seulement. Événements du projet également envoyés par POST dès qu'ils se produisent, exactement comme un webhook les envoie : types exacts comme screen.online, ou préfixes se terminant par .* comme screen.*. notification.test n'est jamais diffusé.

destination (facultatif, NotificationDestination)

Slack, Teams, PagerDuty et Telegram seulement ; obligatoire pour eux. L’identifiant sous la forme où le service l’émet : slack, l’URL du webhook entrant (hooks.slack.com) ; teams, l’URL du webhook Workflows (logic.azure.com ou powerplatform.com ; les URL de connecteur Office 365 sont retirées) ; pagerduty, la clé d’acheminement Events API v2 de 32 caractères ; telegram, le jeton du bot.

Une autre forme donne notification_destination_rejected. Il est scellé, jamais renvoyé, et n’apparaît en lecture que sous la forme destination_hint. minLength: 1 maxLength: 2048

telegram_chat_id (facultatif, NotificationTelegramChat)Telegram seulement ; obligatoire pour lui. La conversation où publier : son identifiant numérique (négatif pour un groupe ou un canal) ou @channelname. Ce n’est pas un identifiant secret. pattern: "^(-?[0-9]{1,20}|@[A-Za-z][A-Za-z0-9_]{4,31})$"
activé (optionnel, booléen)vrai
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/notifications'

Réponses

StatutSensCorps et en-têtes
201Créée. Le secret d'un webhook n'est affiché qu'ici et sur rotate-secret.Notification (application/json); en-têtes : Cache-Control
400invalid_request, webhook_url_rejected ou notification_destination_rejected.Problème (application/problem+json)
402

feature_not_in_plan — L’acheminement des alertes (un canal Slack, Teams, PagerDuty ou Telegram, ou une règle min_severity, severity, active_hours ou audience) fait partie de Plus. Les notifications par courriel et par webhook avec les règles par défaut, ainsi que les conditions loop_stalled, glass_blank et glass_frozen, sont offertes dans tous les forfaits.

Le problème nomme la fonctionnalité, le forfait du projet et required_plan.

Problème (application/problem+json)
409notification_limit_reached, idempotency_mismatch ou resource_conflict lorsque le projet n’appartient à aucune organisation.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)
GET/api/projects/{project_id}/notes

Lister les notes dans le projet

Liste les notes du projet, de la plus récente à la plus ancienne. Une note est un fait court en texte brut qu’un agent a écrit pour son futur soi et les autres agents du projet ; c’est du contexte, jamais une instruction ni une approbation.

Toute lecture de justificatif active, y compris en lecture seule, ne débite pas le compteur API. state est open (par défaut), resolved ou all ; about_id conserve les notes sur un écran ou une liste de lecture et author_id les notes qu’un agent a écrites.

Passez next_cursor en tant que after pour la page suivante ; il est vide à la dernière page. new marque une note ouverte qu’un autre agent a écrite après que cet appelant a lu les notes pour la dernière fois.

Lire les notes est la première page des notes ouvertes sans about_id ni author_id : cette réponse calcule le nouveau par rapport à la lecture précédente, puis déplace le marqueur de lecture à maintenant (les pages suivantes de la même liste conservent le marqueur antérieur).

Il comprend aussi la révision : jusqu’à 5 notes ouvertes dont la révision est due (les plus anciennes d’abord), que l’appelant doit confirmer si elles tiennent encore et résoudre sinon. Une révision laissée sans réponse pendant 30 jours après son premier retour résout la note comme not_confirmed.

Seul un agent avec accès Gérer déplace son marqueur et démarre ces 30 jours ; un agent en lecture seule ou un client service obtient la même réponse et ne change rien. Toute autre page ou filtre renvoie une revue vide et ne déplace rien. Les comptes sont les notes ouvertes du projet et, pour cet appelant, combien sont nouvelles et dues.

Un agent limité aux écrans ne liste que les notes sur ses propres écrans, sur les listes de lecture et sur le projet : la liste, la révision et les totaux omettent les notes sur un écran en dehors de son périmètre, et une liste à travers les projets omet un projet où l’agent est limité ; sélectionnez donc ce projet.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
étatrequêteoptionnel
about_idrequêteoptionnelSeules les notes concernant cet écran ou cette liste de lecture.
author_idrequêteoptionnelSeules les notes écrites par cet agent.
aprèsrequêteoptionnelnext_cursor de la page précédente.
limiterequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/notes'

Réponses

StatutSensCorps et en-têtes
200Une page de notes, les notes à réviser et les comptes.NoteList (application/json)
400

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)
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/projects/{project_id}/notes

Ajouter une note au projet

Ajoute une note pour les agents du projet : un fait sur lequel un autre agent agirait, jamais un rapport d’avancement, un clavardage ou un secret. Le corps fait de 1 à 2000 caractères de texte brut après suppression des espaces et peut s’étendre sur plusieurs lignes.

Le texte contenant une information d’identification (jetons, clés, clés privées, mots de passe dans les URL) est refusé avec note_contains_credential et le texte qui ressemble à une instruction à un modèle avec note_rejected ; rien n’est stocké et le détail ne répète jamais le texte. concernant les noms un écran (archivé inclus) ou une playlist du projet, sinon not_found. ttl_seconds (3600 à 31536000) crée une note temporaire qui se résout comme expirée ; une note sans cela est soumise à révision 90 jours après son ajout ou sa dernière confirmation. remplace les noms d’une note ouverte que celle-ci remplace : elle est résolue comme remplacée dans la même transaction (note_not_open quand elle est déjà résolue).

Un corps dont le texte normalisé (rogné, espaces réduits, minuscules) et le champ about correspondent à une note ouverte confirme cette note et la renvoie avec 200 au lieu d’en ajouter une; aucun événement note.added n’est ajouté. Une organisation contient au plus 200 notes ouvertes, tous projets confondus; la 201e est note_limit_reached, dont le détail nomme jusqu’à 5 notes à résoudre d’abord.

Ajoute note.added (et note.resolved pour une note remplacée) sans le texte. Une nouvelle tentative exacte avec la même Idempotency-Key renvoie la première réponse pendant vingt-quatre heures.

Pour un agent limité aux écrans (docs/screen-scope.md), un about qui est un écran en dehors de son périmètre ou inconnu du projet, ou un replaces qui nomme une note sur un écran en dehors de son périmètre, donne outside_screen_scope (403) et rien n’est stocké.

Authentification
projectBearer
Corps de la requête
NoteWrite
ID d’opération
addNoteInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
corps (obligatoire, chaîne)Texte brut, 1 à 2000 caractères après suppression des espaces ; les sauts de ligne sont conservés. minLength : 1 maxLength : 2000
à propos (facultatif, en ligne)
ttl_seconds (optionnel, entier)Expire la note aussi longtemps après son ajout. Sans cela, la note est revue après 90 jours. minimum : 3600 maximum : 31536000
remplace (optionnel, chaîne)Une note ouverte que celle-ci remplace ; elle est résolue comme remplacée. motif : "^(?:(?:stage|qa|development)_)?nte_[A-Za-z0-9_-]{16,24}$"
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/notes'

Réponses

StatutSensCorps et en-têtes
201Ajouté.Note (application/json)
200Le texte correspondait à une note ouverte, qui est confirmée et renvoyée.Note (application/json)
400

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)
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)
404

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)
409note_not_open, note_limit_reached ou idempotency_mismatch.Problème (application/problem+json)
422note_contains_credential ou note_rejected.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)
GET/api/projects/{project_id}/support/status

État de l’assistance dans le projet

Disponibilité et heures pour tout projet actif. chat_allowed est vrai pour chaque projet actif, y compris Standard. human_available est vrai lorsqu’une personne peut se joindre au clavardage sur demande (Education, Premium et Enterprise) ; Standard et Plus ont la documentation et l’assistance par IA. staffed indique si le personnel est dans ses heures en ce moment. Luna répond tout de suite sur tous les forfaits.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/support/status'

Réponses

StatutSensCorps et en-têtes
200Résultat d’assistance.SupportStatus (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)
GET/api/projects/{project_id}/support/conversations

Lister les conversations de soutien dans le projet

Conversations du projet, les plus récentes en premier, au maximum 100. Les comptes de non-lus du personnel sont par personne ou agent authentifié.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
avantrequêteoptionnelID de conversation du curseur suivant de la page précédente.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/support/conversations'

Réponses

StatutSensCorps et en-têtes
200Résultat d’assistance.SupportConversationList (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/projects/{project_id}/support/conversations

Créer une conversation d’assistance dans le projet

Disponible sur tous les forfaits ; Luna répond en premier, tout de suite. Là où une personne peut se joindre (human_available dans l’état du soutien), une demande en ce sens met Luna en pause pour le personnel ; sur Standard et Plus, elle est ignorée et Luna répond. Contrôlé avant stockage ou Slack.

Un message d’ouverture de moins de 8 caractères ou 3 mots retourne submission_too_short ; un message qui n’est pas une question ou un problème retourne submission_unclear ; spam, texte avec trop de liens, injection de prompt et texte non sécurisé retournent submission_rejected. Le texte rejeté n’est ni conservé ni envoyé à Luna, et le détail du problème ne le répète jamais.

Le texte en forme d’identifiants autre que les identifiants ScreenRig (jetons porteurs, clés cloud et API, clés privées) est remplacé par [caviardé] avant stockage ; le matériel d’identifiants ScreenRig renvoie invalid_request. Une nouvelle conversation démarre un fil Slack ; les suivis restent dans ce fil. Les requêtes avec la même clé rejouent pendant 24 heures, refus inclus.

Authentification
projectBearer
Corps de la requête
SupportWrite
ID d’opération
createSupportConversationInProject

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
Idempotency-Keyen-têteobligatoire

Champs du corps de la requête

ChampDescription
corps (obligatoire, chaîne)minLength : 1 maxLength : 4000
human_requested (optionnel, booléen)

Demander une personne, ce qui met Luna en pause et attend le personnel. Ne compte que là où une personne peut se joindre (human_available : Education, Premium et Enterprise) ; sur Standard et Plus, elle est ignorée et Luna répond. défaut : false

Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/support/conversations'

Réponses

StatutSensCorps et en-têtes
201Résultat d’assistance.SupportSubmission (application/json)
422Le message a été refusé par filtrage : submission_too_short ou submission_unclear (seulement le message d’ouverture) ou submission_rejected. Le détail ne répète jamais le texte.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)
GET/api/projects/{project_id}/reviews

Lister les avis dans le projet

Les révisions du projet (docs/reviews.md) : changements de liste de lecture et d’écran proposés sous accès Proposition, et pour un réseau publicitaire les créations publicitaires soumises par les acheteurs (type ad_creative).

Les plus récents d’abord, au maximum limit (par défaut 50, au maximum 100) par page ; renvoyer next_cursor comme curseur avec les mêmes filtres. state pending (par défaut), decided (tout autre état) ou all ; kind restreint à un type.

Une session de tableau de bord lit chaque type ; un porteur lit les types couverts par ses capacités (listes de lecture pour playlist_change, écrans pour screen_change, publicité pour ad_creative), et un type qu’il ne peut pas lire est une page vide. pending_count compte les révisions en attente de chaque type que l’appelant voit.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
étatrequêteoptionnel
typerequêteoptionnel
limiterequêteoptionnel
curseurrequêteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/reviews'

Réponses

StatutSensCorps et en-têtes
200Une page d’avis.ReviewList (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)
GET/api/projects/{project_id}/card-data/{key}

Projet Scoped_get Card Data

Retourne le document et sa révision. L’ETag est la révision, pour If-Match à la prochaine écriture.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
clécheminobligatoireClé de données de carte. Ne peut pas commencer par feed:.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/card-data/KEY'

Réponses

StatutSensCorps et en-têtes
200Document de données de carteCardDataEntry (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)
PUT/api/projects/{project_id}/card-data/{key}

Projet Scoped_put Card Data

Crée ou remplace un document de données de carte. Lorsque les placements de cartes dans les listes de lecture du projet lient la clé, le document doit contenir uniquement les propriétés dynamiques de chaque carte liée et valider contre elles ; sinon l’écriture est refusée avec card_data_invalid nommant la carte et le chemin de la propriété, et rien ne change. Une clé sans placement lié accepte tout objet JSON.

Chaque chaîne qui commence par media: est une référence média, media:<id>, pour qu’une carte l’affiche (une photo) ; sur toute clé elle doit nommer une image prête, approuvée dans ce projet, au plus 256 médias distincts par document, sinon l’écriture est refusée avec card_media_invalid nommant le chemin de propriété et media_id.

Les écrans dont le contenu lit la clé peuvent ensuite récupérer ces médias via GET /media/{media_id}. Les écrans affichant un emplacement qui lit la clé reçoivent screen.card_data_changed et le récupèrent à nouveau sur place ; le journal du projet enregistre kv.updated avec une ressource card_data_entry, qui n’atteint jamais un Player.

Les limites, quotas, mesures, révisions et idempotence sont ceux du magasin K/V de l’application.

Les écritures des agents et des webhooks sont aussi limitées en fréquence, par organisation selon le forfait (Standard et Plus 60 par minute, Education et Premium 600, Enterprise 3 000) et à 60 par minute par clé sur tous les forfaits ; une écriture au-delà d’une limite est refusée avec rate_limited et Retry-After, et n’est pas mesurée.

Authentification
projectBearer
Corps de la requête
CardDataWrite
ID d’opération
projectScoped_putCardData

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
clécheminobligatoireClé de données de carte. Ne peut pas commencer par feed:.
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour créer ou écraser une clé ; une révision périmée fournie est revision_conflict.
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.

Champs du corps de la requête

ChampDescription
document (requis, objet)

Le document de données de la carte : un objet JSON d’au plus 1 Mio. Lorsqu’un emplacement de carte lie la clé, il ne détient que les propriétés dynamiques de cette carte. Une chaîne commençant par media: est une référence média, media:<id>, nommant une image prête et approuvée dans ce projet.

expires_at (optionnel, chaîne)Expiration absolue ; les données omises n’expirent jamais. format : « date-time »
ttl_seconds (optionnel, entier)

Durée de vie à partir de la première écriture validée. Mutuellement exclusif avec expires_at. Une nouvelle tentative conserve l’expiration d’origine. Omettre les deux supprime l’expiration.

Dimensionnez-la selon le calendrier de celui qui écrit : quand le document d’une carte expire sans écriture pour le renouveler pendant qu’un écran affiche la carte, la carte devient vide et la condition de notification card_data_stale en informe le projet : une tâche arrêtée est donc remarquée. minimum: 1 maximum: 31536000

Modèle de requête et réponses
shell · modèle de requête
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/card-data/KEY'

Réponses

StatutSensCorps et en-têtes
200Document de données de carteCardDataEntry (application/json)
429

Problème stable rate_limited. Réessayez seulement après l’intervalle Retry-After autoritaire. Les refus à fenêtre fixe incluent aussi la politique RateLimit-Policy applicable et les membres RateLimit ; les refus de concurrence et de budget d’octets omettent ces divulgations optionnelles.

Problème (application/problem+json) ; en-têtes : Retry-After, RateLimit-Policy, RateLimit
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)
SUPPRIMER/api/projects/{project_id}/card-data/{key}

Projet Scoped_delete Card Data

Supprime un document de données de carte. Une carte liée à la clé est cachée à l’écran jusqu’à ce qu’un document soit réécrit.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
clécheminobligatoireClé de données de carte. Ne peut pas commencer par feed:.
If-Matchen-têteoptionnelRévision positive optionnelle de ressource. Omettre pour écrire la ressource actuelle ; une révision périmée fournie est revision_conflict.
Idempotency-Keyen-têteoptionnelOmettre pour une opération fraîche. Fournissez et réutilisez une clé pour dédupliquer les tentatives ; le CLI gère les clés automatiquement.
Modèle de requête et réponses
shell · modèle de requête
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/card-data/KEY'

Réponses

StatutSensCorps et en-têtes
204Supprimépas de corps
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)
GET/api/projects/{project_id}/feeds/{family}

Projet Scoped_get Feed

Lit un document de flux tiers partagé : le même document qu’une carte intégrée avec les mêmes paramètres lit (docs/feeds.md).

Les paramètres de requête sont normalisés en la clé de flux de la carte, nommée par l’en-tête ScreenRig-Feed-Key : weather, airquality et alerts prennent lat et lon (arrondis à une cellule de 0,25 degré) ; earthquakes lat, lon, radius_km (10 à 20000, 500 par défaut), min_magnitude (0 à 9, 2,5 par défaut) et hours (1 à 168, 24 par défaut) ; cyclones basins (séparés par des virgules at, ep, cp, wp ; tous par défaut) et facultativement lat, lon et radius_km (les tempêtes près de ce lieu) ; tides station (un ID de station de prévision des marées de NOAA, comme 9414290) ou lat et lon (la station la plus proche dans un rayon de 100 km, sinon invalid_request) ; launches aucun paramètre (les prochains lancements dans le monde) ; rates base (une devise de référence de la BCE, EUR par défaut) ; crypto symbols (ID CoinGecko ou symboles, séparés par des virgules, 20 au plus) et currency (usd par défaut) ; headlines url (une URL RSS ou Atom http ou https) ; drugalerts (screenrig.drugalerts/v1) les rapports de rappel récents d’un pays : country (us, ca ou gb, requis) et category (drug, par défaut, ou food) ; respiratory (screenrig.respiratory/v1) l’activité hebdomadaire de la grippe, de la COVID-19 et du VRS d’un lieu : country (us ou gb, requis) et region (un État, un territoire ou DC des États-Unis par nom ou code postal, ou l’Angleterre ou une région de l’UKHSA ; le pays si vide).

La requête n’appelle jamais le fournisseur. 200 est le document (schéma, fetchedAt, attribution et les champs de la famille, comme le contrat des cartes les définit) ; son ETag est le sha256 des octets et If-None-Match répond 304 ; Cache-Control max-age court jusqu’à la prochaine récupération programmée. 202 signifie pas encore de document : la demande enregistrée en lecture, et le travailleur de flux récupère la clé en environ une minute (Retry-After).

Une lecture d’API conserve une clé récupérée pendant 24 heures. Une organisation enregistre au maximum 50 nouvelles clés par jour, tous projets confondus (rate_limited passé). Une famille sans source sur ce déploiement répond not_found.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
famillecheminobligatoireLa famille de flux.
latrequêteoptionnel
lonrequêteoptionnel
radius_kmrequêteoptionnel
min_magnituderequêteoptionneltremblements de terre : la magnitude la plus faible.
heuresrequêteoptionneltremblements de terre : la fenêtre en heures.
bassinsrequêteoptionnelcyclones : at, ep, cp, wp séparés par des virgules.
stationrequêteoptionneltides : un ID de station de prévision des marées de NOAA, comme 9414290. Sans lui, lat et lon choisissent la station la plus proche dans un rayon de 100 km.
baserequêteoptionnel
symbolesrequêteoptionnel
deviserequêteoptionnel
urlrequêteoptionnel
countryrequêteoptionneldrugalerts : us, ca ou gb. respiratory : us ou gb. Les deux l’exigent.
categoryrequêteoptionneldrugalerts : drug (par défaut) ou food.
regionrequêteoptionnelrespiratory : un État, un territoire ou DC des États-Unis par nom ou code postal, ou l’Angleterre ou une région de l’UKHSA ; le pays si vide.
If-None-Matchen-têteoptionnel
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/feeds/FAMILY'

Réponses

StatutSensCorps et en-têtes
200Document de fluxFeedDocument (application/json) ; en-têtes : ETag, ScreenRig-Feed-Key
202Pas encore de document ; le travailleur de flux récupérera la clé lors de son prochain passage.FeedPending (application/json) ; en-têtes : Retry-After, ScreenRig-Feed-Key
304Le document correspond à If-None-Match.pas de corps
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)
GET/api/projects/{project_id}/advertising/networks/{seller_project_id}/inventory

Projet Scoped_list Advertising Joined Inventory

Inventaire opté et plages réutilisables à l’intérieur de l’adhésion de l’appelant. Ne révèle jamais les captures d’écran, listes de lecture ou données à l’échelle du projet du vendeur.

Authentification
projectBearer OU dashboardSession
Corps de la requête
aucun
ID d’opération
projectScoped_listAdvertisingJoinedInventory

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
seller_project_idcheminobligatoire
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/projects/PROJECT_ID/advertising/networks/SELLER_PROJECT_ID/inventory'

Réponses

StatutSensCorps et en-têtes
200Inventaire et emplacements autorisés.AdvertisingJoinedInventory (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)
GET/api/projects/{project_id}/agents/self

Projet Scoped_get Current Agent

Retourne l’installation de l’agent liée au porteur du projet appelant plus connection_ready. Un projet est prêt lorsqu’au moins un membre a une passkey ou un mot de passe. Le statut d’identité est un diagnostic et ne débite pas le compteur API.

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

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.
Modèle de requête et réponses
shell · modèle de requête
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/projects/PROJECT_ID/agents/self'

Réponses

StatutSensCorps et en-têtes
200Préparation actuelle de la connexion de l’agent et du projet.AgentSelfStatus (application/json); en-têtes : Cache-Control
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/projects/{project_id}/agents/self/disconnect

Projet Scoped_disconnect Current Agent

Révoque uniquement l’adhésion du projet appelant et son jeton de projet, en préservant l’identité globale, les autres adhésions, le projet et le contenu. Répéter avec le même porteur révoqué cryptographiquement valide est une réussite sans effet. Déconnecter le dernier agent actif retourne agent_lockout_risk sauf si allow_last_agent est explicite. Ne débite pas le compteur API.

Un JWT d’accès agent, lecture seule incluse, déconnecte l’agent du projet de son jeton ; l’adhésion se termine, le consentement du projet quitte les concessions de l’agent et cette paire identité/projet est coupée pour les jetons d’accès plus anciens. Les autres projets dans le jeton continuent de fonctionner. Une nouvelle tentative avec le même JWT après déconnexion est un succès sans effet.

Authentification
revocableAgentBearer
Corps de la requête
AgentDisconnectRequest
ID d’opération
projectScoped_disconnectCurrentAgent

Paramètres

NomEnvoyerRequis ?Description
project_idcheminobligatoire
ScreenRig-Projecten-têteoptionnelObsolète pour une version. Doit être cohérent avec les droits JWT des projets ; ajoute les en-têtes Deprecation et Warning. Pas d’échange de jeton.

Champs du corps de la requête

ChampDescription
allow_last_agent (optionnel, booléen)Accepte explicitement la perte du dernier détenteur actif d’agent. Une passkey de tableau de bord enregistrée reste une autorité administrative indépendante. défaut : false
Modèle de requête et réponses
shell · modèle de requête
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/projects/PROJECT_ID/agents/self/disconnect'

Réponses

StatutSensCorps et en-têtes
204Agent déconnecté.pas de corps; en-têtes : Cache-Control
401

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)
409

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)
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)