OpenAPI YAMLOpenAPI JSONproblemas YAMLVisão geral da API
Índice do esquema
AccessLevel— obrigatórios: noneler (Somente leitura) < propor < gerenciar. Propor lê, contribui (mídia, notas, comentários, suporte, feedback, capturas de tela, rascunhos de anúncios) e transforma alterações em playlists e telas em revisões (docs/reviews.md).
AccessLimitedBy— obrigatórios: nonePor que effective_access é menor que o acesso da credencial. projeto - o projeto exige revisão para alterações do agente. pessoa - a pessoa responsável pelo agente é um membro que não pode aprovar revisões.
AdslotPageWrite— obrigatórios: id, type, adslot_idSlot de publicidade de página inteira. No máximo 16 páginas de adslot, e pelo menos uma página comum sem visibilidade, são verificações do servidor e não são expressas aqui.
AdvertisingAvailability— obrigatórios: estimated_plays, booked_plays, available_plays, screens, observed_from, observed_to, flight_start, flight_endUma estimativa: as ocorrências de slot que as telas segmentadas produziram na janela observada, projetadas sobre o período de veiculação, menos as reproduções que outras metas diretas ainda precisam nas mesmas telas.
AdvertisingAvailabilityQuery— obrigatórios: flight_start, flight_endAdvertisingCampaign— obrigatórios: id, revision, name, state, pause_reasons, price_change_pending, daily_cap_mcr, lifetime_cap_mcr, reserved_mcr, spent_mcr, flight_start, flight_end, networks, created_at, updated_atAdvertisingCampaignDraft— obrigatórios: name, daily_cap_mcr, lifetime_cap_mcr, flight_start, flight_end, networksAdvertisingCampaignList— obrigatórios: campaignsAdvertisingCampaignNetwork— obrigatórios: seller_project_id, membership_id, admission_generation, screen_ids, slot_ids, creative_ids, network_cap_mcr, network_reserved_mcr, network_spent_mcr, accepted_pricing_generation, price_change_pending, barrier_generation, enabledAdvertisingCampaignNetworkDraft— obrigatórios: seller_project_id, screen_ids, slot_ids, creative_idsAdvertisingCategory— obrigatórios: noneA categoria do anunciante. Dois anúncios da mesma categoria nunca são reproduzidos no mesmo intervalo de anúncios em uma tela; um anúncio sem categoria nunca é separado.
AdvertisingCreative— obrigatórios: id, revision, media_id, media_revision, sha256, kind, content_type, duration_ms, width, height, bytes, state, created_atAdvertisingCreativeCreate— obrigatórios: media_idAdvertisingCreativeList— obrigatórios: creativesAdvertisingCreativeReview— obrigatórios: id, seller_project_id, creative_revision, state, created_atAdvertisingDaypart— obrigatórios: start, endAdvertisingDeliveryReport— obrigatórios: gross_mcr, fee_mcr, net_mcr, completed, interrupted, unbillable, rows, coverageAdvertisingDeliveryRow— obrigatórios: screen_id, slot_id, reservation_id, gross_mcr, fee_mcr, net_mcr, completed_atAdvertisingDirectCampaign— obrigatórios: id, revision, name, advertiser, state, flight_start, flight_end, reserved_plays, delivered_plays, media_ids, image_duration_ms, screen_ids, slot_ids, venue_types, cities, tags, dayparts, overbooked, pace, created_at, updated_atAdvertisingDirectCampaignDraft— obrigatórios: name, advertiser, flight_start, flight_end, media_idsUma campanha direta: o acordo do próprio vendedor com um anunciante externo sobre o inventário de anúncios do próprio vendedor. Ela não movimenta dinheiro.
AdvertisingDirectCampaignList— obrigatórios: direct_campaignsAdvertisingDirectPace— obrigatórios: status, expected_playsEntrega em relação à meta, que se acumula uniformemente ao longo do período de veiculação.
AdvertisingDirectPrice— obrigatórios: model, amount, currencyO preço do acordo registrado pelo vendedor. O screenRIG nunca o cobra; ele dá valor ao relatório.
AdvertisingDirectReport— obrigatórios: campaign_id, name, advertiser, from, to, delivered_plays, reserved_plays, pace, plays, played_ms, not_played, rowsAdvertisingDirectReportRow— obrigatórios: day, screen_id, slot_id, media_id, plays, played_msAdvertisingDirectValue— obrigatórios: model, amount, currencyO preço registrado aplicado às reproduções entregues: por mil reproduções para cpm, a tarifa inteira para flat.
AdvertisingFillStats— obrigatórios: from, to, occurrences, direct, marketplace, vast, unfilled, fill_rate, unfilled_reasons, daysOferta de espaços de anúncio do vendedor para todas as horas UTC que sobrepõem a janela solicitada: ocorrências solicitadas, preenchimentos por origem e ocorrências não preenchidas com o motivo da primeira solicitação. A solicitação abrange no máximo 35 dias; os limites efetivos podem abranger 35 dias mais uma hora.
AdvertisingFillStatsDay— obrigatórios: day, occurrences, direct, marketplace, vast, unfilled, fill_rateAdvertisingInventory— obrigatórios: screen_id, revision, ads_enabled, audience_tags, rate_override_mcr_per_15s, rate_revision, created_at, updated_atAdvertisingInventoryList— obrigatórios: inventoryAdvertisingInventoryWrite— obrigatórios: ads_enabledAdvertisingJoinedInventory— obrigatórios: inventory, slotsAdvertisingJoinedNetwork— obrigatórios: seller_project_id, membership_id, policy, admission_generation, scope, price_change_pending, default_rate_mcr_per_15sAdvertisingJoinedNetworkList— obrigatórios: networksAdvertisingMembership— obrigatórios: id, seller_project_id, admission_generation, policy_revision, policy, scope, state, revision, created_at, updated_atAdvertisingMembershipList— obrigatórios: membershipsAdvertisingMembershipScope— obrigatórios: policy, screen_ids, slot_idsAdvertisingNetwork— obrigatórios: id, revision, enabled, rate_revision, pricing_generation, seller_fee_bps, seller_fee_revision, created_at, updated_atAdvertisingNetworkCreate— obrigatórios: nameAdvertisingQuote— obrigatórios: id, campaign_id, campaign_revision, revision, state, expires_at, items, pricing_generations, created_atAdvertisingQuoteAccept— obrigatórios: quote_idAdvertisingQuoteItem— obrigatórios: seller_project_id, screen_id, slot_id, creative_id, duration_ms, rate_mcr_per_15s, play_price_mcr, pricing_generation, fee_bps, fee_revisionAdvertisingRate— obrigatórios: rate_mcr_per_15sAdvertisingReportCoverage— obrigatórios: mode, outcomes_completeCobertura das contagens de resultados de reprodução. Totais monetários sempre vêm de liquidações imutáveis. Quando outcomes_complete é falso, as contagens são limites inferiores observados e o histórico ausente não está disponível, não zero.
AdvertisingReview— obrigatórios: id, creative_id, creative_revision, state, created_atAdvertisingReviewDetail— obrigatórios: review, creativeAdvertisingReviewList— obrigatórios: reviewsAdvertisingReviewRejection— obrigatórios: reasonAdvertisingScope— obrigatórios: screen_ids, slot_idsAdvertisingSellerCampaign— obrigatórios: id, buyer_project_id, name, state, flight_start, flight_end, screen_ids, slot_ids, creative_ids, review_state, enabled, price_change_pending, updated_atUma campanha de comprador enviada, projetada apenas sobre a rede do vendedor que chama.
AdvertisingSellerCampaignDelivery— obrigatórios: completed, reserved_mcr, gross_mcr, fee_mcr, net_mcrReproduções e valores consolidados de todo o período na rede do vendedor que chama, mais o valor retido atualmente.
AdvertisingSellerCampaignDetail— obrigatórios: campaign, deliveryAdvertisingSellerCampaignList— obrigatórios: campaignsAdvertisingSlot— obrigatórios: id, revision, name, enabled, accepted_media, max_image_duration_ms, max_video_duration_ms, muted, rate_override_mcr_per_15s, rate_revision, created_at, updated_atAdvertisingSlotList— obrigatórios: slotsAdvertisingSlotWrite— obrigatórios: name, accepted_media, max_image_duration_ms, max_video_duration_msAdvertisingSpendReport— obrigatórios: campaign_id, spent_mcr, reserved_mcr, completed, unbillable, pending, coverageAgent— obrigatórios: id, name, agent_type, capabilities, state, authenticated_requests, metered_credits, created_atAgentCapability— obrigatórios: noneUma área de capacidade de credencial de agente. Capacidades são fixas quando a credencial é criada; para mudá-las, conecte um novo agente e desconecte o antigo. A ordem canônica é esta ordem do enum; listas de capacidades nunca contêm duplicatas.
AgentConnection— obrigatórios: connection_id, name, agent_type, status, capabilities, expires_at, created_atAgentDisconnectRequest— obrigatórios: noneAgentInput— obrigatórios: noneAgentList— obrigatórios: itemsAgentScreenScopeUpdate— obrigatórios: screen_scopeAgentSelfStatus— obrigatórios: agent, connection_readyAlert— obrigatórios: id, screen_id, condition, state, since, muted, attentionUma condição de tela enquanto ela durar. Os leitores tratam uma condição desconhecida como uma condição que não sabem nomear.
AlertAcknowledge— obrigatórios: noneAlertActor— obrigatórios: kind, idAlertList— obrigatórios: items, next_cursor, countsAlertMute— obrigatórios: id, screen_ids, tags, until, created_atAlertMuteList— obrigatórios: itemsAlertMuteWrite— obrigatório: untilPelo menos um id de tela ou uma tag.
AppStoreNotificationAcknowledgement— obrigatórios: acknowledgedAppStoreNotificationRequest— obrigatórios: signedPayloadAppStoreOffer— obrigatórios: account_token, products, education_eligible, education_eligibility_source, can_purchase, current_plan_id, subscriptionAppStoreProduct— obrigatórios: product_id, plan_idAppStoreSubscription— obrigatórios: organization_id, plan_id, product_id, original_transaction_id, environment, expires_at, auto_renews, statusA assinatura da App Store de uma organização.
AppStoreTransactionRequest— obrigatórios: signed_transactionApplication— obrigatórios: id, name, revision, created_at, updated_atApplicationEventContext— obrigatórios: primitive_id, codeApplicationEventReport— obrigatórios: severity, code, contextApplicationList— obrigatórios: itemsApplicationPlacement— obrigatórios: playlist_id, playlist_name, page_id, primitive_id, release_id, release, controller, rect, canvas, screen_countUma primitiva de aplicativo em uma página de uma playlist.
ApplicationRename— obrigatórios: nameApplicationUploadCommit— obrigatórios: sha256, compressed_bytesNomeia novamente o arquivo declarado; um commit que nomeie outros bytes é recusado com invalid_request.
ApplicationUploadDeclaration— obrigatórios: sha256, compressed_bytes, expanded_bytes, file_countDeclara um tar.gz produzido pela CLI, com os metadados que um upload transmitido envia como cabeçalhos.
ApplicationUploadSession— obrigatórios: id, application_id, release_id, operation, upload_url, method, headers, expires_atApplicationUsage— obrigatórios: placements, screensArchivedProjectDevice— obrigatórios: screen_id, label, hostAuditActor— obrigatórios: kindAuditActorKind— obrigatórios: noneAuditClient— obrigatórios: kindAuditEntry— obrigatórios: id, scope, at, actor, source, action, resource, changesAuditFieldChange— obrigatórios: path, before, afterAuditHead— obrigatórios: scope, seq, hash, floor_seq, floor_hash, unsealed, formatAuditList— obrigatórios: items, next_cursorAuditProblem— obrigatórios: seq, code, detailAuditResource— obrigatórios: typeAuditRevision— obrigatórios: typeAuditSource— obrigatórios: noneA superfície pela qual uma alteração chegou: uma sessão do painel, a API HTTP, a CLI screenrig, uma chamada de ferramenta MCP, um membro da equipe com permissão de escrita, uma chamada assinada de dispositivo, um webhook de entrada ou o próprio servidor (um worker aplicando uma alteração aprovada).
AuditVerifyResult— obrigatórios: ok, scope, checked, head, problemsAutoTopUpDisabledSettings— obrigatórios: enabledDesativar preserva os valores salvos e o gasto mensal. Os campos de valor opcionais são ignorados, inclusive rascunhos incompletos.
AutoTopUpEnabledSettings— obrigatórios: enabled, threshold_cents, amount_cents, monthly_limit_centsAutoTopUpSettings— obrigatórios: noneAutoTopUpView— obrigatórios: enabled, threshold_cents, amount_cents, monthly_limit_cents, paused, this_month_centsBIBrowse— obrigatórios: items, next_cursorGrafana: dashboards (uid, title, folder, tags), or with dashboard set that dashboard's panels (id, title, type) and the dashboard itself. Power BI: workspaces (id, name), or with workspace set that workspace's reports (id, name, embed_url) and the workspace itself. Tableau: views (path as Workbook/View, name).
BICheck— obrigatórios: name, okBIConnection— obrigatórios: id, project_id, kind, name, config, embed_origin, secret, last_test, revision, created_at, updated_atO acesso de um projeto a um sistema de BI. Cada conexão pertence a um único projeto.
BIConnectionConfig— obrigatórios: noneBIConnectionList— obrigatórios: items, next_cursorBIConnectionPatch— obrigatórios: noneBIConnectionWrite— obrigatórios: name, kind, configBISecret— obrigatórios: set, hintComo um segredo armazenado é exibido. O segredo em si nunca é retornado.
BITarget— obrigatórios: noneO que uma visualização mostra. Grafana com uma conexão: dashboard_uid (e opcionalmente um painel). Power BI com uma conexão: workspace_id e report_id, com pages ou rotate_all_pages. Tableau com uma conexão: view (Workbook/View), com rotate_sheets. Web com uma conexão: url. Sem uma conexão: apenas public_url (e rotate_sheets para o Tableau).
BITestReport— obrigatórios: at, ok, checksBIView— obrigatórios: id, project_id, kind, name, target, refresh_s, rotate_s, fit, revision, status, embed_url, created_at, updated_atBIViewError— obrigatórios: at, code, detailBIViewList— obrigatórios: items, next_cursorBIViewPatch— obrigatórios: noneBIViewStatus— obrigatórios: last_ok_at, last_errorComo a visualização se saiu na tela da última vez. Só muda quando o resultado muda.
BIViewTest— obrigatórios: at, ok, checksBIViewWrite— obrigatórios: nameDefina connection_id com exatamente um entre url e target (para o Tableau, url pode vir com um target que contém apenas rotate_sheets; uma visualização web recebe url e nenhum target), ou kind (grafana, powerbi ou tableau) somente com target.public_url.
BIWebCookie— obrigatórios: name, value, domainUm cookie de um conjunto de cookies exportado de um navegador logado.
BIWebSession— obrigatórios: state, cookies, cookies_updated_at, last_login_at, login_failures, retry_atOs cookies e o login de uma conexão web. state: idle (nada ainda; a primeira captura faz login), active, login_needed (a página mostrou a página de login; a próxima captura faz login), paused (um login não teve sucesso; o próximo espera até retry_at), stopped (cinco logins recusados seguidos; mude as credenciais) ou expired (uma conexão só com cookies cujos cookies pararam de funcionar; dê a ela um novo conjunto).
BIWebStep— obrigatórios: actionUma etapa de um login por script. goto: url (https, pública). fill: selector e value. click e wait_for: selector. press: value, um nome de tecla como Enter ou Tab, e opcionalmente selector para focar primeiro. wait_ms: ms.
Um valor pode conter {{username}}, {{password}} e {{otp}}, que o renderizador preenche a partir do login; não coloque nenhuma senha nem código em um valor, apenas o marcador.
BillingBalance— obrigatórios: wallet_revision, remaining_mcr, reserved_mcr, available_mcr, sources, withdrawalBillingPayer— obrigatórios: kind, idBillingPaymentMethod— obrigatórios: brand, last4, exp_month, exp_yearBillingPayoutStatus— obrigatórios: rails_available, unavailable_reasonBillingPlanSubscription— obrigatórios: subscription_id, plan, status, entitlement, cancel_at_period_endBillingPortalSession— obrigatórios: urlBillingSourceBucket— obrigatórios: remaining_mcr, reserved_mcrBillingSources— obrigatórios: nonredeemable, purchased, ad_earnedBillingStatement— obrigatórios: entries, next_cursorBillingStatementEntry— obrigatórios: sequence, journal_id, kind, amount_mcr, amount_credits, amount_usd, occurred_atBillingUsageAllowance— obrigatório: storage_bytes, api_events, storage_mcr_per_gb_monthO que um pagador recebe gratuitamente, como strings decimais canônicas. A largura de banda nunca é cobrada, portanto não tem franquia.
BillingUsageAmounts— obrigatório: bandwidth_bytes, storage_mcr, api_eventsBillingWithdrawal— obrigatórios: eligible_earned_mcr, amount_usd_cents, threshold_exclusive_usd_cents, allowed, blockers, rails_availableBrowserLinkClaim— obrigatórios: session_id, status, screenBrowserLinkClaimRequest— obrigatórios: codeBrowserLinkClaimScreen— obrigatórios: id, public_id, state, public_urlBrowserLinkEvent— obrigatórios: session_id, status, event_id, expires_atBrowserLinkSession— obrigatórios: session_id, code, display_code, status, expires_atBrowserLinkStatus— obrigatórios: session_id, code, display_code, status, continuation_path, expires_atBrowserProvisioningCompletion— obrigatórios: screen, public_urlBrowserProvisioningExchange— obrigatórios: provisioning_token, exchange_idCLIEnrollment— obrigatórios: project, agent, connection_ready, token, issuance_id, issuance_expires_at, invitationCLIEnrollmentOAuth— obrigatórios: project, agent, connection_ready, issuance_id, issuance_expires_at, invitation, access_token, token_type, expires_in, refresh_token, refresh_expires_at, scopeRegistro no formato de credencial oauth. A concessão do registro (cliente screenrig-cli, Gerenciar no novo projeto com todas as capacidades, acesso de identidade Gerenciar) emitiu seu primeiro par de tokens; uma tentativa exata antes de issuance_expires_at retorna o mesmo par, tentativas posteriores retornam credential_issuance_expired.
CLIEnrollmentRequest— obrigatórios: client_idCampaign— obrigatórios: id, name, playlist_id, audience, priority, paused, reserved, revision, created_at, updated_atUma campanha de conteúdo: toda tela em audience exibe playlist_id enquanto from, until e windows valem no fuso horário da tela. A ausência de from, until e windows significa sempre.
CampaignAudience— obrigatórios: noneQuais telas uma campanha segmenta: exatamente um entre all (toda regra corresponde), any (ao menos uma corresponde), tag (a tela tem a tag), screen_id (essa tela) ou folder (as telas dessa pasta de telas e de toda pasta dentro dela, GET /api/screen-folders; a pasta deve existir).
As regras se aninham em no máximo 3 níveis e um público-alvo tem no máximo 500 regras. {"all": []} é toda tela do projeto; nos demais casos, all e any listam ao menos uma regra.
CampaignList— obrigatórios: itemsCampaignPatch— obrigatórios: noneCampaignPreviewRequest— obrigatórios: bodyCampaignPromote— obrigatórios: revisionCampaignReach— obrigatórios: published, current, at, empty_groupsQuantas telas ativas o público-alvo alcança; uma tela em pareamento não é contada.
Conta as correspondências do público-alvo, não onde a campanha é reproduzida: uma tela ativa sem playlist padrão corresponde e não reproduz nada. published é a contagem de quando a campanha foi publicada pela última vez (criada, ou atualizada com outro audience, playlist_id ou paused); current é a contagem mais recente.
Uma mudança nas tags, na pasta ou no estado de uma tela ativa, ou a movimentação de uma pasta, recontabiliza as campanhas cujo público-alvo cita o que mudou cerca de 15 segundos depois que as mudanças param, e acrescenta campaign.reach_changed (published, previous, current; republished true a partir de uma publicação) e, para cada tag ou pasta do público-alvo que passa a corresponder ou deixa de corresponder a telas, campaign.group_changed (kind, value, matched); uma publicação que remove uma tag ou pasta vazia do público-alvo acrescenta campaign.group_changed com removed true e matched 0.
Ausente em uma campanha não publicada nem recontada desde que o alcance foi introduzido.
CampaignRevision— obrigatórios: revision, created_at, change, current, campaignUma revisão armazenada de uma campanha: a campanha como estava após uma gravação. change diz o que a produziu: created, edited (uma atualização ou uma importação de programação), restored ou promoted (uma cópia de uma revisão anterior, nomeada por restored_from), ou baseline (a revisão que a campanha tinha quando seu histórico começou, antes de qualquer gravação registrar uma).
Um valor que este leitor não conhece é lido como edited.
CampaignRevisionList— obrigatórios: itemsCampaignScreens— obrigatórios: campaign_id, counts, itemsCampaignStatus— obrigatórios: campaign_id, screen_id, statusO estado de uma campanha em uma tela.
Em uma tela cujo Player resolve e recebe sua própria pilha (schedule.stack), uma campanha válida pelo horário ocupa a posição que essa pilha lhe atribui: uma campanha em faixa ou principal é reproduzida em sua região, e um bloqueio de display nos seus displays; uma campanha ausente da pilha fica pending ou blocked (playlist_unavailable). playing: a tela a mostra. pending: deveria aparecer, e a troca ocorre em até um minuto. waiting: atualmente fora de from, until ou windows (next_start indica o início se ocorrer em até oito dias). ended: until já passou. outranked: está em vigor, mas uma tomada de controle da tela (reason takeover) ou outra campanha (reason campaign, by) vence. conditional: está válida pelo horário e é reproduzida enquanto também for satisfeita a condição observada apenas pelo Player (reason interaction: alguém está usando a tela; data: sua condição de dados). paused. blocked: não pode aparecer aqui (reason no_default_playlist, no_timezone ou playlist_unavailable: a playlist está ausente, não foi aprovada ou não cabe na tela; region_not_laid_out: não está disposta em nenhum display desta tela (sua faixa não cabe em nenhum display de destino ou seu bloqueio não indica nenhuma saída da tela) e fica fora da pilha; ou stack_only: o Player da tela não resolve sua própria pilha, e apenas um que o faz respeita uma região, um bloqueio de display, interação ou condição de dados). not_in_audience.
CampaignWrite— obrigatórios: name, playlist_id, audienceCanvasBackground— obrigatórios: none#RRGGBBAA maiúsculo canônico sólido, ou um gradiente linear de cima para baixo.
CanvasColor— obrigatórios: nonesRGB RRGGBBAA maiúsculo canônico.
CapPull— obrigatórios: noneFontes CAP que a plataforma lê para o gatilho, com a localização das telas-alvo e quais alertas contam: os parâmetros de um posicionamento de cartão cap-alert (docs/feeds.md "CAP alerts"). Cada URL de fonte é buscada uma vez por minuto para cada gatilho e posicionamento que a nomeia.
Sem fontes, os feeds públicos da plataforma que cobrem a localização são lidos (NWS, Canada NAAD e MeteoAlarm para uma localização com códigos de área). O alerta correspondente mais severo assume as telas-alvo exatamente como uma mensagem enviada faria; quando as fontes não mostram nenhum (um cancelamento ou expiração), um alerta puxado termina.
Uma fonte obsoleta ou com falha nunca termina um alerta. location é obrigatório a menos que fontes sejam fornecidas.
Capabilities— obrigatórios: api_version, protocol_version, application_compressed_bytes, application_expanded_bytes, application_package_bytes, application_file_count, application_file_bytes, application_path_depth, application_path_bytes, media_image_bytes, media_audio_bytes, media_video_bytes, playlist_max_pages, playlist_max_items_per_page, playlist_max_media_per_selector, transition_max_duration_ms, screens_per_project, project_content_bytes, founding_period_ends_at, featuresCardCatalogue— obrigatórios: cardsCardCreate— obrigatórios: type, paramsCardDataEntry— obrigatórios: key, document, bytes, sha256, revision, created_at, updated_atCardDataList— obrigatórios: items, next_cursorCardDataSummary— obrigatórios: key, bytes, sha256, revision, created_at, updated_atCardDataWrite— obrigatórios: documentCardDetails— obrigatórios: id, major, version, params_schema, data_schema, feed, tier, layouts, exampleCardFile— obrigatórios: src, sha256CardInstance— obrigatórios: id, project_id, type, major, params, created_at, updated_at, revisionCardKVWebhook— obrigatórios: id, card_id, description, mapping, enabled, signing, url, created_at, updated_atUm webhook de entrada que grava o documento de dados de um cartão.
CardKVWebhookCreate— obrigatórios: noneCardKVWebhookList— obrigatórios: itemsCardKVWebhookRotate— obrigatórios: noneCardKVWebhookUpdate— obrigatórios: noneCardKVWebhookWithSecrets— obrigatórios: noneCardKVWebhookWriteResult— obrigatórios: statusCardRequirements— obrigatórios: cardml, featuresCardSummary— obrigatórios: id, title, short, category, tags, tier, layouts, majorsComments— obrigatórios: commentsCommentsWrite— obrigatórios: commentsConnection— obrigatórios: id, project_id, provider, mode, name, status, last_error, config, secret, last_test, revision, created_at, updated_atO acesso reutilizável de um projeto à Microsoft ou ao Google. Fontes, conexões do Power BI e contas de sincronização de mídia do SharePoint nomeiam uma em config.connection_id em vez de levar credenciais próprias.
ConnectionCheck— obrigatórios: name, ok, detailConnectionConfig— obrigatórios: noneO que uma conexão nomeia além do segredo dela; só estão presentes os membros que o provedor e o modo dela usam. Um segredo, uma chave ou um token de atualização nunca está aqui.
ConnectionConfigWrite— obrigatórios: noneMicrosoft, modo own_app: os dois membros. Não aceito para uma conexão do Google nem para o modo screenrig_app.
ConnectionConsent— obrigatórios: noneUma conexão devolvida com o link de consentimento de uso único dela, que só uma gravação que cria um carrega: criar uma conexão no modo screenrig_app e POST /api/connections/{id}/connect. A pessoa que consente abre consent_url antes de consent_expires_at. É o link de um único consentimento: envie-o somente a essa pessoa. Uma leitura da conexão nunca o traz.
ConnectionError— obrigatórios: code, message, atPor que uma conexão não está funcionando. A mensagem é uma frase fixa mais, para a Microsoft, o código AADSTS; ela nunca repete texto enviado por um chamador.
ConnectionList— obrigatórios: items, next_cursorConnectionPatch— obrigatórios: noneConnectionSecret— obrigatórios: set, hintComo uma resposta mostra o segredo, a chave ou o token de atualização de uma conexão. O valor nunca é devolvido.
ConnectionTest— obrigatórios: at, ok, checksConnectionWrite— obrigatórios: provider, mode, nameCreatedProject— obrigatórios: project, organizationCreditPurchase— obrigatórios: id, status, amount_cents, credits, creditedDashboardAgentAction— obrigatórios: project_idDashboardApplicationPreviewLaunch— obrigatórios: release_id, launch_url, expires_atDashboardApplicationSummary— obrigatórios: countDashboardBalance— obrigatórios: credit_remaining, credit_included, credit_resetDashboardBoot— obrigatórios: noneUma única requisição para o shell do dashboard. Cada membro é o corpo que a rota indicada responde para esta mesma sessão, e fica ausente quando essa rota não responderia 2xx para ela. advertising_network é null quando o projeto não tem rede.
DashboardDisplayName— obrigatórios: noneNome de exibição imprimível aparado, com no máximo 80 bytes UTF-8. Rejeita controles, texto com aparência de URL, @, www., :// e material de credenciais. Nunca autorização.
DashboardEmail— obrigatórios: email, email_verified, email_revisionA visualização do próprio e-mail do usuário atual. O endereço verificado permanece efetivo enquanto uma alteração está pendente, e o candidato pendente é visível apenas para seu proprietário.
DashboardEmailVerificationAccepted— obrigatórios: statusDashboardHealthSummary— obrigatórios: display_disconnected, hot, crashing, staleTelas ativas com relatório de saúde, contadas por condição; uma tela pode contar em várias. display_disconnected, hot e crashing contam apenas telas online cujo último relatório está atual (não obsoleto); stale conta telas online cujo relatório tem mais de 35 minutos e nada mais.
DashboardMe— obrigatórios: user_id, display_name, email, password, passkeys, created_atDashboardMediaSummary— obrigatórios: count, bytesContadores de mídia pronta do projeto da sessão. bytes conta apenas bytes de mídia armazenada; não é o total used_bytes do projeto, que também cobre árvores de release e entradas chave/valor. image_bytes, video_bytes e audio_bytes dividem bytes por primitiva e sempre somam bytes enquanto image, video e audio forem as únicas primitivas; se outra primitiva for armazenada algum dia, os três somam menos que bytes.
DashboardMember— obrigatórios: user_id, display_name, joined_at, passkeys, password, owner, externalDashboardMemberList— obrigatórios: items, viewer_user_id, viewer_is_ownerDashboardPasskey— obrigatórios: id, name, credential_id, provider, created_at, last_used_atDashboardPasskeyAssertion— obrigatórios: ceremony_id, request_optionsDashboardPasskeyAssertionComplete— obrigatórios: ceremony_id, credentialDashboardPasskeyComplete— obrigatórios: ceremony_id, credentialDashboardPasskeyList— obrigatórios: rp_id, user_handle, itemsDashboardPasskeyPatch— obrigatórios: nameDashboardPasskeyProof— obrigatórios: type, ceremony_id, credentialDashboardPasskeyRegistration— obrigatórios: ceremony_id, creation_optionsDashboardPasswordLogin— obrigatórios: email, passwordDashboardPasswordProof— obrigatórios: type, passwordDashboardPasswordSet— obrigatórios: password, proofDashboardPendingEmail— obrigatórios: email, expires_atDashboardProject— obrigatórios: status, created_at, email, screen_count, screen_limit, used_bytes, reserved_bytes, content_limit_bytes, event_retention_days, nameStatus, endereço de contato, limites aplicados, uso, retenção e estado público de créditos totais para um projeto. O identificador interno do plano não é divulgado.
DashboardProjectList— obrigatórios: itemsDashboardProjectListItem— obrigatórios: id, name, last_used_atDashboardProjectReference— obrigatórios: id, nameDashboardProjectSwitch— obrigatórios: project_idDashboardProof— obrigatórios: noneDashboardProofRequest— obrigatórios: proofDashboardReauthentication— obrigatórios: ceremony_id, optionsDashboardReauthenticationRequest— obrigatórios: kindDashboardSSOProof— obrigatórios: typeProva por um login único recente. É válida enquanto a sessão atual tiver sido iniciada pelo provedor de identidade da organização há no máximo 10 minutos, e não traz cerimônia nem segredo. Caso contrário, a rota responde reauthentication_required, e a pessoa faz login novamente pelo provedor dela (POST /api/session/sso-starts, intent reauth).
DashboardScreenSummary— obrigatórios: total, online, pairing_pending, active, archivedContadores de tela para o projeto da sessão. total é pairing_pending mais ativo e exclui arquivados, correspondendo ao screen_count do projeto. online é derivado dos fluxos de eventos runtime emparelhados ao vivo exatamente como Screen.online é; não é um booleano armazenado nem um heartbeat do player.
DashboardSession— obrigatórios: user_id, display_name, email, project, auth_method, authenticated_at, expires_at, dev_auth, staff, shadow, passkey_enrollment_required, email_verification_requiredSessão da pessoa. Identificadores são descritivos; o cookie de sessão estabelece autoridade. Uma pessoa sem projetos tem project: null.
DashboardSessionOrganization— obrigatórios: id, name, managedA organização principal da pessoa.
DashboardSessionSSO— obrigatórios: organization_id, provider_name, linkedO contexto de login único da pessoa. Presente sempre que o endereço verificado da pessoa está em um domínio cuja organização tem uma conexão de provedor de identidade; linked é false até a pessoa fazer login por ela ou vinculá-la. Uma sessão SSO dura 24 horas a partir do login e não é prorrogada pelo uso.
DashboardStaffWriteMode— obrigatórios: request_id, project_id, expires_atDashboardSummary— obrigatórios: screens, media, applicationsDeletedProject— obrigatórios: id, screens, paired_screens_active, paired_screens_archived, paired_screens_completed_pending, agents, media, applications, playlists, membershipsDemoRequestInput— obrigatórios: email, country, screen_range, organization, budget, timezone, source, flow_idDemoResult— obrigatórios: route, booking, review_requested, video_url, email, country, timezone, flow_id, sourceDemoSlots— obrigatórios: slots, timezoneDemoSource— obrigatórios: noneDeviceSessionRequest— obrigatórios: noneGeração de sessão por navegador pareado por cookie. O corpo é opcional. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1).
DisplayWindow— obrigatórios: daysDocsPage— obrigatórios: url, title, markdown, truncated, sections, corpus_commitDocsSearchResponse— obrigatórios: results, corpus_commitDocsSearchResult— obrigatórios: url, title, section, snippet, scoreEducationEligibilitySource— obrigatórios: noneQuem decidiu education_eligible. staff é uma decisão da equipe, em qualquer sentido, e é definitiva. school_email é a decisão automática a partir do endereço de e-mail escolar K-12 verificado de um administrador (um domínio escolar como k12.ca.us ou sch.uk; nunca um domínio educacional geral como .edu ou .ac.uk). A string vazia significa que ninguém decidiu.
EmailVerifyRequest— obrigatórios: tokenEmailVerifyResult— obrigatórios: purpose, statusEmptyPaymentRequest— obrigatórios: noneEnrollmentInvitation— obrigatórios: id, status, expires_atEvent— obrigatórios: cursor, type, severity, message, atEventActor— obrigatórios: user_id, display_nameUsuário do Dashboard que causou esta mutação. Opcional e ausente em todo evento produzido por um agente, CLI, player ou worker, então o campo distingue uma mutação do dashboard em vez de rotular todo o tráfego. É apenas atribuição descritiva e nunca autorização. display_name é o nome escolhido pelo usuário no registro e não é verificado.
EventAgent— obrigatórios: agent_id, name, agent_typeAtribuição segura do principal do agente presente somente quando o evento foi causado diretamente por um agente autenticado. Nunca é autorização.
EventCommand— obrigatórios: name, methodA solicitação do agente que causou este evento. Opcional e ausente em todo evento produzido por um usuário do dashboard, um player ou um worker. É apenas uma atribuição descritiva e nunca uma autorização. Cada campo é escrito pelo servidor a partir da rota correspondente ou do registro de problemas.
Um objeto de comando não pode carregar um vetor de argumentos, um corpo de solicitação, um cabeçalho ou qualquer texto escolhido pelo chamador, e deliberadamente não há campo para isso. name e method aparecem em todo evento que uma solicitação de agente cometeu.
Os campos de resultado aparecem SOMENTE em um evento agent.command, que é o registro para uma solicitação que não cometeu evento de domínio: um evento de domínio cometido é a própria prova de que a solicitação teve sucesso.
EventList— obrigatórios: items, next_cursorFeedDocument— obrigatórios: schema, fetchedAt, attributionFeedPending— obrigatórios: key, state, retry_after_secondsFeedbackContext— obrigatórios: noneEnvelope de diagnóstico fechado. Cada membro é um escalar opcional restrito, aninhamento é estruturalmente impossível, e um membro desconhecido é rejeitado com invalid_request. A forma existe para que um cliente não possa persistir valores de argumento, credenciais ou dados de ambiente livre através dela.
FeedbackList— obrigatórios: itemsFeedbackReplyWrite— obrigatórios: textFeedbackResponse— obrigatórios: id, text, status, created_atUma resposta imutável de staff ou agente. Um autor ausente identifica uma resposta de staff. Texto simples (escape para qualquer contexto de exibição); texto em forma de credencial é substituído por [redacted] antes de ser armazenado.
FeedbackStatus— obrigatórios: noneOnde a equipe está em relação a uma submissão. waiting_on_user pede informações ao agente que enviou; uma resposta do agente reabre ou fecha o relatório. Um relatório "planejado" mantém seu status.
FeedbackSubmission— obrigatórios: id, kind, title, body, created_atUma submissão com escopo de projeto. Seus próprios campos (id, kind, title, body, context, created_at) nunca mudam depois de escritos. status é aberto até que o staff responda e então o status da resposta mais recente; respostas de agente reabrem relatórios aguardando entrada ou fechados, enquanto um relatório "planejado" mantém seu status.
Respostas são respostas da equipe e do agente, as mais antigas primeiro e no máximo 20, nunca editadas ou removidas. Cada resposta também acrescenta um evento feedback.responded ao fluxo de eventos do projeto (resource.id é o id da submissão; detalhes carregam response_id, status, fixed_in e author para respostas do agente, nunca o texto).
O ID da submissão nunca é autorização: apenas o projeto proprietário o lê.
FeedbackWrite— obrigatórios: title, bodyFleetLink— obrigatórios: id, label, enabled, tags, screens_created, revision, created_at, updated_atUma URL Player que transforma cada dispositivo que a abre em sua própria tela neste projeto.
FleetLinkList— obrigatórios: itemsFleetLinkPatch— obrigatórios: noneFleetLinkWrite— obrigatórios: labelGroupBinding— obrigatórios: binding_id, group_id, group_name, role, created_atGroupBindingCreate— obrigatórios: group_id, roleGroupBindingGroup— obrigatórios: id, display_name, member_countGroupBindingList— obrigatórios: bindings, groupsHLSStreamSource— obrigatórios: protocol, urlHealthResponse— obrigatórios: statusHealthTrend— obrigatórios: items, next_cursorHealthTrendHour— obrigatórios: hour, screens_reporting, hot, display_disconnected, crashingHostContext— obrigatórios: platformO shell e hardware em que um player roda, conforme reportado pelo player. Uma DICA que nomeia um dispositivo; nunca uma credencial, nunca autorização. Apenas a chave Ed25519 autoriza.
Armazenado por tela, substituído por cada sessão que o contenha, excluído com a tela, nunca escrito em logs de operação, nunca refletido em respostas de problema, e nunca retornado a qualquer projeto que não seja do proprietário. Somente leitura na API do projeto; ScreenPatch não pode escrever.
HostDevice— obrigatórios: noneIdentificadores de hardware opcionais. duid e serial são os únicos dois consultados pela dica de recuperação; uma leitura falha no player omite o campo.
IceServer— obrigatórios: urlsUm RTCIceServer. As URLs da porta 53 são removidas porque os navegadores as bloqueiam e nada é enviado de forma incremental.
IdentityProvider— obrigatórios: connection_id, kind, preset, name, jit, service_provider, ready_to_require, policy, revision, created_at, updated_atA conexão de login único da organização. Ela não guarda nenhum segredo.
IdentityProviderCertificate— obrigatórios: sha256, subject, not_afterIdentityProviderOIDC— obrigatórios: issuer, client_id, client_secret_set, scopesIdentityProviderOIDCWrite— obrigatórios: client_idIdentityProviderSAML— obrigatórios: idp_entity_id, idp_sso_url, certificatesIdentityProviderSAMLWrite— obrigatórios: noneIdentityProviderServiceProvider— obrigatórios: oidc_redirect_uri, saml_entity_id, saml_acs_url, saml_metadata_urlOs valores a informar no provedor de identidade, derivados da origem do dashboard e do ID da conexão.
IdentityProviderTest— obrigatórios: at, ok, subject_presentO resultado do último login de teste pela conexão.
IdentityProviderWrite— obrigatórios: kind, preset, name, proofInvitation— obrigatórios: id, kind, delivery, status, project_id, created_at, expires_atInvitationAcceptRequest— obrigatórios: token, modeNovas credenciais são necessárias para create_login e reset. O link create_login requer o cookie de inscrição verificado e usa seu nome de exibição e e-mail.
O e-mail create_login requer display_name. signed_in precisa de login em até dez minutos ou uma prova invitation_accept vinculada ao id do convite. buyer se aplica apenas a ad_buyer; novos projetos buyer começam com zero crédito.
InvitationAccepted— obrigatórios: kind, project_id, nextInvitationAdvertising— obrigatórios: screen_ids, slot_ids, policyEscopo de propriedade do vendedor: pelo menos uma tela ou slot. Aceita apenas telas, apenas slots ou ambos.
InvitationBuyer— obrigatórios: noneInvitationCreate— obrigatórios: kindO envio por e-mail requer endereços de e-mail. O envio por link é apenas project_member e não inclui e-mails nem publicidade. ad_buyer exige publicidade. No máximo 50 convites pendentes para membros e compradores por organização; um convite por e-mail pendente do mesmo tipo e endereço é reutilizado.
InvitationCreated— obrigatórios: invitationsInvitationCredential— obrigatórios: noneInvitationEmailVerificationAccepted— obrigatórios: status, expires_atInvitationEmailVerificationRequest— obrigatórios: token, display_name, emailInvitationInspect— obrigatórios: id, kind, delivery, project, expires_at, person, modes, methodsInspeção não consumidora. person é null para links. Nunca informa o estado de verificação de cadastro, exceto que um reset de login, cujo link foi enviado apenas ao endereço, informa se concluí-lo substitui uma conta não verificada (replaces_unverified_account). Modos de e-mail são create_login ou signed_in; links oferecem ambos, e resets oferecem reset.
InvitationInspectRequest— obrigatórios: tokenInvitationIssued— obrigatórios: id, kind, delivery, status, project_id, created_at, expires_atInvitationKind— obrigatórios: noneInvitationList— obrigatórios: items, next_cursorInvitationPasskeyOptionsRequest— obrigatórios: token, modeInvitationPasswordCredential— obrigatórios: type, passwordInvitationSignup— obrigatórios: email, display_name, verified, expires_atInvitationStatus— obrigatórios: noneKVEntry— obrigatórios: application_id, key, value_base64, content_type, bytes, sha256, revisionKVList— obrigatórios: items, next_cursorKVSummary— obrigatórios: application_id, key, content_type, bytes, sha256, revisionKVWebhook— obrigatórios: id, application_id, key, description, url, created_atUm webhook de chave/valor de entrada. Seu segredo é retornado apenas por create e rotate-secret.
KVWebhookCreate— obrigatórios: keyKVWebhookDelivery— obrigatórios: at, outcome, status, bytes, request_idKVWebhookDeliveryList— obrigatórios: itemsKVWebhookList— obrigatórios: itemsKVWebhookWithSecret— obrigatórios: noneKVWebhookWriteResult— obrigatórios: key, revision, bytes, sha256, content_type, updated_atKVWrite— obrigatórios: value_base64LevelDate— obrigatórios: dateUma data civil específica, o dia inteiro ou entre start e end como os de uma janela. Começa entre from e until e não é uma data de exceção.
LevelInteraction— obrigatórios: noneO nível vigora enquanto alguém usa a tela: de um toque, clique ou tecla até passarem idle_s segundos sem entrada. Uso típico: uma página interativa acima de um loop de atração. idle_s é armazenado e retornado (60 quando omitido).
LevelMonthly— obrigatórios: noneUma ocorrência mensal no fuso horário da tela: day (1 a 31; um mês sem esse dia a ignora), ou nth (1 a 4, -1 o último) e weekday. start e end como os de uma janela; a data em que a ocorrência começa é a dona dela.
LinearGradientBackground— obrigatórios: type, stopsGradiente linear de cima para baixo. Não há campo de ângulo. stops tem de 2 a 8 entradas, estritamente crescentes em [0, 1], primeira em=0, última em=1.
LinearGradientStop— obrigatórios: at, colorUm ponto em um fundo de tela linear de cima para baixo. at=0 é a borda superior, at=1 é a borda inferior.
LiveFrames— obrigatórios: live_id, stateProgresso do adaptador de quadros de uma sessão ao vivo. Esquema aberto.
LiveSession— obrigatórios: state, screen_id, viewer_urlSessão ao vivo de uma tela. Esquema aberto.
LiveStartRequest— obrigatórios: noneLiveViewer— obrigatórios: viewer_id, live_id, offer, ice_servers, expires_atOferta do relay para um espectador. Esquema aberto.
LiveViewerAnswer— obrigatórios: answerManifestActivatedContext— obrigatórios: manifest_revisionManifestActivatedReport— obrigatórios: severity, code, contextManifestUpgradeContext— obrigatórios: manifest_revision, stateManifestUpgradePlaylist— obrigatórios: id, name, revisionA identidade da playlist por trás de uma revisão desejada emitida ou na fila: desired_playlist usa sua concessão desejada exata ou o objetivo de conteúdo compartilhado somente leitura para a atribuição efetiva atual antes da emissão da concessão. active_playlist sempre usa a concessão histórica reconhecida exata, nunca uma atribuição ou edição de conteúdo mais recente. id mais revisão são a versão da playlist que um operador lê como Target v42 / Playing v41; name é o nome de exibição da playlist, nulo quando a playlist não existe mais ou não pode ser resolvida.
Uma concessão histórica ativa ausente é nula, nunca uma revisão fabricada. Uma meta desejada enfileirada não concede acesso a conteúdo.
ManifestUpgradeReport— obrigatórios: severity, code, contextUma última captura de ciclo de vida de atualização de manifesto que vence para a tela da sessão.
O servidor armazena um slot por tela e deriva o modelo de leitura do projeto Screen.manifest_upgrade a partir dele; um relatório desatualizado, substituído ou pré-ativação pós-ativação é aceito sem alteração (202), nunca recusado como conflito, e nenhum relatório promove uma concessão. severity é apenas envelope: a severidade do evento derivado do projeto vem do estado.
McrString— obrigatórios: noneQuantidade exata de millicréditos como string decimal canônica. 1 crédito é 1000 mcr.
Media— obrigatórios: id, filename, primitive, content_type, operation_id, sha256, bytes, revision, state, created_at, updated_atMediaAvailability— obrigatórios: noneQuando os seletores dinâmicos podem escolher a mídia, no fuso horário de cada tela: dentro de [from, until) e em uma ocorrência de windows, monthly ou dates (nenhum dos três: todo dia) cuja data não está em except. A gramática de níveis da programação sem data e interaction.
MediaAvailabilityPatch— obrigatórios: availabilityMediaCommit— obrigatórios: content_type, bytes, sha256Declara apenas o que o servidor pode reverificar contra o objeto armazenado byte a byte. A identidade do codec não é declarada aqui: o servidor a deriva do contêiner durante a verificação assíncrona, então um cliente não pode afirmar um codec que dirija o comportamento do player.
MediaFolder— obrigatórios: id, name, parent_id, revision, created_at, updated_atUma pasta da biblioteca de mídia. Um seletor de playlist por:folder reproduz os arquivos prontos diretamente dentro dela, não os de suas subpastas.
MediaFolderCreate— obrigatórios: nameMediaFolderList— obrigatórios: itemsMediaFolderPatch— obrigatórios: noneMediaGenerationReference— obrigatórios: noneExatamente um entre media_id ou b64. URLs HTTP são rejeitadas.
MediaGenerationRequest— obrigatórios: promptSolicita uma imagem estática. O prompt é bytes do cliente e nunca é retornado, registrado ou publicado no SSE do projeto. aspect_ratio padrão é 16:9. quality é baixa, média ou alta e padrão é média. tag é armazenada no objeto de mídia pronta como uma tag de upload. Referências opcionais são base64 embutido ou um media_id do projeto; URLs HTTP são rejeitados.
O tamanho somado de todas as referências de uma solicitação, tanto inline quanto media_id, não deve exceder 25165824 bytes (24 MiB); uma solicitação acima desse limite é recusada.
No Standard, saldo restante que não cobre o dobro do custo do fornecedor da imagem estática, arredondado para créditos inteiros, após o piso introdutório (negativo 1.000.000 créditos até 2027-01-01, depois zero) retorna payment_required, exceto em desenvolvimento. Os outros planos nunca são recusados por causa do saldo.
MediaGenerationUsage— obrigatórios: quality, credits, usdDébito voltado ao cliente para uma imagem armazenada, o usage no result de uma Operation media.generate em succeeded. quality é a qualidade solicitada e altera a imagem, não um preço fixo. créditos são o dobro do custo do fornecedor dessa imagem, arredondados para cima em créditos ScreenRig inteiros. usd é o equivalente em dólares desses créditos.
Nunca nome de fornecedor, custo do fornecedor ou contagem de token.
MediaList— obrigatórios: itemsMediaMove— obrigatórios: folder_idPelo menos um id entre media_ids e folder_ids, no máximo 1000 no total.
MediaMoveResult— obrigatórios: media, foldersMediaReplace— obrigatórios: upload_idMediaRestore— obrigatórios: noneMediaRestorePending— obrigatórios: status, review, warningsMediaRestored— obrigatórios: media, warningsMediaSelectorTagFilter— obrigatórios: noneMediaSelectorWeights— obrigatórios: noneParticipações de um seletor ponderado, indexadas por ID de mídia ou tag:NAME.
O peso de um item é a chave do seu ID de mídia, se presente; caso contrário, a primeira chave tag:NAME, em ordem alfabética, entre as tags que ele carrega, com esse peso dividido igualmente entre os itens da seleção que a compartilham, de modo que a participação de um patrocinador se mantém qualquer que seja o número de criativos; caso contrário, o item conta como seu próprio grupo com peso 1.
Cada ciclo completo reproduz cada item exatamente conforme sua participação.
MediaSingleTagPatch— obrigatórios: tagMediaSync— obrigatórios: id, project_id, account_id, provider, name, folder_id, every_s, state, source, next_run_at, revision, created_at, updated_atUma pasta de origem mantida em sincronia com uma pasta de mídia.
MediaSyncAccount— obrigatórios: id, project_id, kind, name, config, secret, state, revision, created_at, updated_atO que as sincronizações usam para ler: as credenciais do aplicativo do Microsoft Entra do próprio projeto (microsoft365), a conexão de uma pessoa com o Canva (canva) ou com o Dropbox (dropbox), ou uma conta de serviço do Google com a qual as pastas são compartilhadas (google_drive). O segredo de cliente, os tokens e a chave são selados e nunca devolvidos.
MediaSyncAccountConfig— obrigatórios: noneMediaSyncAccountConnect— obrigatórios: noneUma conta devolvida com o link de consentimento de uso único dela: o que respondem a criação de uma conta do Canva ou do Dropbox e media sync account connect. A pessoa dona da conta do Canva ou do Dropbox abre authorize_url, logada no Canva ou no Dropbox, antes de authorize_expires_at. É o link de um único consentimento: envie-o somente a essa pessoa. As leituras da conta nunca o trazem.
MediaSyncAccountList— obrigatórios: items, next_cursorMediaSyncAccountPatch— obrigatórios: noneMediaSyncAccountWrite— obrigatórios: kind, nameMediaSyncCheck— obrigatórios: name, ok, detailMediaSyncDesign— obrigatórios: id, titleUm design do Canva que a pessoa conectada pode ver.
MediaSyncDesignList— obrigatórios: items, continuationMediaSyncList— obrigatórios: items, next_cursorMediaSyncPatch— obrigatórios: noneMediaSyncRun— obrigatórios: at, status, added, updated, removed, pending_delete, skipped_totalO resumo da última execução de uma sincronização.
MediaSyncRunError— obrigatórios: code, detailMediaSyncSecret— obrigatórios: set, hintComo uma resposta mostra o segredo de cliente de uma conta, os tokens de uma conta do Canva ou do Dropbox (set depois de conectada, sem hint) ou a chave de conta de serviço própria de uma conta do Google Drive (set quando a conta tem uma; hint são os quatro últimos caracteres do private_key_id dela). O valor nunca é devolvido.
MediaSyncSkipped— obrigatórios: name, reasonMediaSyncSource— obrigatórios: web_urlA origem que uma sincronização lê, resolvida quando a sincronização foi criada. Uma pasta do SharePoint tem drive_id e item_id; uma pasta do Dropbox, item_id e path; uma pasta do Google Drive, item_id, drive_id quando está em um drive compartilhado, e shared_by; um design do Canva tem design_id e os membros que vêm depois dele.
MediaSyncTest— obrigatórios: at, ok, checksMediaSyncWrite— obrigatórios: provider, account_idMediaTagPatch— obrigatórios: noneMediaTagsPatch— obrigatórios: tagsMediaUploadDeclaration— obrigatórios: filename, content_type, bytes, sha256Declara um upload. O máximo de bytes é um teto de transporte independente do plano, não um tamanho alcançável. Um tipo de conteúdo de imagem é limitado a 20971520 bytes, 20 MiB, e uma declaração de imagem maior é rejeitada com invalid_request antes que qualquer byte seja transferido.
Esse limite de imagem é um portão somente de bytes: a declaração nunca decodifica a imagem para aplicá-lo, e ele se aplica a GIF animado e WebP animado exatamente como a uma imagem estática. O plano padrão não tem limite de armazenamento do produto.
Um limite de armazenamento personalizado, quando presente, é verificado primeiro e uma declaração que ele não pode conter é rejeitada com quota_exceeded antes da transferência de qualquer byte.
Um projeto Standard sem crédito restante é recusado em declare e commit com payment_required quando os bytes armazenados por seu pagador, com este upload, passam de 1000000000 bytes (1 GB, o armazenamento gratuito do Standard); a largura de banda nunca é cobrada.
Uma declaração audio/mpeg (MP3) é limitada a 178257920 bytes, 170 MiB, e uma maior é rejeitada da mesma forma; leia media_audio_bytes para pré-verificação.
Uma declaração video/mp4 ou video/webm é limitada pelo plano do projeto, 500000000 bytes, 500 MB, no Standard e 1000000000 bytes, 1 GB, em todos os outros planos, e uma maior é rejeitada da mesma forma, informando o limite aplicável; leia media_video_bytes de GET /api/project/capabilities para pré-verificação.
Uma mudança de plano afeta apenas declarações posteriores: os vídeos armazenados continuam sendo reproduzidos. Leia media_image_bytes do documento de capacidades para pré-verificar o limite da imagem, e project_content_bytes lá, ou content_limit_bytes no projeto, para saber qualquer teto de armazenamento personalizado. Uma tag opcional é armazenada no objeto de mídia pronto e não é redeclarada no commit.
Um source_filename opcional registra o nome original do arquivo do chamador quando o cliente transcodificou os bytes antes do upload; o nome do arquivo do objeto pronto é então derivado dele para que fontes distintas nunca colidam (photo.png enviado como photo.webp é armazenado como photo.png.webp, photo.jpg como photo.jpg.webp, e uma fonte photo.webp permanece photo.webp).
MediaUploadSession— obrigatórios: id, operation, upload_url, method, headers, expires_atMediaUploadSource— obrigatórios: filename, content_type, sha256, bytesIdentidade original do upload verificada ao ingerir orientação EXIF normalizada. Somente leitura; use para reconhecer tentativas. O resumo, tamanho e tipo da mídia pronta descrevem os bytes de entrega normalizados.
MediaUsage— obrigatórios: playlists, screensMediaUsagePlaylist— obrigatórios: id, name, uses, screen_countMediaUse— obrigatórios: kind, whereUma forma pela qual uma playlist contém ou alcança o arquivo de mídia; uma playlist que faz isso em várias páginas conta como um único uso.
MediaVersion— obrigatórios: number, current, filename, content_type, sha256, bytes, source, created_atMediaVersionActor— obrigatórios: kindMediaVersionPage— obrigatórios: items, next_cursorMediaWarning— obrigatórios: code, detail, playlistsMediaWarningPlaylist— obrigatórios: id, nameMemberActivity— obrigatórios: id, project_id, user_id, display_name, at, kind, action, outcome, status, sourceMemberActivityClient— obrigatórios: kindO cliente conforme o log de requisições edge o nomeia, analisado a partir do User-Agent e Sec-CH-UA-Platform.
MemberActivityKind— obrigatórios: nonesign_in e sign_in_failed carregam auth_method; credential_changed é uma passkey adicionada, renomeada ou removida, uma senha definida, ou uma mudança de e-mail solicitada ou verificada; reauthenticated é uma prova verificada (ação reauthentication.<proof kind>); mutation é qualquer outra alteração no dashboard.
MemberActivityList— obrigatórios: items, next_cursor, recorded_sinceMemberActivityOutcome— obrigatórios: noneok para status abaixo de 400, recusado para resposta 4xx, falha para resposta 5xx.
MemberActivityResource— obrigatórios: typeMemberApproverUpdate— obrigatórios: can_approveMemberScreenScopeUpdate— obrigatórios: screen_scopeMemberUploadScopeUpdate— obrigatórios: upload_scopeNativeIdentityChallenge— obrigatórios: nonce, expires_at, aud, op, request_hashCompare o op retornado e request_hash com seus valores calculados localmente antes de assinar. Cada nonce expira em 120 segundos e pode ser consumido uma vez.
NativeIdentityChallengeRequest— obrigatórios: kid, op, request_hashForneça a operação e seu request_hash para cada desafio. Uma chave desconhecida também requer public_key e op=pairing.start. Criar um desafio não registra a chave.
NativeIdentityProof— obrigatórios: kid, public_key, signatureCabeçalho protegido JWS compacto é exatamente {"alg":"EdDSA"}. Claims são kid, nonce, aud=screenrig-runtime, op, iat/exp inteiro, jti não vazio e request_hash.
Provas contextuais duram no máximo 120 segundos e expiram no máximo na data do desafio emitido. request_hash é SHA-256 hex minúsculo de strings UTF-8 unidas por um NUL, sem NUL final, começando com screenrig.native.identity.request.v1 e op.
Anexa Idempotency-Key para pairing.start e session.mint; anexa a credencial exata srp_ de pareamento e depois completion_nonce para pairing.complete; não anexa nada para identity.reset. Toda prova deve incluir request_hash. Um resultado de operação em cache ainda requer uma prova emitida nova ou a prova exata aceita enquanto seu recibo de curta duração permanece válido.
Membros JWS/JWK duplicados ou desconhecidos, base64url não canônico e chaves fora da ordem prima são rejeitados. Membros desconhecidos no corpo da requisição são ignorados.
NativeIdentitySessionRequest— obrigatórios: kid, public_key, signatureNativeIdentityProof com op=session.mint mais a dica opcional de host. Um host presente SUBSTITUI o host armazenado na tela, pois versões de firmware e shell mudam durante a vida da tela. A dica nunca afeta autorização; apenas a prova assinada o faz.
Membros desconhecidos são ignorados, e host e reprodução são lidos com tolerância (docs/player-compatibility.md §1.1).
NativePairingComplete— obrigatórios: completion_nonce, public_key, signatureNativePairingCompletion— obrigatórios: screen, public_urlNativePairingFleetLink— obrigatórios: statusO que o link da frota apresentada fez para esta sessão de pareamento. reclamado e recuperado significam que a tela já está escolhida, e o Player completa o pareamento sem mostrar seu código. Qualquer outro status deixa o código na tela para uma reivindicação comum.
NativePairingRecovery— obrigatórios: offeredPresente apenas quando o duid host ou serial na solicitação de início correspondeu exatamente a uma tela existente vinculada a uma chave diferente. Não carrega tela, etiqueta ou projeto: a oferta é exibida no lado do projeto como Screen.recovery_pending e o evento screen.recovery_offered, e apenas o projeto proprietário pode confirmá-la.
Está ausente, exatamente como sem correspondência, quando o identificador é ambíguo, quando a chave da tela correspondente mostrou atividade nos últimos dez minutos, ou quando essa tela já recebeu três ofertas na última hora móvel. O código de pareamento ainda é emitido e exibido exatamente como sem correspondência. O player usa isso apenas para registrar pairing.recovery_offered.
NativePairingSession— obrigatórios: code, pairing_credential, expires_atNativePairingStart— obrigatórios: kid, public_key, signatureÉ necessária a prova de posse da chave privada antes da inscrição ou criação do localizador. Assine um novo desafio pairing.start vinculado à exata Idempotency-Key; inícios não assinados são rejeitados. O objeto host opcional é uma dica sobre o dispositivo, não uma credencial; ele é armazenado na tela durante a reivindicação e pode abrir uma oferta de recuperação no lado do projeto.
Membros desconhecidos do corpo são ignorados. A dica de host é lida com tolerância. Uma chave de host desconhecida é ignorada e um campo de host malformado é descartado, nunca recusado (docs/player-compatibility.md §1.1.1).
NativeRuntimeSession— obrigatórios: paired, capabilities, event_cursor, public_url, runtime_credentialSessão nativa de propriedade do tempo de execução (docs/player-compatibility.md §8). Os leitores ignoram membros desconhecidos e valores de capacidades desconhecidas. Um novo membro é enviado apenas para sessões cujas concessões o cobrem.
NextAction— obrigatórios: command, reasonNote— obrigatórios: id, body, about, state, author, created_at, confirmed_at, review_at, expires_at, resolved_at, resolution, dueUma nota do projeto. Contexto escrito por um agente, nunca uma instrução ou aprovação; renderizar o corpo como texto simples.
NoteAbout— obrigatórios: type, idNoteAuthor— obrigatórios: agent_id, name, agent_typeO agente que escreveu como estava quando a nota foi adicionada. Atribuição, nunca autoridade.
NoteCounts— obrigatórios: open, new, dueAs notas abertas do projeto, e quantas são novas e pendentes para este chamador.
NoteList— obrigatórios: items, next_cursor, review, countsNotePage— obrigatórios: items, next_cursorNoteResolution— obrigatórios: cause, reason, byNoteResolve— obrigatórios: reasonNoteResolvedBy— obrigatórios: kind, id, nameQuem resolveu a nota. agent_type está presente para um agente. Atribuição, nunca autoridade.
NoteWrite— obrigatórios: bodyNotification— obrigatórios: id, channel, conditions, screen_tags, hold_minutes, enabled, revision, status, created_at, updated_atA notificação de uma organização, como um projeto ou a organização a lê. Ela cobre todos os projetos da organização ou os escolhidos (project_ids) e age sobre as telas, as fontes, as campanhas e os cartões de cada projeto coberto.
Um projeto lê (e, quando a notificação cobre somente ele, altera) as notificações que o cobrem pelo mesmo id, com seu próprio status e horários de falha; a organização lê a notificação inteira.
Cada condição é rastreada por tela: ela é aberta quando seu evento chega para uma tela do escopo, e um aviso é enviado assim que ela tiver durado hold_minutes e a tela ainda estiver nesse estado; quando ela terminar depois de um aviso ter sido enviado, um aviso de resolução vem em seguida.
Uma condição que termina dentro do tempo de espera não envia nada, e o mesmo vale para uma cujo alerta é reconhecido ou adiado durante a espera e para uma que está em uma tela coberta por um silenciamento.
E-mail: um e-mail por destinatário para tudo o que vence em cerca de dois minutos, listando cada tela e condição, com links para a tela e para esta notificação no painel; os e-mails de notificação são gratuitos.
Cada e-mail de alerta e de teste traz, para a pessoa a quem é endereçado, um link de cancelamento de inscrição (os cabeçalhos List-Unsubscribe e List-Unsubscribe-Post, e o rodapé) que interrompe os e-mails desta notificação só para essa pessoa, sem fazer login; veja unsubscribed.
Webhook: cada aviso é enviado por POST como JSON {type: alert.opened ou alert.resolved, id, notification_id, project_id, condition, screen {id, name}, since, at, event_id, severity}, em que id é o id da entrega, since é quando a condição começou, at é quando ela se manteve tempo suficiente (opened) ou terminou (resolved), event_id é o cursor do evento por trás dela, e severity (info, warning ou error) é a severidade da condição para alert.opened e info para alert.resolved, em toda notificação de webhook.
O aviso de uma campanha também traz reach {published, current} (reach_dropped: as telas que a campanha alcançava quando foi publicada e alcança quando o aviso é enviado) ou audience_group {kind: tag ou folder, value: a tag ou o id da pasta} (group_empty); o e-mail e o chat dizem o mesmo em palavras.
Uma notificação que define min_severity ou severity também o diz no texto de seu e-mail, Slack, Telegram e Teams.
Teams e PagerDuty sempre mostram a severidade efetiva. alert.resolved para screen_offline também traz likely_cause, a causa da queda que terminou (ScreenOutage.likely_cause) ou null quando desconhecida; ele espera até dois minutos depois que a tela volta pelo primeiro relatório de saúde para decidi-la, e um e-mail também a nomeia.
Uma reinicialização é decidida na hora; uma causa de rede ou de plataforma precisa de um relatório de saúde recebido depois que a tela volta, que um Player pode enviar até 15 minutos depois, então um aviso enviado antes traz null e a causa aparece em ScreenOutage.likely_cause e screen.outage_classified.
O e-mail e os canais de chat comunicam três ou mais telas que entram na mesma condição em até cinco minutos e compartilham uma rede, um local, um modelo, uma versão do Player ou uma tag como um único aviso com uma única recuperação (NotificationDeliveryGroup); os avisos das outras telas são ignorados como grouped.
Um webhook continua enviando um aviso por tela. Os event_types são enviados por POST como o mesmo objeto JSON que GET /api/events retorna.
Todo POST traz ScreenRig-Webhook-Id (o ID da notificação), ScreenRig-Event-Id (o ID da entrega para um aviso, o cursor do evento para um evento; estável entre novas tentativas, use-o para eliminar duplicatas), User-Agent e ScreenRig-Signature t=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<raw body>" keyed with the secret string>.
Uma resposta 2xx em até 10 segundos é considerada bem-sucedida; qualquer outro resultado gera novas tentativas com backoff exponencial (de 30 segundos, dobrando até uma hora, com jitter) por 24 horas, e então a entrega falha; as falhas de e-mail seguem o mesmo esquema de novas tentativas.
Os avisos de tela e os eventos screen.* são gratuitos; os demais eventos são medidos como um evento listen-stream. status é failing enquanto nada tiver sido bem-sucedido desde failing_since; após 72 horas de falha contínua, a notificação é desativada (disabled_reason delivery_failures) e notification.disabled é registrado.
NotificationActiveHours— obrigatórios: timezone, windowsQuando os avisos abertos são enviados: as janelas (screenrig.schedule/v1), lidas em timezone. Um aviso que vence enquanto elas estão fechadas espera a próxima abertura (outside hold, o padrão) e é enviado então se sua condição ainda se mantiver, de modo que uma condição que termina antes não envia nada, ou é ignorado (outside drop; last_error outside_hours).
Um aviso de resolvido para um aviso aberto que foi enviado sempre é enviado, dentro do horário ou não, e um teste o ignora. crashing é retido ou descartado como qualquer outra condição. O horário julga um aviso quando ele sai pela primeira vez; um que falhou é repetido no cronograma habitual, qualquer que seja o horário.
Adicionar, alterar ou remover o horário faz com que os avisos retidos pelo antigo sejam julgados de novo na hora.
NotificationCondition— obrigatórios: noneUma mudança importante no estado da tela. screen_offline: o Player perdeu a conexão (screen.offline, gravado 60 segundos após sua presença expirar); termina com screen.online. display_disconnected: o Player informa que seu monitor está desconectado (screen.health_changed change display_disconnected); termina com display_reconnected. running_hot: o dispositivo informa uma temperatura igual ou acima do limite de temperatura alta (temperature_high); termina com temperature_normal. on_battery: o dispositivo tem bateria e seu último relatório de saúde informa a fonte de bateria none, ou seja, desconectado da tomada (screen.health_changed change on_battery); termina quando um relatório informa qualquer outra fonte (plugged_in).
O aviso diz que a tela funciona na bateria e não nomeia nenhuma causa. storage_full: o armazenamento do Player não consegue guardar seu conteúdo (screen.storage_shortfall); termina com screen.storage_shortfall_cleared. content_stuck: a atualização de conteúdo da tela está em estado retrying, failed, blocked ou partial (screen.manifest_upgrade); termina quando um estado posterior não é nenhum desses. not_playing: o Player mostra um status de nível error em vez de seu conteúdo (screen.status_changed com level error, exceto storage_full); termina quando seu status deixa de ser um erro. loop_stalled: o Player não informa nenhum problema e seu conteúdo está atual, mas nenhum início de mídia chegou ao backend por mais tempo do que o loop da tela permite (screen.glass_changed com o veredito de reprodução stalled; Screen.glass diz quando ele julga e o que deixa de lado); termina quando chega um início de mídia ou a tela deixa de ser julgada, por exemplo quando fica offline. glass_blank e glass_frozen: o backend leu as capturas de tela da tela ao longo de uma série que cobre seu loop e todas eram de um único tom liso (glass_blank) ou a mesma imagem (glass_frozen) (screen.glass_changed com o veredito de imagem blank ou frozen; Screen.glass diz quando ele julga e o que deixa de lado); termina quando duas capturas de tela seguidas mostram uma imagem em movimento ou a tela deixa de ser julgada.
Uma tela que deixa de ser julgada fecha o alerta, mas as notificações por e-mail e chat não enviam aviso de recuperação para ela, pois nada foi visto se recuperar (a linha de resolução é ignorada como no_longer_judged); um início de mídia ou duas boas capturas enviam. crashing: o player travou ou reiniciou seu renderizador repetidamente (screen.health_changed change crash_spike ou renderer_restart_spike); enviado imediatamente, sem tempo de espera e nunca resolvido. source_failed e source_stale dizem respeito a uma fonte de dados, não a uma tela: o membro screen do aviso carrega o id e o nome da fonte, o link é a página da fonte, e screen_tags nunca corresponde a uma fonte, então uma notificação restrita a tags não as monitora. source_failed: uma atualização da fonte falhou (source.status_changed com state error); é encerrado na próxima atualização que funcionar (state ok). source_stale: a última boa atualização da fonte é mais antiga que seu stale_after_seconds, o ponto em que os dados de card expiram e as páginas que dependem dela recorrem ao alternativo (source.stale); é encerrado na próxima atualização que funcionar.
Nenhum dos dois é um alerta de tela. reach_dropped e group_empty dizem respeito a uma campanha (um nível compartilhado da pilha de programação), não a uma tela: o membro screen do aviso traz o id e o nome da campanha, o link é o calendário da campanha no painel, e uma campanha pertence ao projeto, portanto screen_tags e audience nunca limitam essas condições. reach_dropped: uma recontagem constatou que a campanha alcança menos telas do que quando foi publicada pela última vez, porque telas saíram de uma de suas tags ou pastas, ou foram arquivadas ou excluídas (campaign.reach_changed com current abaixo de published); reach_drop define o tamanho da queda que é notificada; encerra quando a campanha volta a alcançar o mesmo número de telas.
Uma publicação que define uma nova linha de base, ou a exclusão da campanha, também a encerra, o que fecha um incidente do pager e o alerta de um webhook, mas não envia e-mail nem aviso de chat de recuperação (no_longer_judged). group_empty: uma tag ou pasta do público-alvo da campanha não corresponde a nenhuma tela (campaign.group_changed com matched 0); um aviso por tag ou pasta (audience_group); encerra quando volta a corresponder a uma tela, ou quando uma publicação a remove do público-alvo (removed true), o que fecha um incidente do pager e o alerta de um webhook, mas não envia e-mail nem aviso de chat de recuperação (no_longer_judged).
As entradas de programação próprias de uma tela apontam para playlists, não para telas, portanto somente campanhas têm alcance.
Nenhum dos dois é um alerta de tela. card_data_stale trata de um cartão, não de uma tela: o membro screen do aviso traz o ID do cartão e o nome dele (o tipo do cartão, como em “cartão de clima”), o link é o editor de páginas do dashboard em uma página que posiciona o cartão (a própria página da notificação quando nenhuma o faz), e since é quando os dados dele expiraram.
Ela abre quando o documento de dados de um cartão, que um agente, um job ou uma pessoa gravou com uma expiração (ttl_seconds ou expires_at, como em card data put --ttl), chega a essa expiração sem outra gravação para renová-lo enquanto uma tela mostra o cartão (card.data_expired), de modo que o cartão fica em branco nessa tela; ela fecha quando chega uma gravação nos dados do cartão (card.data_renewed).
Os documentos de uma fonte de dados não são anunciados: eles expiram pelo período de expiração da fonte, que source_stale cobre. Um cartão que nenhuma tela mostra não envia nada, e nem um que foi renovado, excluído ou retirado de todas as telas antes de o aviso vencer.
Excluir os dados de um cartão encerra o aviso sem um aviso de recuperação, como uma publicação encerra uma queda de alcance (no_longer_judged). Dimensione ttl_seconds pelo horário de quem grava, para que um job que parou seja notado. Como uma fonte de dados, um cartão não tem tags de tela: uma notificação limitada a screen_tags não vigia cartões, e não é um alerta de tela.
Quem lê o campo trata um valor desconhecido como ausente.
NotificationConditions— obrigatórios: noneNotificationDelivery— obrigatórios: id, notification_id, event_id, event_type, state, attempts, created_atNotificationDeliveryAttempt— obrigatórios: attempt, at, status, error, duration_msNotificationDeliveryAttemptList— obrigatórios: itemsNotificationDeliveryGroup— obrigatórios: id, attribute, value, countUm grupo de telas que um único aviso representa. Quando pelo menos três telas de um projeto entram na mesma condição com até cinco minutos de diferença e compartilham um valor, uma notificação por e-mail, Slack, Teams, PagerDuty ou Telegram envia um único aviso para elas, em vez de um por tela.
Uma tela que entra na condição depois, com um valor de que o grupo aberto é feito, entra nele sem um novo aviso, e um único aviso diz o grupo quando a última tela se recupera. Uma notificação de webhook continua enviando um aviso por tela.
NotificationDeliveryList— obrigatórios: items, next_cursorNotificationDestination— obrigatórios: noneSomente Slack, Teams, PagerDuty e Telegram; obrigatório para eles. A credencial na forma em que o serviço a emite: slack, a URL do webhook de entrada (hooks.slack.com); teams, a URL do webhook do Workflows (logic.azure.com ou powerplatform.com; as URLs de conector do Office 365 foram aposentadas); pagerduty, a chave de roteamento do Events API v2 de 32 caracteres; telegram, o token do bot.
Outra forma resulta em notification_destination_rejected. Ele é selado, nunca é retornado e aparece nas leituras apenas como destination_hint.
NotificationEventTypes— obrigatórios: noneSomente webhook. Eventos do projeto também enviados por POST à medida que acontecem, exatamente como um webhook os envia: tipos exatos, como screen.online, ou prefixos terminados em .*, como screen.*. notification.test nunca é distribuído.
NotificationList— obrigatórios: itemsNotificationPatch— obrigatórios: noneNotificationProjectIDs— obrigatórios: noneProjetos ativos da organização, cada um nomeado uma vez. Uma lista vazia não cobre nenhum.
NotificationReachDrop— obrigatórios: noneA menor queda no alcance de uma campanha para a qual um aviso reach_dropped é enviado: screens é o menor número de telas perdidas (padrão 1) e percent, quando definido, a menor parcela das telas que a campanha alcançava quando foi publicada; uma queda precisa atender aos dois.
Uma queda menor não enfileira aviso, e um aviso enfileirado cuja queda diminuiu abaixo do limite até a hora do envio é ignorado (condition_cleared). Somente com a condição reach_dropped; em uma notificação sem ela, invalid_request.
NotificationRecipients— obrigatórios: noneSomente para e-mail. owner (quem for o proprietário do projeto no momento em que um aviso é enviado) ou o user_id de uma pessoa que seja membro do projeto; um user_id que não seja de um membro retorna invalid_request. Cada um recebe o e-mail no endereço verificado. Quem já saiu do projeto ou não tem endereço verificado é ignorado.
NotificationSeverity— obrigatórios: noneA severidade de um aviso, da menos severa para a mais severa. Um aviso aberto tem a severidade de sua condição: error para screen_offline e warning para toda outra condição, a menos que a severidade da notificação diga o contrário. Um aviso de resolvido e um teste são info.
NotificationSeverityOverrides— obrigatórios: noneCondição para severidade nesta notificação, como {"not_playing": "error"}. Conta para min_severity e é a severidade que Teams e PagerDuty mostram para a condição. Uma condição não listada mantém seu padrão. Em um patch, um objeto vazio, como null, limpa todas as sobrescritas.
NotificationTelegramChat— obrigatórios: noneSomente Telegram; obrigatório para ele. O chat em que publicar: o id numérico dele (negativo para um grupo ou canal) ou @channelname. Não é uma credencial.
NotificationUnsubscription— obrigatórios: user_id, atNotificationWrite— obrigatórios: channelemail envia aos destinatários, webhook faz POST assinado para url, e slack, teams, pagerduty e telegram publicam uma mensagem por queda e por tela em um chat ou pager com o destination somente de escrita (telegram também precisa de telegram_chat_id), depois uma recuperação; o PagerDuty abre um incidente e o resolve. Eles precisam de pelo menos uma condição e não aceitam event_types.
OAuthAuthorization— obrigatórios: id, client_name, client_registered, redirect_host, access, capabilities, created_at, expires_atOAuthAuthorizationRedirect— obrigatórios: redirect_uriOAuthError— obrigatórios: errorOAuthTokenResponse— obrigatórios: access_token, token_type, expires_inOnboardingSiteCTA— obrigatórios: label, path, href, atO link de cadastro ou de login em que a pessoa clicou no site.
OnboardingSiteVisit— obrigatórios: path, atOnboardingStepName— obrigatórios: noneUma etapa dos fluxos de entrada, em ordem de exibição. email_verified, email_gate_reached e os marcos da conta (agent_connected, screen_paired, playlist_with_content, activated) são gravados ou incorporados pelo servidor e não são nomes que um cliente envia.
OnboardingStepRequest— obrigatórios: journey_id, stepOnboardingValue— obrigatórios: noneO que a pessoa informou em uma etapa: o endereço digitado (email_submitted, reset_requested), o nome (signup_name_entered), sim ou não (signup_marketing_choice), as opções escolhidas ou o texto de acompanhamento (question_answered, question_follow_up), um endereço ou nome informado em um convite. Nunca uma senha, código ou token. Vazio equivale a ausente.
Operation— obrigatórios: id, kind, state, created_at, updated_atOperationAccepted— obrigatórios: id, release_id, operation_idOrganizationAdminInvitation— obrigatórios: id, kind, delivery, status, recipient_email, organization_id, created_at, expires_atOrganizationAdminInvitationCreate— obrigatórios: emailsOrganizationAdminInvitationCreated— obrigatórios: invitationsOrganizationAdminInvitationList— obrigatórios: items, next_cursorOrganizationAdmins— obrigatórios: admins, candidates, revisionOrganizationAdminsUpdate— obrigatórios: admin_user_idsOrganizationBillingUsage— obrigatório: org_id, period, pool, allowance, stored_bytes, screens, projects, next_cursorOrganizationDomainChallenge— obrigatórios: organization_id, challenge_id, domain, name, value, expires_atOrganizationDomainInput— obrigatórios: domainOrganizationDomainProof— obrigatórios: challenge_idOrganizationDomainRemoved— obrigatórios: statusOrganizationGuestPolicy— obrigatórios: mode, domainsA política de convidados da organização em vigor. Convidados são pessoas cuja organização principal é outra ou que não têm nenhuma; uma política nunca remove quem já é membro.
OrganizationGuestPolicyDomain— obrigatórios: noneUm nome DNS em minúsculas com pelo menos dois rótulos, como aparece depois do @ de um endereço de e-mail verificado (nomes internacionalizados na forma xn--).
OrganizationGuestPolicyMode— obrigatórios: noneallow admite todos os convidados. domains admite um convidado cujo endereço de e-mail verificado está em um dos domínios listados (correspondência exata). none não admite nenhum convidado. Membros da organização nunca são convidados.
OrganizationGuestPolicyResult— obrigatórios: mode, domains, outside_policyA política de convidados agora em vigor, com o número de pessoas que ela deixa de fora.
OrganizationGuestPolicyUpdate— obrigatórios: modeOrganizationLibraryUpdate— obrigatórios: project_idOrganizationList— obrigatórios: organizations, new_organization_allowedOrganizationMemberInvitation— obrigatórios: id, kind, delivery, status, recipient_email, organization_id, created_at, expires_atOrganizationMemberInvitationCreate— obrigatórios: emailsOrganizationMemberInvitationCreated— obrigatórios: invitationsOrganizationMemberInvitationList— obrigatórios: items, next_cursorOrganizationNotificationList— obrigatórios: itemsOrganizationNotificationPatch— obrigatórios: noneUm NotificationPatch e project_ids.
OrganizationNotificationWrite— obrigatórios: channelUm NotificationWrite e os projetos que a notificação cobre. project_ids ausente ou null cobre todos os projetos da organização, inclusive os adicionados depois; uma lista cobre exatamente esses projetos, cada um um projeto ativo da organização.
OrganizationPayments— obrigatórios: organization_id, available, local_simulation, purchasesOrganizationPeople— obrigatórios: projects, people, truncatedOrganizationPeopleMembership— obrigatórios: project_id, role, can_approveOrganizationPeoplePerson— obrigatórios: user_id, display_name, email, admin, member, managed, outside_guest_policy, projectsOrganizationPeopleProject— obrigatórios: project_id, nameOrganizationPerson— obrigatórios: user_id, display_name, emailOrganizationPersonal— obrigatórios: noneA organização é apenas o invólucro de seu único projeto: exatamente um projeto ativo, nenhum domínio verificado, nenhum plano de organização agora ou agendado, e nenhum admin além do proprietário desse projeto. O dashboard oculta o nível da organização para ela.
OrganizationProject— obrigatórios: id, name, organization_id, status, screen_countOrganizationProjectAccess— obrigatórios: project_id, joinedOrganizationProjectAccessChange— obrigatórios: project_id, user_id, accessOrganizationProjectAccessRequest— obrigatórios: changesOrganizationProjectAccessResult— obrigatórios: changesOrganizationProjectOwner— obrigatórios: project_id, owner_user_idOrganizationProjectOwnerUpdate— obrigatórios: user_idOrganizationProjectPage— obrigatórios: projects, next_cursorOrganizationRename— obrigatórios: nameOrganizationSummary— obrigatórios: id, name, personalOrganizationView— obrigatórios: id, name, personal, revision, admin, home, project_count, plan_id, free, plan_required, education_eligible, education_eligibility_sourcePageDataCondition— obrigatórios: keyUm predicado card-data, avaliado antes do tempo civil. Dados faltantes ou expirados nunca correspondem. A página também respeita seus limites de tempo ordinários. Requer capacidade host page.conditions; hosts mais antigos recebem a página desativada.
PageFailure— obrigatórios: page_id, code, atÚltimo relatório aceito playback.page_failed para esta tela. Ausente até que um player reporte um. Metadados de saúde do projeto somente leitura; não altera a revisão da tela ou autoridade do manifesto.
PageVisibility— obrigatórios: enabledProgramação opcional de visibilidade da página. É um irmão de advance e nunca faz parte de screenrig.canvas/v1; descreve orquestração de reprodução, não geometria. O servidor valida e carrega essas regras como dados. O player as avalia contra o fuso horário da tela publicado na raiz do manifesto.
Uma página é elegível quando enabled é true, agora está dentro de [from, until), e ou windows está ausente ou pelo menos uma janela corresponde. Cada playlist deve manter pelo menos uma página sem campo de visibilidade, para que conteúdo elegível sempre exista. Vetores de conformidade para as regras de avaliação são a família screenrig.schedule/v1 em packages/schedule-contract.
PageVisibilityWindow— obrigatórios: daysUma janela civil recorrente. Omitir início e fim seleciona o dia inteiro. Quando fim é menor ou igual a início, a janela atravessa a meia-noite e o dia de início a possui, então sex 22:00 a 02:00 vai até a manhã de sábado.
PairScreen— obrigatórios: codePairingClaim— obrigatórios: screen, public_urlPairingClaimedEvent— obrigatórios: type, completion_noncePairingComplete— obrigatórios: completion_noncePairingCompletion— obrigatórios: screen, public_urlPairingSession— obrigatórios: code, expires_atPasskeyAdditionProof— obrigatórios: authorization_ceremony_id, authorization_credentialPlaybackAggregate— obrigatórios: screen_id, media_id, filename, day, play_count, last_page_id, last_manifest_revision, first_started_at, last_started_atPlaybackAggregateCsv— obrigatórios: noneCSV RFC 4180, registros CRLF, UTF-8, com a linha de cabeçalho screen_id,media_id,filename,primitive,day,play_count,last_page_id,last_manifest_revision,first_started_at,last_started_at. Os horários são RFC 3339 UTC. Uma célula que começa com =, +, -, @, tab ou retorno de carro é prefixada com uma aspa simples para que planilhas não a avaliem.
Content-Disposition nomeia playback-aggregates.csv. Um fluxo que falha após o cabeçalho é abortado na conexão.
PlaybackAggregateList— obrigatórios: itemsPlaybackApplicationStartedContext— obrigatórios: manifest_revision, page_id, primitive_id, release_idPlaybackApplicationStartedReport— obrigatórios: severity, code, contextUm início visível de um primitivo de aplicativo em uma página: o aplicativo ficou visível na tela, reportado uma vez por aparição da página pelo controlador do Player — o conteúdo do aplicativo nunca reporta sua própria visibilidade, e um download de pacote nunca é um início.
A tela remetente está autenticada; identidades de página, primitiva, release e manifesto são observações relatadas sem conteúdo ou verificações de associação de concessão. Armazena um registro durável por reprodução (GET /api/playback/plays). Marcas temporais de manutenção de release/aplicativo pertencentes ao projeto seguem por uma projeção em lote recuperável.
Reconhecimentos comuns de reprodução omitem cabeçalhos opcionais de saldo de créditos. Não há linha agregada diária para inícios de aplicativo; os registros de reprodução são a evidência.
PlaybackCompleteness— obrigatórios: day_from, day_to, measured_plays, missing_plays, completeness, days, gaps, truncatedQuantas das reproduções feitas pelas telas chegaram ao backend, nos dias UTC de day_from a day_to, inclusive. measured_plays e missing_plays são as somas de days, e completeness é measured_plays dividido pela soma dos dois, null quando ambos são 0. days lista, mais antigos primeiro, apenas os dias com alguma reprodução medida ou ausente. gaps lista as lacunas na numeração das reproduções, mais recentes primeiro.
Reproduções sem número (players mais antigos, inícios armazenados antes dos números de reprodução) não entram em nenhum destes números.
PlaybackCompletenessDay— obrigatórios: day, measured_plays, missing_plays, completenessA numeração das reproduções de um dia UTC de recebimento.
PlaybackGap— obrigatórios: screen_id, day, from, to, missing_playsUma sequência de números de reprodução que um player pulou: essa quantidade de reproduções foi feita e nunca chegou.
PlaybackGrant— obrigatórios: noneO handshake de reprodução que o backend concedeu: a interseção do PlaybackHandshake da mint e o que este backend suporta, conectado na sessão. Omitido da sessão quando nada intersecta, então uma sessão criada sem handshake permanece inalterada. Um Player usa /screen/manifest somente quando manifest_versions contém 3.
PlaybackHandshake— obrigatórios: noneHandshake opcional de reprodução que um Player declara no mint. É uma dica que seleciona comportamento, nunca autorização: membros desconhecidos e entradas do tipo errado são ignorados, e um valor que não é objeto não negocia nada. A resposta mint ecoa a interseção suportada como PlaybackGrant. adslot-v1 é concedido apenas a sessões pareadas.
PlaybackMediaStartedContext— obrigatórios: media_id, manifest_revision, page_id, primitivePlaybackMediaStartedReport— obrigatórios: severity, code, contextUm início visível de um primitivo de imagem ou vídeo em uma página. Players enviam isso uma vez por aparição da página da mídia, para imagens exatamente como para vídeos; loops dentro de uma aparição não são reinícios. A tela que envia é autenticada; identidades de mídia, página, primitivo e manifesto são observações sem conteúdo ou verificações de associação de concessão.
Sucesso reconhece inserção bruta durável; contagens diárias seguem por meio de uma projeção em lote recuperável. Reconhecimentos comuns de reprodução omitem cabeçalhos opcionais de saldo de créditos.
PlaybackPageFailedContext— obrigatórios: page_id, codePlaybackPageFailedReport— obrigatórios: severity, code, contextRelata que uma página não pôde ficar pronta. Ao aceitar, o servidor substitui Screen.last_page_failure e adiciona um evento playback.page_failed durável apenas do projeto na mesma transação. Não altera a revisão da tela nem a autoridade do manifesto.
PlaybackPlay— obrigatórios: screen_id, page_id, media_id, primitive, received_atUm início durável relatado pelo Player de uma imagem, vídeo ou aplicativo.
A sessão autentica tela e projeto; identidades de item, página, manifesto, primitiva e release são observações relatadas e não autorizam acesso ao conteúdo. playlist_id e playlist_revision são metadados opcionais enriquecidos assincronamente a partir de um manifesto de tela correspondente; metadados ausentes permanecem ausentes.
Inícios de aplicativo carregam release_id com media_id e primitive vazios. primitive_id e started_at existem só quando o Player os reporta; started_at é limitado a [received_at - 24h, received_at + 5m].
Uma página JSON também nomeia sua tela, mídia, playlist e aplicativo como texto de exibição lido quando a página é servida; a exportação CSV e os relatórios xlsx e pdf omitem esses nomes.
PlaybackPlayCsv— obrigatórios: noneCSV RFC 4180, registros CRLF, UTF-8, com a linha de cabeçalho screen_id,playlist_id,page_id,primitive_id,media_id,primitive,started_at,received_at,manifest_revision,playlist_revision nessa ordem fixa; um valor ausente é uma célula vazia. Os horários são RFC 3339 UTC. Uma célula que começa com =, +, -, @, tab ou retorno de carro é prefixada com uma aspa simples.
Content-Disposition nomeia playback-plays.csv. Uma exportação completa termina após seu último registro CRLF sem trailer; um fluxo que falha após o cabeçalho é abortado na conexão (o cliente vê um erro de transporte, nunca um fim limpo), então tente novamente a partir do último received_at.
PlaybackPlayList— obrigatórios: items, next_cursorPlaybackTotals— obrigatórios: by, day_from, day_to, truncatedTotais de reprodução pelos dias UTC inclusivos day_from a day_to. Exatamente um de days (by=day), screens (by=screen), media (by=media) ou screen_days (by=screen_day, agrupado por tela em ordem de ranking, dias em ordem crescente) está presente, o que a solicitação nomeou. truncated é true quando um ranking pode deixar de fora chaves que ficaram abaixo do melhor de uma fatia ou loja.
PlaybackTotalsDay— obrigatórios: day, play_count, first_started_at, last_started_atPlaybackTotalsMedia— obrigatórios: media_id, play_count, first_started_at, last_started_atPlaybackTotalsScreen— obrigatórios: screen_id, play_count, first_started_at, last_started_atPlaybackTotalsScreenDay— obrigatórios: screen_id, day, play_countPlaybackVideoStartedContext— obrigatórios: media_id, manifest_revision, page_idPlaybackVideoStartedReport— obrigatórios: severity, code, contextRelatar um início de vídeo visível. Isso usa a mesma agregação diária que playback.media_started com vídeo primitivo. Envie um relatório por início; enviar ambos os tipos de evento conta o início duas vezes. Use playback.media_started ao relatar imagens e vídeos.
PlayerBrowserIdentity— obrigatórios: kind, version, pwaMotor do navegador e modo de instalação para Players de navegador, incluindo shells nativos. Uma dica opcional malformada do navegador é descartada sem rejeitar a emissão.
PlayerCardsIdentity— obrigatórios: noneA biblioteca de cartões embutida que o Player carrega (docs/player-compatibility.md §3.1): a versão da biblioteca CalVer e o semver de cada cartão, cujo major indica quais posicionamentos de cartão a tela renderiza. Entradas malformadas são descartadas uma a uma; nunca é um 400.
PlayerIdentity— obrigatórios: kindAutoidentificação do Player, enviada apenas nas três rotas mint (docs/player-compatibility.md §3.1). É uma dica e nunca uma autorização, e não está coberta pela prova nativa. É lida com tolerância: membros desconhecidos são ignorados, um membro opcional inválido é descartado sozinho, e um player que não é um objeto ou não tem tipo válido não declara nada.
Nunca é um 400. Um mint pareado o armazena na tela para o histograma da frota do operador.
PlayerPublicKey— obrigatórios: kty, crv, xPlayerShellIdentity— obrigatórios: kindO shell sob o qual um Player web roda. Seus tokens de compatibilidade são registrados, nunca concedidos. Um tipo inválido descarta o shell.
Playlist— obrigatórios: id, name, revision, pagesPlaylistAdvance— obrigatórios: nonePlaylistAdvanceWrite— obrigatórios: nonePlaylistApplicationAdvance— obrigatórios: mode, max_msPlaylistApplicationPrimitive— obrigatórios: id, primitive, release_id, rect, layer, content_fitPlaylistApplicationPrimitiveWrite— obrigatórios: id, primitive, release_id, layer, content_fitPlaylistApproval— obrigatórios: state, review_idPresente enquanto uma revisão desta playlist está pendente. A própria playlist é a versão ao vivo (aprovada).
PlaylistAudio— obrigatórios: tracks, loop, volumeTrilha sonora da playlist armazenada com padrões preenchidos.
PlaylistAudioCue— obrigatórios: trackDica opcional de trilha sonora em uma página comum. Quando a página se torna atual, o Player muda para a faixa nomeada desde o início, a menos que já esteja tocando; restart true a reinicia mesmo assim. A sequência continua dessa faixa.
Players podem ignorar uma dica. track deve nomear um ID de faixa no áudio da playlist; um cue sem áudio de playlist é invalid_request. Não permitido em páginas de adslot. Uma página com modo avançado audio_end termina quando a faixa marcada termina; requer esse cue.
PlaylistAudioEndAdvance— obrigatórios: mode, max_msPlaylistAudioEndAdvanceWrite— obrigatórios: modeA página termina quando a faixa da trilha sonora que seu audio_cue nomeia termina. A página deve carregar um audio_cue e a playlist uma trilha sonora de áudio (docs/playlist-audio.md).
PlaylistAudioTrack— obrigatórios: id, media_idPlaylistAudioWrite— obrigatórios: tracksTrilha sonora opcional da playlist: mídia de áudio pronta ordenada (MP3) que toca continuamente enquanto as páginas mudam (docs/playlist-audio.md). Mudanças de página nunca param ou reiniciam. PUT substitui toda a playlist, então omitir áudio remove a trilha sonora.
PlaylistCanvas— obrigatórios: width, height, backgroundPlaylistCardPrimitive— obrigatórios: id, primitive, card, major, params, rect, layer, content_fit, controllerPlaylistCardPrimitiveWrite— obrigatórios: id, primitive, card, layout, content_fitUm cartão embutido que o Player desenha nativamente (relógio, clima, menu, ticker, blocos KPI e o resto do catálogo de cartões fornecidos, screenrig.cards.contract/v1). layout o posiciona: full (toda a tela), free (seu próprio retângulo e camada), center (900 x 420), wide (a tela com recuo de 30 da esquerda e direita e 80 do topo e fundo), header (toda a borda superior, 80 de altura), footer (toda a borda inferior, 80 de altura), corner (270 quadrado), chip (240 x 70) ou strip (toda a borda, 120 de altura), em unidades de design 1080p escaladas por min(largura da tela, altura da tela) / 1080. corner e chip tomam um canto âncora (superior esquerdo, superior direito, inferior esquerdo, inferior direito) e strip uma borda âncora (topo, fundo, esquerda, direita); os outros layouts não tomam nenhum.
Exceto para free, o servidor deriva rect e layer do canvas, ou dos displays do frame cover: omita-os ou envie exatamente o que ele deriva.
Uma página contém no máximo um cartão full, center ou wide, um cartão corner ou chip por canto, e uma faixa por borda (um cartão com presença pode compartilhar uma borda com uma faixa normal); um cabeçalho ocupa a faixa normal da borda superior e um rodapé a da borda inferior, então uma página contém no máximo um de cada, sem faixa normal nessa borda, e um cartão com presença ainda pode compartilhá-la.
Um canto ou lasca em uma borda que segura uma tira se move além dela por 120, e além de um cabeçalho ou rodapé por 80.
Em uma playlist com formato, displays é o quadro do qual o layout deriva (full é o quadro, corner o canto do quadro; free recusa displays), a escala do cartão é o min(largura, altura) do tile / 1080 = 1 em vez de derivado do quadro, e dois cartões competem por um slot, ou se movem além das faixas um do outro, somente quando seus quadros compartilham um display (sem displays é todo display).
O nível de um card define seus layouts (GET /api/card-types): core aceita os nove, fullscreen aceita full. params guarda as propriedades estáticas do posicionamento (tema, localização, títulos, definições de colunas) e só muda com uma nova publicação.
Uma string em params pode conter {screen.name}, {screen.timezone} e {screen.field.NAME}, e um parâmetro de localização pode ser a string {screen.location}; o backend os expande para cada tela, de modo que uma única playlist mostra a cada tela os seus próprios valores. data nomeia um documento de dados do card (GET/PUT /api/card-data/{key}) que guarda as propriedades dinâmicas do card (seções de cardápio, itens de ticker, blocos de KPI); os agentes o alteram sem nova publicação. {screen.field.NAME} em uma chave de dados lê um documento por tela, por exemplo menu-{screen.field.store_number}.
Com dados, params não podem conter propriedades dinâmicas; sem eles, params contém toda a configuração. Toda string em params que começa com media: é uma referência de mídia, media:<id>, nomeando uma imagem pronta neste projeto que o cartão desenha (destaque pessoas[].photo, grade de produtos products[].photo); um cartão nunca usa uma URL de imagem.
Publicar recusa um cartão desconhecido ou parâmetros principais inválidos (card_invalid), um layout, âncora, retângulo ou camada que o cartão não pode carregar (card_layout_invalid), cartões que reivindicam um lugar na página (card_layout_conflict), uma referência de mídia que não nomeia nenhuma imagem pronta do projeto (card_media_invalid) e uma chave vinculada cujo documento armazenado o cartão rejeita (card_data_invalid).
As telas que exibem a colocação recebem sua mídia, e uma escrita ao vivo aprova a mídia pendente que nomeia, como com um seletor by:id. Um cartão com um feed de terceiros (clima) o lê da chave que o servidor deriva de seus parâmetros estáticos.
PlaylistCreateRequest— obrigatórios: noneAs páginas de uma playlist, um modelo a partir do qual criá-la, ou o modelo inicial integrado.
PlaylistDisplays— obrigatórios: noneSomente playlists com formato. Os monitores que uma primitiva cobre: números de monitor únicos, ascendentes e baseados em 1, dentro de 1..format.displays, que preenchem um retângulo dos blocos da parede, como [2], [1, 2] ou, em uma grade de 4 colunas, [2, 3, 6, 7]. Em uma linha ou em uma coluna, são contíguos.
O servidor deriva rect como a caixa delimitadora desses blocos; rect é omitido ou exatamente o valor derivado. Armazenado e retornado na leitura.
PlaylistDurationAdvance— obrigatórios: mode, after_msPlaylistExpandRequest— obrigatórios: nonePlaylistExpanded— obrigatórios: pagesPlaylistFormat— obrigatórios: nonePara o que uma playlist é criada: um videowall (PlaylistWallFormat) ou uma região (PlaylistRegionFormat), nunca ambos. Uma playlist sem formato é uma playlist comum que se vincula a qualquer tela como a página.
PlaylistFromTemplate— obrigatórios: playlist_idCria uma playlist a partir de um modelo: as suas páginas atuais com os valores preenchidos, validadas por todas as regras de playlist. Um valor de mídia deve ser uma mídia pronta do tipo certo; um valor de endereço, um endereço http ou https.
PlaylistFromTemplateWrite— obrigatórios: name, from_templateCria uma playlist a partir de um modelo. Envie só name e from_template.
PlaylistIframePrimitive— obrigatórios: id, primitive, src, title, rect, layer, content_fit, controllerPlaylistIframePrimitiveWrite— obrigatórios: id, primitive, src, title, layer, content_fitPlaylistImagePrimitive— obrigatórios: id, primitive, selector, resolved_media, rect, layer, content_fit, controllerPlaylistImagePrimitiveWrite— obrigatórios: id, primitive, selector, layer, content_fitPlaylistInstance— obrigatórios: id, name, revision, template_revision, outdatedPlaylistInstanceList— obrigatórios: itemsPlaylistIntrinsicSize— obrigatórios: width, heightPlaylistList— obrigatórios: itemsPlaylistMediaEndAdvance— obrigatórios: mode, max_msPlaylistMediaEndAdvanceWrite— obrigatórios: modePlaylistMediaSelector— obrigatórios: nonePlaylistMediaSelectorByAll— obrigatórios: byPlaylistMediaSelectorByFolder— obrigatórios: by, folder_idOs arquivos prontos do primitivo diretamente dentro de uma pasta de mídia (GET /api/media-folders), não os de suas subpastas, ordenados e espaçados como por:all. Como uma tag, a pasta é lida novamente a cada resolução do seletor, então mover arquivos para dentro ou fora altera o que as telas em reprodução mostram no próximo ciclo.
Escrever uma playlist requer que a pasta exista no projeto; ela pode estar vazia. Uma pasta que não contém arquivo pronto do primitivo, ou é excluída depois, não corresponde a nada. Os players a recebem como by:all; o servidor resolve a pasta.
PlaylistMediaSelectorByID— obrigatórios: by, media_idPlaylistMediaSelectorByIDs— obrigatórios: by, media_idsPlaylistMediaSelectorByTag— obrigatórios: byPlaylistPage— obrigatórios: id, canvas, transition, advance, primitivesPlaylistPageAdd— obrigatórios: pagePlaylistPageStructure— obrigatórios: idUma página que permanece, e as duas configurações de página que uma pessoa altera. advance substitui o avanço da página quando presente e o mantém quando omitido; uma página de slot de anúncio não tem. visibility substitui a visibilidade da página quando é um objeto, remove-a quando nulo e a mantém quando omitido.
Um objeto de visibilidade que só define enabled true é uma operação nula e é rejeitado: envie null para remover as regras.
PlaylistPageV2— obrigatórios: nonePlaylistPageWrite— obrigatórios: id, canvas, transition, advance, primitivesPlaylistPageWriteV2— obrigatórios: nonePlaylistPatch— obrigatórios: noneCampos omitidos são preservados. Nome, páginas, áudio e formato fornecidos substituem esses valores de nível superior; áudio ou formato nulo remove-os. Páginas fornecidas são verificadas contra o formato armazenado quando o formato é omitido, e um formato fornecido contra as páginas armazenadas quando as páginas são omitidas. Identidade, revisão, comentários e carimbos de data/hora não podem ser definidos aqui.
Comentários têm seus próprios endpoints.
PlaylistPrimitive— obrigatórios: nonePlaylistPrimitiveLocked— obrigatórios: noneUma primitiva bloqueada é conteúdo fixo da marca de um modelo (logotipo, fundo, layout, tema): só o proprietário do projeto ou um membro que possa aprovar a adiciona, remove, move ou edita, ou remove o seu bloqueio, e uma playlist criada a partir do modelo a mantém bloqueada. Se omitida, não está bloqueada. Uma primitiva bloqueada não pode ler um campo.
Uma gravação de qualquer outra pessoa é primitive_locked (403), ou uma revisão com Propose.
PlaylistPrimitiveWrite— obrigatórios: nonePlaylistRect— obrigatórios: x, y, width, heightPlaylistRegionFormat— obrigatórios: region, orientationUma faixa desenhada sobre a página ao longo de uma borda de um display: header no topo, footer na base, side na borda direita em altura total. orientation é a orientação do display para o qual ela é feita, como o espectador a vê após a rotação.
Todas as páginas têm o mesmo canvas (width e height); um header ou footer é mais largo que alto e um side é mais alto que largo, com o lado maior com pelo menos o dobro do menor, caso contrário 400 invalid_request em pages[i].canvas.
A playlist contém apenas primitivas de imagem e de cartão (uma página de vídeo, stream, iframe, aplicativo ou slot de anúncio é recusada) e não tem trilha sonora (áudio é recusado); uma primitiva não nomeia displays.
Uma playlist de região nunca é padrão de tela, padrão de pasta nem takeover: ela é reproduzida como entrada de programação ou campanha com covers definido para a sua região (covers main e a página inteira a recusam), e covers header, footer ou side exige uma playlist de região dessa região.
A entrada ou a campanha é recusada com 409 playlist_format_mismatch quando a faixa não está organizada em nenhum dos displays que ela atinge: uma faixa é organizada em um display da sua orientação, avaliada na superfície que o Player informa após a rotação (a rotação do videowall da tela quando ele não informou nenhuma), e apenas enquanto cobrir no máximo metade do display (sua altura para um header ou footer, sua largura para um side).
Uma campanha só é recusada quando não está organizada em nenhuma das telas do seu público-alvo; em uma tela de um público misto onde não está, a campanha sai da pilha dessa tela e a explicação diz region_not_laid_out.
Uma mudança de formato que move uma playlist para dentro ou para fora de uma região, ou para outra região, é recusada com 409 resource_conflict enquanto uma programação de tela, um takeover ou padrão, um padrão de pasta ou uma campanha a usar.
PlaylistResolvedMedia— obrigatórios: media_id, intrinsic_sizePlaylistRevision— obrigatórios: revision, created_at, change, name, page_count, currentOne stored revision of a playlist. change says what made it: created (the first revision), edited (a replace, patch, structure change or applied review), promoted (a copy of an earlier revision, named by restored_from), or baseline (the revision the playlist held when its history began, before any write recorded one).
Um valor que este leitor não conhece é lido como edited.
PlaylistRevisionAuthor— obrigatórios: type, nameQuem fez a revisão, como o log de eventos do projeto os nomeia; ausente quando a gravação não nomeou ninguém (uma linha de base ou trabalho do sistema).
PlaylistRevisionDetail— obrigatórios: revision, playlistPlaylistRevisionList— obrigatórios: itemsPlaylistStarterWrite— obrigatórios: starterAdiciona o modelo integrado Aviso urgente (um título e uma mensagem). Envie só starter e, se quiser, name.
PlaylistStinger— obrigatórios: noneUm cartão stinger apenas de transição (major 1). Todos os membros são opcionais; os padrões permanecem na colocação sintética em tempo de execução. hang_ms padrão é 1000 e é no máximo 60% da transição duration_ms (verificado pelo servidor). logo nomeia uma imagem pronta neste projeto, usando o caminho de concessão de mídia do cartão.
PlaylistStreamPrimitive— obrigatórios: id, primitive, sources, fallback_media_id, rect, layer, content_fit, muted, controller, resolved_mediaPlaylistStreamPrimitiveWrite— obrigatórios: id, primitive, sources, fallback_media_id, layer, content_fitPlaylistStructurePatch— obrigatórios: noneA estrutura de uma playlist e nada que uma página mostre (patchPlaylistStructure). Membros omitidos são mantidos. Um nome fornecido substitui o nome. Páginas fornecidas são a nova ordem completa das páginas da playlist: uma página armazenada omitida é removida.
Conteúdo da página (canvas, transição, audio_cue, primitivos, comentários) e a trilha sonora não podem ser enviados e são sempre os armazenados.
PlaylistTemplateField— obrigatórios: name, label, typeUm valor que um modelo recebe. As páginas o leem como {field.NAME}: nos params de um cartão (campos de texto e de endereço), como media_id do seletor de uma imagem ou de um vídeo (campo de mídia) ou como src inteiro de um iframe (campo de endereço).
PlaylistTemplateFields— obrigatórios: noneDeclarar campos torna a playlist um modelo. Cada marcador lido por uma página deve nomear um campo declarado do tipo certo e cada campo deve ser lido; uma playlist sem campos não lê marcadores. Um modelo nunca é exibido em uma tela (playlist_is_template). Um PUT sem fields os mantém; null ou um array vazio os remove.
PlaylistTransition— obrigatórios: type, duration_msTransição da página. type e duration_ms são ambos obrigatórios; OpenAPI não define padrão. Exemplos de autoria de swipe usam duration_ms 600; esse valor não é padrão do esquema.
PlaylistV2— obrigatórios: id, name, revision, pagesPlaylistV2List— obrigatórios: itemsPlaylistValuesChange— obrigatórios: valuesPlaylistVideoPrimitive— obrigatórios: id, primitive, selector, resolved_media, muted, loop, rect, layer, content_fit, controllerPlaylistVideoPrimitiveWrite— obrigatórios: id, primitive, selector, layer, content_fitPlaylistWallFormat— obrigatórios: displays, arrangement, orientationO vídeo wall para o qual uma playlist é criada: de 2 a 12 displays, tiles de 1920 x 1080 (paisagem) ou 1080 x 1920 (retrato), dispostos em uma linha, uma coluna ou uma grade. Uma linha tem os displays como colunas e uma linha, uma coluna tem uma coluna e os displays como linhas, uma grade tem suas colunas e displays / colunas linhas.
O display n fica na coluna (n - 1) mod columns e na linha floor((n - 1) / columns): da esquerda para a direita, depois de cima para baixo.
A tela de c colunas e r linhas de tiles de largura w e altura h é (c * w, r * h), por exemplo 5760 x 1080 para 3 monitores paisagem em linha, 1080 x 3840 para 2 monitores retrato em coluna e 7680 x 3240 para 12 monitores paisagem em uma grade de 4 colunas.
A largura e altura da tela de cada página comum devem ser exatamente iguais, caso contrário, erro 400 invalid_request em pages[i].canvas. A escala do cartão em tal playlist é o mínimo entre largura e altura do tile dividido por 1080 = 1.
Uma playlist com formato pode vincular-se apenas a uma tela cuja parede tem a mesma forma (displays = número de saídas, arranjo, colunas, retrato se e somente se a rotação for 90 ou 270), caso contrário 409 playlist_format_mismatch: atribuição, atribuição da frota, entradas de programação e takeover. Uma playlist sem formato vincula-se a qualquer tela.
PlaylistWarning— obrigatórios: code, message, page_id, primitive_idAlgo em que o autor de uma escrita bem-sucedida deve agir. A escrita armazenou o que trazia; um aviso nunca a faz falhar. Uma escrita de playlist responde com avisos na playlist; uma escrita de tela (updateScreen, as rotas de fields, location e playlist do dashboard) na tela; uma atribuição em frota na página de resultado.
Dois códigos. iframe_framing_refused: uma página https pública indicada por uma primitiva iframe (seu src ou seu fallback_src) envia X-Frame-Options (DENY, SAMEORIGIN ou o obsoleto ALLOW-FROM) ou uma lista frame-ancestors de Content-Security-Policy que não admite a origem do app web do Player.
O Player web e os Players macOS, Samsung Tizen, LG webOS e BrightSign enquadram a página e não conseguem mostrá-la; os Players Android, Linux e Windows abrem uma página iframe inteira e não são afetados.
O backend lê os cabeçalhos de resposta após a confirmação da gravação, para até 8 páginas distintas por gravação; uma página inacessível a tempo ou que retorna erro não é informada. Cada página distinta aparece uma vez, indicando a primeira primitiva que a usa, e acrescenta um evento playlist.iframe_framing_refused (aviso) ao registro do projeto.
Um src com tokens de tela não é uma única página e não é lido. screen_fact_missing: uma tela que a escrita alcança não tem um valor que o src de um iframe ou os params de um aplicativo leem por meio de um token de tela ({screen.field.NAME}, {screen.location.…}, {screen.timezone}), ou os valores que ela tem preenchem algo que o manifesto recusa (um endereço com mais de 2048 caracteres, um segmento de caminho . ou .., params de lançamento com mais de 4096 caracteres na URL de lançamento), então a primitiva fica de fora do manifesto dessa tela (diagnóstico do manifesto screen_fact_missing ou screen_fact_invalid) até que a tela tenha o valor.
Um aviso por escrita nomeia a primeira primitiva assim, os tokens que nenhuma tela listada conseguiu preencher (no máximo 64), as primeiras 20 telas afetadas e quantas são.
Uma escrita de playlist (substituição, patch, mudança de estrutura, promoção ou revisão aplicada) alcança as telas que mostram a playlist; uma escrita de tela alcança essa tela, tanto para a playlist que ela mostra quanto para a que acabou de receber; uma atribuição em frota alcança as telas de sua página; aprovar uma mudança de tela alcança as telas que ela nomeia.
PlaylistWrite— obrigatórios: name, pagesPlaylistWriteV2— obrigatórios: name, pagesPrimitiveEnter— obrigatórios: typeEntrada opcional de objeto. Escrita de playlist e manifesto em tempo de execução usam este objeto como está; não há renomeação snake_case dentro dele. Ausente significa pintura em repouso, opacidade total. O atraso inteiro opcional de 0 a 8 atrasa o início por stagger*120 ms após o atraso compartilhado de 500 ms. Ausente ou 0 é o início atual. Duração é uma constante nomeada em screenrig.canvas/v1.
PrimitiveMotion— obrigatórios: noneMovimento persistente opcional do objeto. Escrita de playlist e manifesto em tempo de execução usam este objeto como está; não há renomeação snake_case dentro dele. Ausente significa que o primitivo permanece em repouso após a entrada.
Copiado sem interpolação. spin e drift aplicam-se apenas a imagem e vídeo; aplicação e iframe com spin ou drift são rejeitados pelo servidor (motion_not_allowed_for_primitive). path aplica-se a imagem, vídeo, aplicação e iframe. Essa restrição não é codificada como OpenAPI if/then.
PrimitiveMotionDrift— obrigatórios: type, zoom, direction, speedEscala lenta contínua em torno do centro do clipRect combinada com uma translação lenta. Apenas imagem e vídeo; o servidor rejeita drift em aplicação e iframe. Vai e volta; nunca pula.
PrimitiveMotionPath— obrigatórios: type, points, rateTranslação ao longo de uma polilinha de waypoints em unidade de tela após o retângulo de autoria. loop padrão é loop quando omitido. Válido em imagem, vídeo, aplicativo e iframe.
PrimitiveMotionPoint— obrigatórios: x, yPrimitiveMotionSpin— obrigatórios: type, direction, speedRotação contínua em torno do centro do clipRect. Apenas imagem e vídeo; o servidor rejeita spin em aplicação e iframe.
Problem— obrigatórios: errors, instance, request_idO documento de problema que todas as rotas respondem, exceto as rotas de tempo de execução, conteúdo e probe voltadas para o Player (RuntimeProblem). O erro em si é errors[0]: seu status, código, tipo, título, detalhe e dica. Apenas membros do documento permanecem no nível superior. Ramifique em errors[0].code, nunca em detail ou hint, que são prosa.
Um campo de requisição culpado adiciona errors[0].field; cada campo culpado adicional é sua própria entrada com o detalhe desse campo.
ProblemError— obrigatórios: status, code, type, title, detail, hintUm erro de um documento de problema. Membros além destes descrevem este erro mais detalhadamente (por exemplo, dependências de not_ready).
ProblemField— obrigatórios: field, code, detailProject— obrigatórios: id, revision, status, email, used_bytes, reserved_bytes, screen_count, content_limit_bytes, screen_limit, credit_remaining, created_at, updated_at, nameProjectBillingUsage— obrigatório: period, usage, stored_bytes, allowanceProjectCapabilities— obrigatórios: project_id, plan_id, features, feature_revision, capabilities, media_video_bytes, plan_features, limitsProjectContext— obrigatórios: project, organizationProjectContextList— obrigatórios: projectsProjectCreate— obrigatórios: nameProjectDeleteConfirmation— obrigatórios: name, revisionProjectDeletionPreview— obrigatórios: project, organization, devices, allowedProjectFeatures— obrigatórios: advertiser, screensProjectMove— obrigatórios: organization_idProjectMoveDestinations— obrigatórios: organizationsProjectName— obrigatórios: noneNome de projeto imprimível aparado. Rejeita controles, texto com aparência de URL, @, www. e ://.
ProjectOwnerTransfer— obrigatórios: user_idProjectPatch— obrigatórios: nameProjectPlanFeature— obrigatórios: id, enabled, required_planProjectPlanFeatures— obrigatórios: featuresets, featuresOs recursos do plano que o projeto tem. O plano e os featuresets do projeto os determinam; o crédito nunca desbloqueia um. Um recurso que o projeto não tem é recusado com feature_not_in_plan (402), cujo required_plan nomeia o plano vendido de forma geral mais baixo que o inclui.
ProjectPlanLimits— obrigatórios: screens, members, video_bytes, event_retention_daysOs limites do projeto conforme o plano e os featuresets os definem, os valores que a admissão aplica. Zero significa sem limite do plano.
ProjectUptime— obrigatórios: itemsProvisionScreen— obrigatórios: noneRTSPStreamSource— obrigatórios: protocol, urlReadyResponse— obrigatórios: status, degradedReleaseLaunch— obrigatórios: launch_url, expires_atReport— obrigatórios: kind, title, generated_at, columns, rows, truncatedUm relatório como tabela: columns diz o que é cada membro de uma linha. As linhas trazem mais membros do que as colunas mostram (id, parent_id e depth para a estrutura de pastas). As colunas de porcentagem vão de 0 a 100.
ReportCatalog— obrigatórios: items, formatsReportColumn— obrigatórios: key, label, typeReportKindInfo— obrigatórios: kind, title, description, paramsReportParam— obrigatórios: name, descriptionReportSchedule— obrigatórios: cadenceReportSubscription— obrigatórios: id, name, kind, filters, schedule, format, enabled, recipients, revision, created_at, updated_atReportSubscriptionList— obrigatórios: itemsReportSubscriptionPatch— obrigatórios: noneReportSubscriptionRecipient— obrigatórios: user_idReportSubscriptionWrite— obrigatórios: name, kind, schedule, format, recipientsReseller— obrigatórios: id, name, spread_bps, spread_effective_at, customer_count, review_state, customer_limitResellerCustomer— obrigatórios: organization_id, name, plan_id, delegated_at, project_count, screen_count, stored_bytes, annual_list_cents, annual_wholesale_centsResellerCustomerPage— obrigatórios: items, next_cursorResellerCustomerProject— obrigatórios: id, name, status, screen_count, memberResellerCustomerProjectPage— obrigatórios: projects, next_cursorResellerEnrollment— obrigatórios: organization_idResellerList— obrigatórios: itemsResellerStatement— obrigatórios: reseller_id, name, period, spread_bps, lines, usage_list_mcr, usage_wholesale_mcr, plan_annual_list_cents, plan_annual_wholesale_centsResellerStatementLine— obrigatórios: organization_id, name, plan_id, delegated_from, project_count, screen_count, stored_bytes, api_events, usage_list_mcr, usage_wholesale_mcr, plan_annual_list_cents, plan_annual_wholesale_centsResellerSummary— obrigatórios: id, nameReview— obrigatórios: id, kind, state, subject, proposer, url, created_at, updated_at, impactReviewAdCreative— obrigatórios: creative_id, creative_revision, content_pathReviewApproveRequest— obrigatórios: noneReviewBlocker— obrigatórios: id, state, subjectReviewChangesRequest— obrigatórios: noteReviewDecider— obrigatórios: noneReviewDecisionResult— obrigatórios: reviewReviewDependentResult— obrigatórios: id, stateReviewImpact— obrigatórios: screensReviewList— obrigatórios: items, next_cursor, pending_countReviewLocation— obrigatórios: project_id, project_nameReviewMediaChange— obrigatórios: media_id, filename, before, afterA mudança pendente de um item de mídia que uma revisão selector_refresh questiona.
ReviewMediaFields— obrigatórios: tags, folder_idReviewMediaFile— obrigatórios: sha256, bytes, content_typeReviewMediaPlaylist— obrigatórios: id, name, screens, media_added, media_removedReviewMediaReplace— obrigatórios: media_id, filename, source, version, before, after, aspect_changed, playlistsA substituição do arquivo de um item de mídia sobre a qual uma revisão media_replace pergunta. A mídia mantém o seu arquivo até a aprovação.
ReviewPageEdit— obrigatórios: op, page_idReviewPending— obrigatórios: status, reviewUma escrita de classe revisão sob acesso Propor, ou uma escrita que alcança uma tela protegida em qualquer nível de acesso. A alteração não vai para a tela até que uma pessoa aprove a revisão; uma revisão protegida é decidida por um segundo aprovador (docs/screen-scope.md).
ReviewPerson— obrigatórios: user_id, nameReviewPlaylistChange— obrigatórios: operation, base_revision, proposed, diffReviewPlaylistDiff— obrigatórios: name_changed, pages_added, pages_removed, pages_changed, soundtrack_changed, media_added, media_removedReviewPolicy— obrigatórios: agent_changes_require_review, review_policy_revisionReviewPolicyUpdate— obrigatórios: agent_changes_require_reviewReviewPreview— obrigatórios: live, proposedPlaylists ao vivo e propostas na forma armazenada que GET /api/playlists/{id} retorna (páginas com resolved_media).
ReviewProposer— obrigatórios: kindReviewProtectedCampaign— obrigatórios: noneUm campaign_create, campaign_update ou campaign_delete.
ReviewProtectedChange— obrigatórios: subkindA entrada armazenada de uma revisão protected_change, aplicada pelo serviço proprietário quando um segundo aprovador aprova. Exatamente um entre campaign, folder e move está presente, como subkind indica. A aprovação reaplica em base_revision; uma campanha ou pasta que mudou torna a revisão desatualizada (review_stale).
ReviewProtectedFolder— obrigatórios: noneUm folder_create, folder_update, folder_delete ou folder_unprotect.
ReviewProtectedMove— obrigatórios: folder_id, screen_ids, folder_idsUm screens_move, o corpo de POST /api/screens/move.
ReviewRejectRequest— obrigatórios: reasonReviewScreenChange— obrigatórios: action, screens, request, playlist_idsReviewSubject— obrigatórios: type, id, nameReviewSummary— obrigatórios: id, kind, state, url, subject, impactRuntimeAdslotCandidate— obrigatórios: page_id, occurrence_id, check_sequence, earliest_start_atRuntimeAdslotEvent— obrigatórios: event_id, decision_id, occurrence_id, kind, client_sequenceRuntimeAdslotEventBatch— obrigatórios: eventsRuntimeAdslotEventResponse— obrigatórios: resultsRuntimeAdslotEventResult— obrigatórios: event_id, stateRuntimeAdslotMedia— obrigatórios: kind, duration_ms, content_type, bytes, sha256, content_path, fitRuntimeAdslotPage— obrigatórios: id, type, adslot_idSlot de publicidade de página inteira, enviado apenas para uma sessão pareada com adslot-v1 concedido. Um Player que encontra um tipo de página desconhecido descarta essa página.
RuntimeAdslotResolveRequest— obrigatórios: manifest_revision, candidatesRuntimeAdslotResolveResponse— obrigatórios: server_time, resultsRuntimeAdslotResult— obrigatórios: occurrence_id, check_sequence, stateRuntimeAdvance— obrigatórios: modeRuntimeApplicationPackage— obrigatórios: version, url, bytes, sha256, entrypoint, contentTypePacote normalizado imutável construído apenas a partir da árvore de aplicação validada independentemente. Players nativos verificam bytes e SHA-256 antes de reter atomica e offline essa versão para restauração do último estado conhecido bom. A URL é uma referência de transporte vinculada à autorização, não uma URL pública ou durável de objeto.
RuntimeApplicationPrimitive— obrigatórios: id, primitive, applicationId, releaseId, launchUrl, origin, protocol, grantId, package, rect, layer, contentFitRuntimeAudio— obrigatórios: loop, volume, tracksTrilha sonora da playlist (docs/playlist-audio.md). Emitida apenas quando a playlist tem uma e pelo menos uma faixa projetada. O Player toca as faixas em ordem, independentemente do sequenciador de páginas; mudanças de página, transições e visibilidade nunca pausam ou reiniciam a reprodução.
Identidade da faixa é id mais mediaId mais sha256, nunca src, então uma atualização de manifesto que mantém a faixa em reprodução não a reinicia. Ganho efetivo é volume vezes o volume do Player. Uma faixa defeituosa é descartada sozinha (invalid_audio_track).
RuntimeAudioCue— obrigatórios: track, restartDica de trilha sonora emitida em uma página que criou audio_cue. Quando a página se torna atual: se uma faixa diferente estiver tocando, ou nenhuma, mude para a faixa desde o início; se a faixa estiver tocando, reinicie somente se restart for true. A sequência continua da faixa. Uma dica pode ser ignorada. Um cue que não nomeia faixa no manifesto é descartado (invalid_audio_cue).
RuntimeAudioTrack— obrigatórios: id, mediaId, src, sha256, bytes, contentType, durationMs, grantIdRuntimeCanvas— obrigatórios: width, height, viewportFit, backgroundRuntimeCardPrimitive— obrigatórios: id, primitive, card, major, params, rect, layer, contentFitUm cartão embutido. Para um Player declarando capacidades CardML, o backend seleciona a revisão publicada compatível mais recente dentro do major fixado, considerando revisões retidas e todos os recursos necessários; quando nenhum qualifica, omite o cartão com diagnósticos card_unavailable e remove páginas vazias.
O Player mescla os padrões do cartão, depois os parâmetros, então, quando há dados, as propriedades dinâmicas do documento em GET /screen/card-data/{data} (apenas chaves que o cartão marca como dinâmicas).
Um cartão com dados fica oculto até que seu primeiro documento chegue e então aparece; screen.card_data_changed para a chave o busca novamente no lugar. feed, quando presente, é buscado na mesma rota e passado ao cartão como seu feed. Um Player que não tem o cartão ou seu major não desenha nada para ele.
Uma string em params ou no documento de dados que começa com media: é uma referência de mídia, media:<id>, que o Player resolve para bytes que ele possui antes do cartão desenhá-la, e fica em branco quando não pode; ele nunca passa uma URL de params ou dados para um cartão. media lista o nome dos parâmetros de imagens prontas, com os descritores que um primitivo de imagem resolvedMedia carrega, para que o Player baixe e verifique quando o manifesto chegar; uma referência a mídia removida desde a publicação está ausente e o cartão desenha seu fallback.
A mídia que um documento de dados nomeia vem de /media/{media_id} quando o documento chega (ETag é o sha256). A mídia de card nunca retém uma página. O backend já expandiu os tokens {screen.name}, {screen.timezone}, {screen.field.NAME} e {screen.location} de um posicionamento para esta tela, então params e data trazem os valores dela.
RuntimeChrome— obrigatórios: schema_version, bannerChrome de propriedade do tempo de execução (docs/player-compatibility.md §8). Os leitores leem os membros que conhecem e ignoram o resto; uma forma de banner que um leitor não entende não mostra banner.
RuntimeCodecs— obrigatórios: noneLista de codecs RFC 6381 derivada do servidor para esta exata versão, nunca declarada pelo cliente. É um irmão de contentType; um Player pode formar uma consulta de capacidade como contentType seguido de codecs="VALOR". Um vídeo cujo codec não pode ser derivado é rejeitado no upload. A propriedade é opcional. A ausência de valor não significa que o codec não é suportado.
Um valor presente contém atualmente uma entrada de faixa de vídeo; a gramática permite entradas separadas por vírgula.
RuntimeCommandResultWrite— obrigatório: stateO corpo de POST /screen/commands/{command_id}/result. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1).
RuntimeConditionReport— obrigatórios: severity, code, contextRuntimeDisplay— obrigatórios: noneO controle de display da tela, avaliado no dispositivo (docs/player-compatibility.md §6.5): a programação e a substituição de energia, a configuração de escurecimento por inatividade e o modo de brilho. Omitido quando a tela não tem nenhum; então o display permanece ligado no brilho do operador. Membros desconhecidos são ignorados.
RuntimeHealthWrite— obrigatórios: noneO corpo PUT /screen/health. Cada membro é opcional; envie o que a plataforma puder medir. Membros desconhecidos são ignorados e um valor fora do intervalo é descartado (não recusado). Inteiros são números JSON inteiros.
RuntimeHostHint— obrigatórios: platformA dica opcional do host nativo no início do pareamento, conclusão do pareamento e criação da sessão de identidade. Nomeia um dispositivo e nunca é autorização.
É lido com tolerância (docs/player-compatibility.md §1.1.1): membros desconhecidos são ignorados, um campo malformado ou entrada de capacidades é descartado, no máximo 32 capacidades são mantidas, e um valor que não é objeto ou uma plataforma fora do padrão descarta toda a dica. Nenhum desses recusa a solicitação.
Um Player ainda envia apenas os valores de plataforma registrados e os membros abaixo, porque um backend pré-contrato recusa qualquer outra coisa.
RuntimeHostHintDevice— obrigatórios: noneIdentificadores de hardware opcionais na dica do host nativo. Um campo malformado é descartado.
RuntimeIframeCookie— obrigatórios: name, value, domain, path, secure, httpOnly, sameSiteUm cookie de uma aba compartilhada, no formato da API de cookies do navegador. O valor é secreto.
RuntimeIframePrimitive— obrigatórios: id, primitive, src, title, rect, layer, contentFitRuntimeImagePrimitive— obrigatórios: id, primitive, selector, resolvedMedia, grantId, rect, layer, contentFitRuntimeImageResolvedMedia— obrigatórios: mediaId, src, intrinsicSize, sha256, bytes, contentTypeRuntimeIntrinsicSize— obrigatórios: width, heightRuntimeKVEntry— obrigatórios: application_id, key, value_base64, content_type, bytes, sha256, revisionRuntimeKVList— obrigatórios: itemsRuntimeKVSummary— obrigatórios: application_id, key, content_type, bytes, sha256, revisionRuntimeKVWrite— obrigatórios: value_base64RuntimeKiosk— obrigatórios: lockO bloqueio de quiosque (docs/player-compatibility.md §6.5). Emitido em toda sessão enquanto o kiosk.lock da tela estiver ativo e omitido caso contrário. Um Player que consegue se fixar na tela o faz enquanto lock é true e libera a fixação quando o membro está ausente ou lock é false; um que não consegue o ignora. Membros desconhecidos são ignorados.
RuntimeLiveHeartbeat— obrigatórios: connectionO relatório do próprio Player. Esquema aberto.
RuntimeLiveHeartbeatAnswer— obrigatórios: lease_until, max_untilRuntimeLiveJoin— obrigatórios: live_id, ice_servers, lease_until, max_until, heartbeat_ms, videoPara onde um Player publica e dentro de quais limites. Esquema aberto.
RuntimeLiveJoinRequest— obrigatórios: noneVazio. O corpo pode ser omitido.
RuntimeLiveOffer— obrigatórios: sdpUma descrição de sessão sem o tipo, como a oferta do Player e a resposta do relay.
RuntimeLiveStopped— obrigatórios: reasonRuntimeManifest— obrigatórios: schemaVersion, manifestRevision, grantId, contentGeneration, screenId, screenLabel, playlistRevision, generatedAt, pagesManifesto de runtime imutável usando o contrato determinístico screenrig.canvas/v1 de canvas, retângulo, ajuste e ordem de fonte. Propriedades adicionais do lado de leitura são permitidas para que um player nesse contrato ignore chaves desconhecidas (regra de compatibilidade 2). Esquemas de escrita permanecem fechados.
Páginas são páginas canvas comuns e, para uma sessão pareada concedida adslot-v1, páginas de adslot de página inteira; um manifesto sem página de adslot é conteúdo da casa.
RuntimeManifestDiagnostic— obrigatórios: level, code, detailUma omissão de projeção de tempo de execução à prova de falhas. Players e o CLI podem mostrar estes; eles nunca são autorização.
RuntimeMediaSelector— obrigatórios: noneRuntimeMediaSelectorByAll— obrigatórios: by, oneAtATimeRuntimeMediaSelectorByID— obrigatórios: by, mediaId, oneAtATimeRuntimeMediaSelectorByIDs— obrigatórios: by, mediaIds, oneAtATimeRuntimeMediaSelectorByTag— obrigatórios: by, oneAtATimeRuntimeObservationSurfaceWrite— obrigatórios: id, width, height, pixel_ratio, presentationRuntimeObservationWrite— obrigatórios: observed_at, surfacesO corpo PUT /screen/observation. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1). O valor armazenado é o ScreenObservation do projeto.
RuntimeOrigins— obrigatórios: contentA lista de permissões de origem entregue (docs/player-compatibility.md §2.3). Presente em uma resposta mint apenas para um Player com origens-v1 concedidas.
O Player une o conteúdo com suas origens de conteúdo compiladas e ignora uma entrada inválida. release_suffix substitui o sufixo de lançamento compilado somente quando é um sufixo DNS válido de pelo menos dois rótulos; está ausente quando a origem de tempo de execução serve os lançamentos ela mesma (desenvolvimento local).
O conjunto entregue nunca altera a origem da credencial, e o backend nunca coloca uma URL em uma origem que esta sessão mint não entregou. Um Player armazena o objeto que validou como último bom conhecido, então uma sessão posterior sem origens mantém esse LKG válido.
RuntimePage— obrigatórios: contractVersion, id, canvas, transition, advance, primitivesRuntimePairingScreen— obrigatórios: id, public_id, label, state, revision, manifest_revision, content_access_generation, created_at, updated_atResumo da tela de propriedade do tempo de execução em conclusões de pareamento e provisionamento do navegador. Seu conjunto de membros está congelado: campos de tela do projeto nunca aparecem aqui (docs/player-compatibility.md §8). state permanece dentro dos três valores abaixo.
RuntimePrimitive— obrigatórios: noneRuntimeProblem— obrigatórios: type, title, status, detail, instance, code, request_id, errorsO documento de problema das rotas voltadas para o Player de tela (/screen/) e mídia (/media/), os fluxos de pareamento e as rotas probe (/.ready, /.health): todos os membros no nível superior. Players lançados pela loja leem seu código e ação no nível superior (docs/player-compatibility.md §5), então essa forma permanece como está; todas as outras rotas respondem Problem.
RuntimeRect— obrigatórios: x, y, width, heightRuntimeReport— obrigatórios: noneCorpos e contextos de relatórios são lidos de forma tolerante (docs/player-compatibility.md §1.1). Um código precisa de seus próprios membros de contexto; outros membros são ignorados. Players ainda enviam apenas os membros abaixo, porque um backend pré-contrato recusa qualquer outro.
RuntimeScreenLabel— obrigatórios: screen_labelO nome da tela armazenado, o valor que o manifesto carrega como screen_label.
RuntimeScreenLabelWrite— obrigatórios: screen_labelO corpo PUT /screen/screen-label. O servidor remove os espaços do início e do fim de screen_label e armazena de 1 a 120 caracteres sem caracteres de controle. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1).
RuntimeScreenPlaylist— obrigatórios: playlist_idA playlist atribuída à tela após a alteração.
RuntimeScreenPlaylistWrite— obrigatórios: playlist_idO corpo PUT /screen/playlist. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1).
RuntimeScreenPlaylists— obrigatórios: playlists, moreAs playlists que o seletor no dispositivo de uma tela oferece, em ordem alfabética por nome sem considerar maiúsculas, depois por id.
RuntimeSelectorPlaylistSnapshot— obrigatórios: selections, pageMaxMsAs seleções de uma playlist de pilha, nomeadas pelos IDs de página da própria playlist.
RuntimeSelectorSnapshot— obrigatórios: manifestRevision, snapshotRevision, selections, pageMaxMsRuntimeSession— obrigatórios: paired, capabilities, event_cursor, public_urlSessão de propriedade do tempo de execução (docs/player-compatibility.md §8). Os leitores ignoram membros desconhecidos e valores de capacidades desconhecidas. Um novo membro é enviado apenas para sessões cujas concessões o cobrem.
RuntimeSessionRequest— obrigatórios: public_idMint de visualizador anônimo. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1).
RuntimeStack— obrigatórios: levels, playlistsCada nível da pilha da tela, enviado apenas a um player que declarou a capacidade de host schedule.stack e somente quando a pilha tem mais de um nível (docs/player-compatibility.md §6.11). Os membros raiz do manifest são a playlist do nível inferior; o player resolve os próprios níveis com o contrato de programação.
RuntimeStackPlaylist— obrigatórios: playlistRevision, pagesRuntimeStatusWrite— obrigatórios: observed_at, chipO corpo PUT /screen/status. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1). O valor armazenado é o ScreenStatus do projeto.
RuntimeStorageWrite— obrigatórios: observed_at, volume, cache, durability, plan, transfer_24hO corpo PUT /screen/storage. Membros desconhecidos são ignorados (docs/player-compatibility.md §1.1). O valor armazenado é o ScreenStorage do projeto mais received_at do servidor.
RuntimeStreamPrimitive— obrigatórios: id, primitive, sources, muted, fallback, grantId, rect, layer, contentFitRuntimeSuspension— obrigatórios: message, sinceEmitido enquanto a tela está suspensa (docs/player-compatibility.md §6.9): pages é [] sem diagnostics, e um Player mostra message como um aviso em tela cheia no lugar da tela sem conteúdo. since é quando a tela foi suspensa pela primeira vez. A revisão do manifesto é a própria do aviso, nunca a de uma playlist, e a tela não precisa de playlist atribuída.
RuntimeTelemetryBatch— obrigatórios: telemetry_epoch, stream_id, sequence, created_at, reportsUma fila FIFO durável do Player envia no máximo um lote comum por minuto com uma fase randomizada, ou antes quando cheia. O corpo JSON total tem no máximo 256 KiB; no máximo 64 relatórios, cada um com no máximo 32 KiB. Cada relatório mantém seu timestamp de ocorrência e play_id estável.
Mantenha um lote imutável em trânsito no disco até 202, incremente a sequência somente após o reconhecimento e tente os mesmos bytes após respostas perdidas ou reinicializações. A sequência começa em 1 e não tem lacunas.
Dedupe mantém no máximo oito streams ao vivo por tela, cada marca d’água por pelo menos 24 horas em que seu lote ainda pode ser reproduzido; mantenha o mesmo stream durante a renovação da credencial. Registros expiram localmente após 24 horas com contabilidade explícita. manifest.activated e manifest.upgrade permanecem individuais e imediatos.
Gravações interativas, resolução de anúncios, buscas de conteúdo, capturas de tela e SDK emitConfirmed() também permanecem imediatos. Amostragem de saúde mantém sua cadência de quinze minutos; transições urgentes de exibição/saúde são enviadas imediatamente. Observação e snapshots comuns de saúde são latest-wins com tempos originais. Saúde requer health.write.
Relatórios individuais existentes continuam aceitos. Limites de abuso de item de relatório aplicam-se por novo item em vez de por envelope HTTP; reprodução comprometida consome apenas a admissão da solicitação.
RuntimeTransition— obrigatórios: type, durationMsTransição de página criada. Movimentos simples mantêm tipo, duração e decorações opcionais. Stinger carrega a forma normal do conteúdo do cartão acima de ambas as camadas. Código ausente ou interpretador do Player incompatível degrada apenas a transição para crossfade da mesma duração, com diagnóstico transition_unavailable.
RuntimeTransitionCard— obrigatórios: primitive, card, major, params, version, src, sha256, model, requiresO mesmo conteúdo projetado do card como um card canvas, sem geometria de posicionamento canvas. Stinger está fixado no major 1; params inclui durationMs e hangMs.
RuntimeUpgradeNotice— obrigatórios: state, player_kind, recommendedPresente em uma resposta mint quando a versão comparável do player está abaixo da versão recomendada para player_kind (docs/player-compatibility.md §6.1). O Player inicia uma verificação de atualização da plataforma e não mostra nada na tela. Um leitor ignora o membro para um estado que não conhece.
RuntimeVerbosity— obrigatórios: noneO nível de log e o nível de toast mais baixos que o Player gera e mostra (docs/player-compatibility.md §6.12). Emitido em toda sessão quando a tela define algum dos dois; cada membro é omitido quando não definido. Erros são sempre gerados e mostrados. Um Player ignora um membro ou valor desconhecido e mantém o padrão.
RuntimeVideoPrimitive— obrigatórios: id, primitive, selector, resolvedMedia, muted, loop, grantId, rect, layer, contentFitRuntimeVideoResolvedMedia— obrigatórios: mediaId, src, intrinsicSize, sha256, bytes, contentTypeRuntimeWall— obrigatórios: outputs, arrangement, rotation, spanA parede de vídeo da tela conforme o Player a organiza (docs/player-compatibility.md §6.8). Emitido apenas quando a tela tem uma parede. Membros desconhecidos são ignorados.
SCIMError— obrigatórios: schemas, statusO documento de erro da RFC 7644 seção 3.12.
SCIMEvent— obrigatórios: at, action, statusSCIMEventList— obrigatórios: eventsSCIMGroupList— obrigatórios: groupsSCIMGroupProjectBinding— obrigatórios: binding_id, project_id, project_name, roleSCIMGroupSummary— obrigatórios: id, display_name, member_count, bindingsSCIMResource— obrigatórios: noneUm documento SCIM 2.0 na forma que a RFC 7643 e a RFC 7644 lhe dão na rota que o carrega; cada operação indica qual é. É um recurso User ou Group, uma ListResponse, uma mensagem PatchOp, uma ServiceProviderConfig, um ResourceType ou um Schema. Os membros que o screenRIG não usa são aceitos e ignorados.
SCIMSettings— obrigatórios: enabled, base_url, tokens, user_count, group_countSCIMSettingsWrite— obrigatórios: enabled, proofSCIMToken— obrigatórios: id, name, prefix, created_atSCIMTokenCreate— obrigatórios: name, proofSCIMTokenCreated— obrigatórios: id, name, prefix, created_at, tokenUm SCIMToken com o seu segredo, retornado uma vez.
SSODiscovery— obrigatórios: sso, required, accountComo o endereço faz login ou se cadastra. sso, required e provider_name são decididos apenas pelo domínio do endereço; account informa se uma pessoa ativa possui o endereço.
SSODiscoveryRequest— obrigatórios: emailSSOErrorCode— obrigatórios: noneO código estável com que um login único termina quando não é concluído: o valor de #sso_error= no endereço para o qual POST /api/sso/finish redireciona, e o código de um teste de provedor de identidade com falha. no_email: o provedor não afirmou nenhum endereço de e-mail. email_unverified: ele marcou o endereço como não verificado. domain_not_allowed: o endereço não está em um dos domínios verificados da organização. account_exists: o endereço já pertence a uma conta com login próprio; a pessoa faz login como antes e vincula a identidade a partir da conta dela (intent link). managed_elsewhere: outra organização gerencia a pessoa. subject_mismatch: a conta está vinculada a uma identidade diferente no mesmo provedor. not_provisioned: ninguém tem o endereço e a conexão não cria pessoas. sso_required: a organização exige login único para o endereço. staff_account: uma conta da equipe do screenRIG nunca é autenticada, adotada ou vinculada pelo provedor de identidade de um cliente. expired: o login excedeu seus 10 minutos. bad_state: o state do login ou a vinculação ao navegador não corresponde, ou ele já foi usado. interaction_required: uma renovação silenciosa precisa da pessoa. provider_refused: o provedor respondeu com um erro. provider_unavailable: o provedor não pôde ser alcançado ou lido. verification_failed: o token ou a asserção do provedor falhou na verificação. deactivated: a pessoa está desativada.
SSOPolicy— obrigatórios: required, break_glass_user_ids, passkey_admin_ids, policy_revisionSSOPolicyWrite— obrigatórios: required, break_glass_user_ids, proofSSOStart— obrigatórios: redirect_urlSSOStartRequest— obrigatórios: emailSSOTestStart— obrigatórios: redirect_urlScheduleCalendar— obrigatórios: subject, from, to, screens, groupsScheduleCalendarConflict— obrigatórios: kind, level_idsScheduleCalendarGroup— obrigatórios: key, screens, screen_ids, displays, levels, spans, on_screen, conflictsScheduleCalendarOnScreen— obrigatórios: display, from, toScheduleCalendarSpan— obrigatórios: level_id, from, to, stateScheduleImportCommitted— obrigatórios: preview, appliedScheduleImportLevel— obrigatórios: key, action, home, content, screens, priority, rowsScheduleImportPreview— obrigatórios: name, columns, valid, fingerprint, summary, rows, levels, removalsScheduleImportRemoval— obrigatórios: homeScheduleImportRequest— obrigatórios: rowsScheduleImportResolved— obrigatórios: kind, id, nameScheduleImportRow— obrigatórios: row, statusScheduleImportRowError— obrigatórios: code, messageScheduleImportSummary— obrigatórios: rows, rows_with_errors, levels, creates, updates, unchanged, removes, screens, playlistsSchedulePreview— obrigatórios: gained, lost, calendarO que uma gravação de campanha ou de programação alteraria. gained são as telas que passariam a ter um nível da gravação que não têm agora, lost as que têm um que deixariam de ter; um nível que continua em uma pilha não altera nenhum dos dois e aparece em calendar.
SchedulePreviewReach— obrigatórios: count, screen_idsScreen— obrigatórios: id, public_id, label, revision, manifest_revision, manifest_upgrade, content_access_generation, state, online, created_at, updated_atScreenAction— obrigatórios: noneUma ação de frota, discriminada por tipo. Cada membro carrega apenas seus próprios parâmetros; um membro de outro tipo é um campo desconhecido e invalid_request.
ScreenActionAddTags— obrigatórios: type, tagsAdiciona tags que uma tela ainda não possui. Uma tela que ultrapassaria 16 tags falha com invalid_request.
ScreenActionAssign— obrigatórios: type, playlist_idScreenActionClearDisplaySchedule— obrigatórios: typeRemove a programação de exibição de cada tela; uma tela sem programação está ok e inalterada.
ScreenActionClearPlaylist— obrigatórios: typeRemove a playlist padrão própria de cada tela, mantendo o pareamento e os demais níveis de conteúdo. Sem conteúdo efetivo, o Player mostra sua tela de espera. Da classe de revisão, como a atribuição.
ScreenActionClearPlaylistSchedule— obrigatórios: typeRemove a programação de playlist de cada tela; uma tela sem programação está ok e inalterada.
ScreenActionClearRebootSchedule— obrigatórios: typeRemove a programação de reinício de cada tela; uma tela sem programação é ok e permanece inalterada. Somente acesso Manage.
ScreenActionDisplay— obrigatórios: type, powerMesmas regras que ScreenDisplayWrite. until é verificado contra o relógio da requisição quando a Idempotency-Key não tem registro na frota, e novamente por cada tela.
ScreenActionDisplayClear— obrigatórios: typeEncerra a substituição manual de exibição de cada tela (DELETE /api/screens/{id}/display); uma tela sem substituição está ok e inalterada.
ScreenActionMaintenance— obrigatórios: typePOST /api/screens/{id}/clear-cache, /restart-app ou /update por tela; uma tela cujo host não declarou a capacidade falha sozinha com command_unsupported. Uma tela offline mantém o comando queued até ficar online (expires_in_s).
ScreenActionReboot— obrigatórios: typePOST /api/screens/{id}/reboot por tela; uma tela cujo host não declarou reboot falha sozinha com reboot_unsupported. Uma tela offline mantém o reinício queued até ficar online (expires_in_s).
ScreenActionReload— obrigatórios: typePOST /api/screens/{id}/reload por tela. Uma tela offline mantém o recarregamento queued até ficar online (expires_in_s).
ScreenActionRemoveTags— obrigatórios: type, tagsRemove as tags listadas; uma tag que a tela não possui é ignorada.
ScreenActionRequest— obrigatórios: selector, actionScreenActionResult— obrigatórios: action, matched, succeeded, failed, resultsScreenActionScreenResult— obrigatórios: screen_id, statusO resultado de uma tela. ok traz o resultado do caminho de tela única: revision (e tags para ações de tag) para as ações assign, tag, takeover, takeover_clear, set_playlist_schedule, clear_playlist_schedule, set_reboot_schedule e clear_reboot_schedule, reload para reload, toast para toast. failed traz o problema que a requisição própria dessa tela teria respondido.
ScreenActionSelector— obrigatórios: noneScreenActionSelectorFolder— obrigatórios: by, folder_idCada tela ativa na pasta de telas e em toda pasta dentro dela, em ordem de criação. Não há limite de contagem de telas.
ScreenActionSelectorIds— obrigatórios: by, screen_idsScreenActionSelectorTag— obrigatórios: by, tagCada tela ativa cujas tags contêm tag, em ordem de criação. Não há limite de contagem de telas.
ScreenActionSetDisplaySchedule— obrigatórios: type, enabled, windowsSubstitui a programação de exibição de cada tela (ScreenDisplayScheduleWrite), normalizada uma vez antes da distribuição. Uma tela sem fuso horário falha sozinha com invalid_request.
ScreenActionSetPlaylistSchedule— obrigatórios: type, entriesSubstitui a programação de playlist de cada tela com as mesmas entradas (ScreenPlaylistScheduleWrite). Os IDs das entradas são atribuídos uma vez antes da distribuição. Uma tela sem fuso horário ou sem playlist padrão falha sozinha com invalid_request.
ScreenActionSetRebootSchedule— obrigatórios: type, enabled, windowsSubstitui a programação de reinício de cada tela (ScreenRebootScheduleWrite), normalizada uma vez antes da distribuição. Somente acesso Manage. Uma tela sem fuso horário falha sozinha com invalid_request, e uma cujo Player não declarou reboot, com reboot_unsupported.
ScreenActionSetTags— obrigatórios: type, tagsSubstitui o conjunto de tags de cada tela; um array vazio o limpa.
ScreenActionTakeover— obrigatórios: type, playlist_idMesmas regras que ScreenTakeoverWrite. until é verificado contra o relógio da requisição antes da distribuição quando a Idempotency-Key não tem registro na frota, e novamente por cada tela.
ScreenActionTakeoverClear— obrigatórios: typeEncerra a tomada de controle de cada tela; uma tela sem tomada está ok e inalterada.
ScreenActionToast— obrigatórios: type, level, textMesmas regras de nível, texto e duração que ScreenToastWrite, validadas uma vez antes da distribuição.
ScreenCampaigns— obrigatórios: screen_id, itemsScreenCommand— obrigatórios: id, type, state, requested_at, expires_atUm reinício, recarregamento, clear_cache, restart_app ou update pedido a uma tela, em Screen.commands. Um comando enviado a uma tela online é armazenado como sent.
Um pedido a uma tela offline é armazenado como queued sem evento de runtime; o backend acrescenta o evento, com este id e expires_at, quando aplica a próxima transição online da tela antes de expires_at, e o comando passa a sent.
Cada comando tem exatamente um evento de runtime, então um Player não pode vê-lo duas vezes. expired é derivado na leitura para um comando queued após expires_at. Um comando mais recente do mesmo tipo substitui um que ainda está na fila. Um reinício sent passa a done quando um relatório de saúde com uptime_s situa a inicialização depois de sent_at; um recarregamento nunca chega a done.
Um clear_cache, restart_app ou update passa a done ou failed quando seu Player reporta, com cause e detail.
ScreenCommandPage— obrigatórios: items, next_cursorScreenCommandWrite— obrigatórios: noneO corpo opcional de POST /api/screens/{id}/reboot, /reload, /clear-cache, /restart-app e /update. Um corpo vazio mantém o padrão.
ScreenDeviceSettingsPatch— obrigatórios: noneUma alteração das configurações de escurecimento por inatividade e de brilho de uma tela e do bloqueio de quiosque (patchScreenDeviceSettings). O corpo nomeia pelo menos um dos dois membros e nenhum outro.
ScreenDisplay— obrigatórios: requested, sourceEstado da energia da tela. requested é o que a tela deve mostrar agora: a substituição ativa, ou a programação de exibição habilitada avaliada no fuso horário da tela, ou ligado (source override, schedule ou default); until é quando isso muda, se conhecido. reported é o último estado de saúde do Player (power, connected, reported_at, expira após 35 minutos). idle e brightness são as configurações display.idle e display.brightness da tela (definidas por ScreenPatch).
Ausente quando a tela não tem programação, não tem substituição, não tem configuração de inatividade ou de brilho e não reporta display.
ScreenDisplayBrightness— obrigatórios: modedisplay.brightness: auto mapeia a luz ambiente do dispositivo para o brilho da janela; fixed (o padrão) mantém o brilho do operador. Aplicado por um Player que declara a capacidade do host brightness.auto, que ele declara somente quando o dispositivo tem um sensor de luz.
ScreenDisplayIdle— obrigatórios: after_s, wakedisplay.idle: a tela escurece após after_s segundos sem um toque, uma tecla ou, quando wake lista presence, alguém na frente da tela (a câmera do dispositivo, analisada no próprio dispositivo; nenhuma imagem sai dele). Um evento de despertar a acende de novo de imediato, e o toque que acorda uma tela escura é consumido.
Enquanto a tela está escura, o Player fica em estado de display desligado, como em uma programação de exibição: suspende a reprodução (sem exibições, sem anúncios), informa display.power off em sua saúde e retoma ao despertar. Uma programação de exibição ou substituição que mantém o painel desligado prevalece, e um aplicativo que mantém device.display prevalece sobre o idle enquanto sua página está na tela.
Aplicado por um Player que declara a capacidade do host display_power.idle.
ScreenDisplayOverride— obrigatórios: override_id, power, until, ends_at, set_atScreenDisplayPatch— obrigatórios: noneScreenDisplayReported— obrigatórios: reported_at, staleO último relatório de estado do monitor do Player. Energia e conectividade observadas, independentes da energia solicitada. stale é verdadeiro após 35 minutos sem relatório; é contexto, não prova de que a energia causou uma falha de captura.
ScreenDisplaySchedule— obrigatórios: enabled, windows, updated_atScreenDisplayScheduleView— obrigatórios: display_scheduleScreenDisplayScheduleWrite— obrigatórios: enabled, windowsScreenDisplayWrite— obrigatórios: powerScreenEffectivePlaylist— obrigatórios: id, sourceA playlist da qual o manifesto de tempo de execução da tela é construído: o takeover, ou a primeira campanha aplicável (entry_id é o id da campanha), ou a primeira entrada de programação de playlist correspondente (entry_id), ou o padrão atribuído, ou a playlist padrão da pasta mais próxima que contém a tela (source igual a folder, entry_id o id da pasta). until é o próximo instante em que se sabe que isso muda (fim do takeover ou o próximo limite de programação dentro de oito dias), ausente quando nada baseado em tempo o altera.
O boundary worker aplica uma alteração com no máximo 60 segundos de atraso. Uma tomada ou entrada cuja playlist não pode ser mostrada é ignorada. Ausente quando a tela não mostra playlist.
ScreenExplainAt— obrigatórios: instant, effective_playlist, verdicts, not_judgedO que a tela mostra em instant e por quê, segundo o resolvedor que a varredura de limites executa. O takeover, a programação de playlists da tela e as campanhas do projeto são lidos como estão agora, não como estavam então. Uma campanha cuja playlist está ausente ou não aprovada é ignorada, como a varredura a ignora.
Em uma tela cujo Player resolve sua própria pilha (schedule.stack), os vereditos leem essa pilha, e not_judged informa isso (player_stack).
ScreenFieldsPatch— obrigatório: fieldsUma alteração dos campos de uma tela (patchScreenFields). O corpo não tem outro membro.
ScreenFolder— obrigatórios: id, name, parent_id, revision, created_at, updated_atUma pasta de telas. Uma tela fica em no máximo uma pasta (Screen.folder_id); uma pasta segmenta suas telas e as de toda pasta dentro dela.
ScreenFolderCreate— obrigatórios: nameScreenFolderDeleteResult— obrigatórios: levelsScreenFolderList— obrigatórios: itemsScreenFolderPatch— obrigatórios: noneScreenGlass— obrigatórios: noneO que o backend concluiu sobre a imagem da tela a partir dos relatórios recebidos, nunca do que o player diz de si mesmo. Uma verificação que não tem nada a dizer deixa seu membro ausente. Somente leitura na API do projeto. Nunca é autorização nem admissão. ScreenPatch não pode escrevê-lo.
ScreenGlassChangedDetails— obrigatórios: check, verdict, previous, since, evidenceObjeto details de um evento screen.glass_changed durável, somente do projeto, anexado quando uma verificação da imagem muda seu veredito para uma tela. Não é um comando de audiência de execução e não é entregue em GET /screen/events.
A condição loop_stalled abre com um veredito de reprodução stalled e termina com qualquer outro; glass_blank e glass_frozen abrem com um veredito de imagem blank ou frozen e terminam com qualquer outro.
ScreenHealth— obrigatórios: reported_at, staleO relatório mais recente de saúde do dispositivo (PUT /screen/health), sanitizado, com reported_at do servidor. Um membro que o Player não enviou está ausente. stale é verdadeiro quando reported_at tem mais de 35 minutos; saúde stale ainda é mostrada, nunca excluída; arquivar e recuperação de tela limpam isso.
Transições adicionam o screen.health_changed exclusivo do projeto com details.changes, uma lista de {change, ...}: display_disconnected, display_reconnected, display_power (from, to), temperature_high (em ou acima de 80 °C), temperature_normal (abaixo de 75 °C novamente), on_battery (battery.source passou a none; level_percent quando informado) e plugged_in (qualquer outra fonte de novo; source), crash_spike e renderer_restart_spike (a contagem de 24 horas subiu 3 ou mais desde o último evento spike; crashes_24h ou renderer_restarts_24h e previous). battery está presente somente quando o dispositivo informa uma; o backend não lê nada dela além de battery.source para a condição on_battery e não infere nenhuma causa.
Somente leitura; nunca autorização.
ScreenHealthHistory— obrigatórios: noneUma página de relatórios (resolução raw) ou resumos horários (resolução hour).
ScreenHealthHour— obrigatórios: hour, reports, temperature_max_c, temperature_avg_c, cpu_load_max, memory_used_ratio_max, wifi_rssi_min_dbm, display_disconnected, crashes_24h_max, renderer_restarts_24h_max, last_reported_atRelatórios de uma tela em uma hora UTC. Um membro é nulo quando nenhum relatório da hora o contém.
ScreenHealthHours— obrigatórios: resolution, hours, next_cursorScreenHealthSample— obrigatórios: reported_atUm relatório de saúde do dispositivo armazenado: Screen.health sem stale, e sem cpu.utilization_percent e cpu.app_percent, que só o relatório mais recente (Screen.health) carrega. Um membro que o Player não enviou está ausente.
ScreenHealthSamples— obrigatórios: resolution, samples, next_cursorScreenIdentifyAccepted— obrigatórios: identify_id, duration_ms, expires_atScreenIdentifyDetails— obrigatórios: identify_id, label, screen_id, duration_ms, at, expires_atobjeto details em um evento player.identify durável.
ScreenIdentifyWrite— obrigatórios: noneScreenKiosk— obrigatórios: lockkiosk.lock: o Player se fixa na tela (fixação de tela do Android com startLockTask; a pessoa na tela confirma na primeira vez, e a barra de status, o início e os recentes ficam bloqueados enquanto fixado; a variante gerenciada, como proprietário do dispositivo, mantém sua lock task). Presente somente enquanto o bloqueio está ativo.
O painel de configurações do operador oferece Sair do bloqueio de quiosque, que libera a fixação até que o próximo manifesto ou reinício a aplique de novo. Aplicado por um Player que declara a capacidade do host kiosk_lock.
ScreenKioskPatch— obrigatórios: lockScreenLevelChange— obrigatórios: source, id, playlist_id, screensScreenLevelChanges— obrigatórios: gained, lostO que uma gravação faz nas programações das telas que ela altera: as campanhas cujo público elas passam a integrar (gained) ou deixam (lost), e as playlists padrão de pasta que passam a ser ou deixam de ser o padrão delas. screens conta as telas afetadas por nível.
Em uma gravação de tag, uma entrada de campanha informa a participação no público: toda campanha ativa que as telas passam a integrar ou deixam de integrar, quer ela toque ali, quer não, o que depende da playlist padrão da tela. Uma movimentação ou alteração de pasta lista as campanhas cujo público por pasta se move em telas que as reproduzem.
ScreenLink— obrigatórios: hint, created_atUma URL do Player que abre uma tela em um navegador que não guarda armazenamento, como uma fonte de navegador do vMix ou do OBS.
ScreenLinkSessionRequest— obrigatórios: screen_linkO segredo do link da tela mais as dicas opcionais host, playback e player. Membros desconhecidos são ignorados, e host, playback e player são lidos com tolerância (docs/player-compatibility.md §1.1). O segredo é uma credencial: nunca é registrado em log nem devolvido.
ScreenLinkSummary— obrigatórios: hint, created_atO link da tela, sem sua url. Presente apenas enquanto a tela tem um link. Somente leitura; POST e DELETE /api/screens/{id}/link o alteram.
ScreenList— obrigatórios: itemsScreenLocation— obrigatórios: latitude, longitudeOnde uma tela está, em graus decimais, com um nome de lugar curto opcional e um endereço de rua. Um posicionamento de card o lê pelo token {screen.location}, e a lista de telas filtra por distância de um ponto (near).
ScreenLocationPatch— obrigatório: locationUma alteração de onde uma tela está (patchScreenLocation). O corpo não tem outro membro.
ScreenMaintenanceAccepted— obrigatórios: command_id, command, expires_at, stateScreenManifestUpgrade— obrigatórios: desired_revision, active_revision, desired_playlist, active_playlist, state, code, attempt, retry_at, missing_page_count, state_since, reported_atEstado de atualização de manifesto computado sempre presente para esta tela, derivado na leitura a partir da sua revisão desejada emitida ou meta de conteúdo de playlist compartilhada enfileirada, sua última revisão de manifesto ativa reconhecida pelo servidor (manifest.activated), e o último slot de relatório manifest.upgrade aceito.
Estado do projeto somente leitura: nenhum corpo pode escrevê-lo, e nenhum relatório promove uma concessão. active_revision é a última ativação reconhecida, não prova que todas as sessões simultâneas já a exibem.
Estar offline nunca gera falha, e um retry_at atrasado em estado de nova tentativa é apresentação do cliente, nunca julgamento do servidor. desired_revision null é nenhum. estado pendente nomeia uma revisão desejada sem relatório correspondente; ativando nomeia um alvo já na tela cujo reconhecimento ainda está pendente; um slot de relatório cuja revisão parou de corresponder a desired_revision é ignorado até que um novo relatório corresponda, então um novo manifesto desejado deriva pendente sem limpar nada.
Antes que o próximo contato do manifesto emita a concessão desejada de uma edição compartilhada, a revisão desejada e a playlist podem expor essa meta enfileirada como intenção somente leitura; não concede acesso. Identidade ativa sempre vem da concessão histórica exata reconhecida. Uma ativação mais antiga não pode anunciar a meta enfileirada mais nova como atual.
ScreenMove— obrigatórios: folder_idPelo menos um id entre screen_ids e folder_ids, no máximo 1000 no total.
ScreenMoveResult— obrigatórios: screens, folders, levelsScreenNamePatch— obrigatórios: nameO novo nome de uma tela (patchScreenName). O corpo não tem nenhum outro membro.
ScreenNotJudged— obrigatórios: code, detailAlgo que a explicação não julga.
ScreenObservation— obrigatórios: observed_at, surfacesSuperfície de reprodução reportada pelo Player. Ausente na Tela até o primeiro PUT aceito /screen/observation. Somente leitura na API do projeto; ScreenPatch, PairScreen, corpos de pareamento, corpos de sessão, canvas, manifesto de runtime e POST /screen/reports não podem escrevê-la.
ScreenObservationSurface— obrigatórios: id, width, height, pixel_ratio, presentationScreenOutage— obrigatórios: offline_sinceA interrupção de presença mais recente da tela e, quando o primeiro relatório de saúde depois da volta a decide, por que a tela sumiu. Uma nova interrupção a substitui; uma tela que nunca ficou offline desde que as interrupções passaram a ser registradas não tem nenhuma.
A causa vem dos contadores de tempo de atividade do próprio Player naquele relatório, lidos em relação à interrupção e nunca em relação ao relógio do dispositivo: device_restart (o dispositivo iniciou depois que a interrupção começou), app_crash (o Player iniciou e a contagem de falhas de 24 horas subiu), app_restart (o Player iniciou e o dispositivo não), network (nenhum iniciou e nada aponta para o screenRIG) e platform (nenhum iniciou, e um relatório player.stream_down chegou ao screenRIG durante a interrupção, ou o observador de presença estava fora do ar ou se recuperando quando a tela silenciou). likely_cause fica ausente quando desconhecida, e permanece desconhecida em vez de adivinhar: um relatório sem tempos de atividade, um muito perto do início da interrupção, uma reinicialização depois da volta da tela e um relatório do Player dentro de um minuto da reconexão não decidem nada.
Um relatório só decide dentro de 35 minutos depois da volta da tela. device_restart não distingue queda de energia de reinicialização, e network não distingue a rede da própria tela da rede acima dela.
Decidir isso acrescenta uma vez o evento só do projeto screen.outage_classified, com os detalhes {offline_since, back_at, likely_cause, evidence, online_event_id}; a notificação de resolução de uma tela offline nomeia a causa quando ela já está decidida no momento do envio do aviso. Os leitores tratam como desconhecido um likely_cause que não conhecem. Somente leitura; nunca autorização.
ScreenPatch— obrigatórios: noneScreenPlayPageAccepted— obrigatórios: screen_id, playlist_id, page_id, manifest_revision, expires_atScreenPlayPageDetails— obrigatórios: page_id, playlist_id, manifest_revision, expires_atobjeto detalhes em um evento durável player.play_page.
ScreenPlayPageWrite— obrigatórios: page_idScreenPlayerIdentity— obrigatórios: legacy, seen_atIdentidade afirmada a partir do último runtime pareado mint. Metadados de display somente leitura, nunca autorização. Concessões internas e campos mint são retidos.
ScreenPlaylistPatch— obrigatórios: playlist_idUma atribuição da playlist de uma tela (patchScreenPlaylist). O corpo não tem nenhum outro membro.
ScreenPlaylistSchedule— obrigatórios: entries, updated_atProgramação da playlist avaliada pelo servidor. Nunca chega ao manifesto de tempo de execução; o manifesto é construído a partir da playlist efetiva que ele seleciona. Grave com PUT /api/screens/{id}/playlist-schedule.
ScreenPlaylistScheduleView— obrigatórios: entriesScreenPlaylistScheduleWrite— obrigatórios: entriesScreenPresenceHistory— obrigatórios: items, next_cursorScreenPresenceTransition— obrigatórios: at, stateScreenProvisioning— obrigatórios: screen, public_url, provisioning_url, expires_atScreenRebootAccepted— obrigatórios: reboot_id, expires_at, stateScreenRebootSchedule— obrigatórios: enabled, windows, updated_atAs janelas em que o backend reinicia a tela. Presente enquanto uma está definida.
ScreenRebootScheduleView— obrigatórios: reboot_schedule, next_reboot_atScreenRebootScheduleWrite— obrigatórios: enabled, windowsScreenRecoveryHost— obrigatórios: noneO que o dispositivo que solicita recuperar esta tela informa ser, copiado do objeto host do início do pareamento. Apenas campos descritivos; nunca carrega duid, serial ou mac. Campos ausentes não foram reportados.
ScreenRecoveryPending— obrigatórios: expires_atPresente enquanto uma sessão de pareamento nativa que apresentou a identidade de hardware desta tela aguarda a confirmação do projeto proprietário com POST /api/screens/{id}/recovery/confirm. Carrega o prazo, que é a própria expiração da sessão de pareamento, e os campos descritivos do host do dispositivo ofertante (nunca duid, serial ou mac).
Um DUID é legível por qualquer aplicativo no painel, então uma oferta é uma superfície de phishing: compare host.model e host.firmware com o display à sua frente antes de confirmar.
O servidor recusa uma oferta enquanto a chave vinculada à tela mostrou atividade nos últimos dez minutos (mint de sessão, stream em execução, busca de manifesto ou heartbeat de presença), e aceita no máximo três ofertas por tela por hora móvel; uma nova oferta substitui a pendente. Ausente uma vez confirmada, expirada ou reivindicada como nova tela. Somente leitura.
ScreenReloadAccepted— obrigatórios: reload_id, expires_at, stateScreenReplaceWrite— obrigatórios: withScreenScheduleEntry— obrigatórios: id, playlist_idScreenScheduleEntryWrite— obrigatórios: playlist_idUma entrada de programação de playlist, um nível da pilha própria da tela (packages/schedule-contract SEMANTICS.md, Levels and the stack). id é opcional (entry_N é atribuído em ordem quando omitido) e único na programação.
Vigora enquanto todos os seus membros de regra vigoram: from (inclusive) e until (exclusivo), limites civis com precisão de minuto e sem deslocamento; uma ocorrência de windows, monthly ou dates (nenhum dos três se repete todo dia) cuja data não está em except; data, uma condição de dados do card; interaction, enquanto alguém está usando a tela.
Uma entrada define pelo menos um membro de regra. data, interaction, covers e um bloqueio displays que deixa saídas de fora são respeitados por um Player que resolve sua própria pilha; a resolução do servidor para outros Players ignora essa entrada (stack_only).
ScreenSchedulePreviewRequest— obrigatórios: entriesScreenScheduleRevision— obrigatórios: revision, created_at, change, current, entriesUma revisão armazenada da programação de playlist de uma tela: sua lista entries inteira após uma gravação (sem entries: a tela não tinha programação). revision é a revisão da tela na gravação. change é edited, restored (uma cópia de uma revisão anterior, nomeada por restored_from) ou baseline (a programação que a tela tinha quando seu histórico começou).
ScreenScheduleRevisionList— obrigatórios: itemsScreenScheduleWindow— obrigatórios: daysUma janela screenrig.schedule/v1 no fuso horário da tela. Os dias são armazenados de segunda a domingo. Omitir início e fim para o dia inteiro. end <= start cruza a meia-noite e o dia de início é o dono (sex 22:00-02:00 se estende até a manhã de sábado); bordas iguais executam 24 horas completas.
ScreenScope— obrigatórios: folder_ids, screen_idsSobre o que um membro ou agente com escopo pode agir (docs/screen-scope.md): as telas nas pastas de telas listadas e em todas as pastas dentro delas, e as telas listadas. Pelo menos um id no total. Um id que não nomeia nenhuma pasta ou tela existente do projeto quando gravado é invalid_request na sua posição; uma exclusão posterior deixa um id morto, que não concede nada.
O escopo é lido a cada requisição, então uma alteração vale já na próxima. Tags nunca são escopo.
ScreenScreenshotAccepted— obrigatórios: capture_id, expires_atScreenScreenshotFailedDetails— obrigatórios: capture_id, reasonobjeto detalhes em um evento durável screen.screenshot_failed.
ScreenScreenshotReadyDetails— obrigatórios: capture_id, bytes, width, height, sha256objeto detalhes em um evento durável screen.screenshot_ready. Pixels e chaves do objeto não estão presentes.
ScreenScreenshotRequestedDetails— obrigatórios: capture_id, expires_at, max_width_divisor, max_height_divisor, format, quality, max_bytesobjeto detalhes em um evento durável screen.screenshot_requested. Bytes da imagem e chaves do objeto não estão presentes.
ScreenScreenshotStatus— obrigatórios: stateScreenStackStatus— obrigatórios: manifest_revision, levels, playing, reported_atO que o Player da tela informou por último sobre sua pilha (docs/player-compatibility.md §6.11): a prontidão de cada nível e o nível que cada display mostra em cada região (a página e qualquer faixa). Presente apenas para um Player que resolve a própria pilha, enquanto essa pilha estiver atual.
ScreenStatus— obrigatórios: chip, observed_at, received_atO chip de status que o Player da tela relatou por último com PUT /screen/status (docs/player-compatibility.md §9.5): a condição de screenrig.overlay/v1 que vence em sua classificação, ou null quando o Player não mostra nenhum chip. Ausente até o primeiro relatório aceito. Limpo ao redefinir a identidade, desparear e arquivar.
É o último relatório do Player, portanto os consumidores o tratam como obsoleto quando a tela não está online (Screen.online), como todo relatório do Player. level e icon vêm do catálogo do backend para chip, nunca do Player, e ficam ausentes quando chip é null. Somente leitura na API do projeto. Nunca autorização ou admissão. ScreenPatch não pode escrevê-lo.
ScreenStatusChangedDetails— obrigatórios: chipobjeto detalhes em um evento durável screen.status_changed somente do projeto, acrescentado quando PUT /screen/status altera o chip, o level ou o icon armazenado. level e icon ficam ausentes quando chip é null. Este tipo não é um comando de audiência em tempo de execução e não é entregue em GET /screen/events.
ScreenStorage— obrigatórios: observed_at, received_at, volume, cache, durability, plan, transfer_24hRelatório de armazenamento do player sanitizado. Ausente até o primeiro PUT aceito /screen/storage. Limpo ao redefinir identidade, desparear e arquivar. Consumidores tratam received_at com mais de 24 horas como obsoleto. Somente leitura na API do projeto. Nunca autorização ou admissão. ScreenPatch não pode escrevê-lo.
ScreenStorageCache— obrigatórios: house_used_bytes, capacity_bytes, reserve_bytes, protected_bytes, fallback_bytes, warm_bytes, ad_headroom_bytesScreenStorageExcludedPage— obrigatórios: page_id, reasonScreenStorageForecast— obrigatórios: manifest_revision, fit, excluded_page_count, basis, received_atSeleção aproximada de alvo em estado estável (plano A.3 somente, sem transição) a partir da última capacidade reportada e do manifesto desejado da tela. Ausente sem relatório de armazenamento, que consumidores leem como desconhecido. base é reported_capacity. Recalculado quando chega relatório de armazenamento e quando a revisão do manifesto da tela muda. Nunca autorização ou admissão.
ScreenStorageForecastDryRun— obrigatórios: fit, excluded_page_count, required_bytes, capacity_bytes, basis, received_atExecução seca de ajuste pré-atribuição para uma playlist. fit, excluded_page_count e required_bytes vêm do plano A.3 seleção de alvo contra a última capacidade reportada da tela (baseado em reported_capacity); não há previsão de transição e nada é tratado como local. required_bytes é o custo retido de cada página da playlist. fit desconhecido significa que a tela não tem relatório de armazenamento, ou as referências de conteúdo da playlist não estão prontas; required_bytes, capacity_bytes e received_at são nulos então. received_at é o tempo de recebimento do relatório de armazenamento, e um relatório com mais de 24 horas está obsoleto mas ainda é usado para previsão, exatamente como Screen.storage_forecast.
É metadado somente leitura e nunca autorização ou admissão.
ScreenStorageForecastRequest— obrigatórios: playlist_idCorpo da simulação de pré-atribuição. playlist_id deve ser uma playlist do projeto autenticado; id de outro projeto ou desconhecido é not_found.
ScreenStoragePlan— obrigatórios: manifest_revision, fit, transition, required_bytes, target_bytes, excluded_pagesScreenStorageShortfall— obrigatórios: at, fit, required_bytes, capacity_bytes, excluded_page_countPresente enquanto o ajuste reportado do player é parcial, transition_blocked ou none_fit, exceto um plano transition_blocked cujo único motivo de bloqueio é anchor_unavailable: isso é um download falhado em um dispositivo com espaço, não uma falta. at é quando a condição começou.
É definido uma vez quando a condição começa e removido quando termina, cada transição adicionando um evento exclusivo do projeto, screen.storage_shortfall ou screen.storage_shortfall_cleared. Esses eventos não são entregues em GET /screen/events. Limpo com Screen.storage em reset de identidade, despareamento e arquivamento.
Metadados de saúde do projeto somente leitura; não altera revisão da tela ou autoridade do manifesto e nunca é autorização.
ScreenStorageTransfer— obrigatórios: new, refetch, repair, failedScreenStorageVolume— obrigatórios: total_bytes, available_bytesScreenSurfaceChangedDetails— obrigatórios: observed_at, surfacesobjeto detalhes em um evento durável screen.surface_changed do projeto. Pixels não estão presentes. Este tipo não é um comando de audiência em tempo de execução e não é entregue em GET /screen/events.
ScreenSuspendWrite— obrigatórios: messageScreenSuspension— obrigatórios: message, sincePresente enquanto a tela está suspensa (docs/player-compatibility.md §6.9). O manifesto de runtime traz o mesmo objeto como seu membro suspension.
ScreenTags— obrigatórios: noneTags do seletor de frota, de 0 a 16 tags únicas exatas, cada uma correspondendo à gramática de tags de mídia. No ScreenPatch o array substitui o conjunto inteiro e um array vazio o limpa; uma tag duplicada ou malformada é invalid_request. Alterar tags aumenta a revisão da tela (If-Match a protege) e anexa screen.updated com details.tags; nunca altera a revisão do manifesto.
Tags nunca estão no manifesto de tempo de execução e nunca na autorização.
ScreenTagsPatch— obrigatórios: tagsUm conjunto completo novo de tags da tela (patchScreenTags). O array substitui todas as tags que a tela carrega e um array vazio as limpa. O corpo não tem outro membro.
ScreenTakeover— obrigatórios: playlist_id, until, set_atA playlist que prevalece sobre as campanhas, a programação e a atribuição até until, ou até o takeover ser removido quando until é null.
ScreenTakeoverWrite— obrigatórios: playlist_idScreenTimelineSegment— obrigatórios: from, to, sourceScreenToastAccepted— obrigatórios: expires_atScreenToastDetails— obrigatórios: level, text, duration_ms, expires_atobjeto detalhes em um evento durável screen.toast. Cores não estão presentes.
ScreenToastWrite— obrigatórios: level, textScreenUptime— obrigatórios: itemsScreenVerbosityPatch— obrigatórios: noneUma mudança do nível de log e do nível de toast de uma tela (patchScreenVerbosity). O corpo nomeia pelo menos um dos dois membros e nenhum outro.
ScreenVerdict— obrigatórios: kind, playlist_id, verdictUm candidato no instante explicado. won: o resolvedor o escolhe (em uma tela cujo Player resolve sua própria pilha: preenche sua região em um display de destino). outranked: está em vigor, e by é o candidato que venceu. not_started: antes do seu from. ended: no seu until ou depois (um takeover: o seu fim). outside_hours: entre from e until, fora das suas janelas. conditional: em uma tela cujo Player resolve sua própria pilha, está válido pelo horário e é reproduzido enquanto também for satisfeita a condição observada apenas pelo Player (reason interaction ou data). off: não se aplica, e reason diz o motivo.
ScreenWall— obrigatórios: outputs, arrangementO vídeo wall que o Player de uma tela exibe: de duas a doze saídas que mostram uma tela única. Configurá-lo requer um Player que declarou a capacidade display.wall do host (docs/player-compatibility.md §6.5, §6.8). Uma playlist com um formato o abrange.
ScreenshotCaptureID— obrigatórios: nonePrefixo opcional stage_, qa_ ou development_, depois shot_ e um sufixo aleatório. Novos sufixos usam 16 caracteres alfanuméricos excluindo oOlL; sufixos legados retidos são aceitos.
SelectorPreview— obrigatórios: primitive, selector, matched_count, candidatesSelectorPreviewInput— obrigatórios: primitive, selectorSelectorPreviewMedia— obrigatórios: media_id, filename, tagsServiceClient— obrigatórios: id, project_id, name, capabilities, access, state, created_by, keys, secrets, created_at, updated_at, authenticated_requests, tokens_issuedServiceClientChange— obrigatórios: noneServiceClientKey— obrigatórios: kid, alg, thumbprint, jwk, added_atServiceClientList— obrigatórios: itemsServiceClientResult— obrigatórios: clientServiceClientSecret— obrigatórios: id, hint, added_atSessionDescription— obrigatórios: type, sdpSessionSSOStartRequest— obrigatórios: intentSignInPolicy— obrigatórios: password, passkey, passkey_enrollment_required, policy_revision, federatedPolítica de login de pessoa verificada. Padrões passivos preservam o login local. Uma política organizacional aplicada direciona o login pelo seu provedor de identidade.
SignInResetAccepted— obrigatórios: statusIdêntico para endereços conhecidos e desconhecidos; nenhum endereço, credencial, projeto ou status de entrega é retornado.
SignInResetRequest— obrigatórios: emailSignupCreated— obrigatórios: user_id, project_id, organization_idSignupHeardDetail— obrigatórios: noneO complemento de heard. kind nomeia uma opção de uma lista curta, e text é texto livre.
SignupPasskeyOptionsRequest— obrigatórios: email, display_nameSignupProfile— obrigatórios: noneAs respostas que uma pessoa dá após o cadastro. Todo membro é opcional e pode ser null, o que significa sem resposta ou ignorado.
SignupRequest— obrigatórios: email, display_name, marketing_email, credentialO endereço de e-mail e o nome de exibição são aqueles com os quais a cerimônia foi iniciada.
Source— obrigatórios: id, name, kind, target, enabled, config, preset, settings, secrets, refresh_seconds, stale_after_seconds, revision, status, created_at, updated_atSourceArea— obrigatórios: key, name, rooms, status, screensSourceCreate— obrigatórios: name, targetA configuração de JSON, CSV e Sheets pode definir key_template, uma chave de dados de cartão com tokens {screen.field.NAME}. O mapeamento passa a produzir {documents:[{fields:{NAME:VALUE},document:{...}}]} em vez de um documento. Cada saída é validada de acordo com o cartão de destino.
As chaves são únicas e ficam fora dos espaços de nomes de instâncias de cartão e feeds; source test exibe uma prévia do envelope e valida cada saída. Cada chave usa o período de validade da fonte. As chaves ausentes mantêm seus dados e sua expiração; falhas de armazenamento podem deixar gravações parciais, e a próxima execução tenta novamente.
SourceError— obrigatórios: code, message, atSourceKind— obrigatórios: noneDe onde os dados vêm. ics lê endereços iCalendar e webcal:// (os outros tipos estão descritos em /docs/sources). Um tipo que não está disponível responde invalid_request em kind.
SourceList— obrigatórios: items, next_cursorSourcePreset— obrigatórios: name, title, category, description, kind, cards, fields, secrets, refresh_seconds, min_refresh_seconds, stale_after_seconds, attribution, docsUma configuração pronta e testada da fonte de dados json.
SourcePresetAttribution— obrigatórios: textSourcePresetCard— obrigatórios: type, defaultSourcePresetField— obrigatórios: name, label, type, required, helpUma informação que uma pessoa dá a uma predefinição. Um texto é verificado com pattern e max_length, uma escolha é uma de options, e uma lista contém de min_items a max_items objetos preenchidos com fields.
SourcePresetList— obrigatórios: itemsSourcePresetOption— obrigatórios: value, labelSourcePresetSecret— obrigatórios: name, label, help, how_to_get, requiredUma credencial de que uma predefinição precisa, informada sob name em secrets.
SourceRoom— obrigatórios: key, status, screensSourceRoomRef— obrigatórios: id, nameSourceRoomScreen— obrigatórios: id, name, kind, field, value, statusSourceRooms— obrigatórios: source_id, room_field, room_key_prefix, area_field, area_key_prefix, rooms_as_of, summary, rooms, areas, screens, warningsO mapeamento de salas de uma fonte de dados que grava um documento para cada sala ou área: as salas que a fonte oferecia na última atualização boa, em relação às telas que as leem.
Uma tela pertence ao relatório de um campo quando tem um valor para ele, ou quando a própria playlist dela coloca um card cuja chave de dados é o prefixo de chave seguido de {screen.field.NAME}; uma playlist alcançada por uma pasta, campanha ou nível de programação não é seguida.
SourceRoomsSummary— obrigatórios: rooms, unmapped_rooms, areas, unmapped_areas, screens, missing_screens, unknown_screensSourceSecretView— obrigatórios: set, hint, updated_atSourceStaleAfter— obrigatórios: nonePor quanto tempo o card mantém os últimos dados bons da fonte quando ela não consegue atualizar, em segundos.
A fonte grava os documentos para que expirem tanto tempo depois da última atualização boa: se ela continuar falhando, eles ficam em branco em todas as telas (inclusive as offline) e as páginas cuja visibilidade depende dos dados recorrem às páginas seguintes; uma fonte que não falha renova o prazo a cada atualização.
Pelo menos o dobro de refresh_seconds. null mantém os últimos dados bons até a fonte atualizar de novo (o padrão de todos os tipos, exceto momentus, cujo padrão é 1800 quando o membro é omitido na criação). Uma fonte com falha que passa do período fica desatualizada (status.stale) e acrescenta source.stale.
SourceStatus— obrigatórios: state, last_attempt_at, last_success_at, last_change_at, next_run_at, failures, stale, data_expires_at, error, warnings, statsO que as últimas execuções fizeram. state é pending (ainda não executou), ok (a última busca foi bem-sucedida e o cartão aceitou o documento), error (a última execução falhou e o cartão manteve o último documento válido) ou disabled. ok não avalia se os dados de origem estão corretos ou atualizados, nem se alguma tela exibe o cartão.
SourceTarget— obrigatórios: card_idSourceTestRequest— obrigatórios: noneSourceTestResult— obrigatórios: document, valid, warnings, stats, fetched_atSourceUpdate— obrigatórios: noneStackLevel— obrigatórios: id, source, playlist_idUm nível da pilha de uma tela (packages/schedule-contract SEMANTICS.md, Levels and the stack). id é takeover, campaign:ID, schedule:ENTRY_ID, default ou folder:FOLDER_ID; record_id nomeia a campanha, a entrada ou a pasta, name o nome da campanha ou da pasta. rule ausente sempre vigora.
StackLevelRule— obrigatórios: noneStreamSource— obrigatórios: noneStreamSourceWrite— obrigatórios: noneUma fonte de stream. Uma fonte pode informar apenas sua url e deixar o esquema definir o protocolo: https é hls, rtsp e rtsps são rtsp.
SupportConversation— obrigatórios: id, subject, created_at, updated_at, last_sequence, human_requested, unread_staff, closedSupportConversationList— obrigatórios: items, next, unread_staff_totalSupportHours— obrigatórios: timezone, start, end, weekdays, excludes_bc_holidaysSupportMessage— obrigatórios: id, conversation_id, sequence, role, author, body, created_atSupportMessageList— obrigatórios: itemsSupportRead— obrigatórios: sequenceSupportStatus— obrigatórios: chat_allowed, available, staffed, human_available, hours, human_wait_seconds, docs_urlSupportSubmission— obrigatórios: conversation, messageSupportWrite— obrigatórios: bodyTrigger— obrigatórios: id, kind, label, target, default_for_seconds, url, username, revision, created_at, updated_atUm gatilho CAP ou um gatilho de sobreposição. Sua senha só é devolvida por create e rotate-secret.
TriggerAlert— obrigatórios: id, revision, state, status, msg_type, sender, identifier, until, screens, started_at, updated_atO último alerta do gatilho, dos campos da mensagem CAP.
TriggerAlertScreens— obrigatórios: targeted, taken_over, cleared, skipped, failed, pendingO que a última mudança de takeover fez. pulou telas sem playlist padrão, arquivadas ou desaparecidas, e, ao limpar, telas que outro takeover substituiu desde então.
Uma tela em uma pasta de telas protegida é deixada como está e contada em protected, não ignorada; encerrar um alerta (cancelar, fim de alerta, uma limpeza pelo operador) ainda limpa o que o gatilho definiu nessa tela.
TriggerClear— obrigatórios: noneTriggerDelivery— obrigatórios: at, outcome, status, bytes, request_idTriggerDeliveryList— obrigatórios: itemsTriggerList— obrigatórios: itemsTriggerOverlay— obrigatórios: show, style, enabled, signing, alerts, screens, pendingConfiguração e estado de um gatilho de sobreposição.
TriggerOverlayAlert— obrigatórios: id, until, started_at, updated_at, revisionTriggerOverlayReceipt— obrigatórios: outcome, trigger_id, until, activeTriggerOverlayRequest— obrigatórios: noneUm envio a um gatilho de sobreposição, como lido depois do mapping do gatilho (se houver). Um encerramento ignora todos os membros, exceto alert_id, clear e state.
TriggerOverlayScreens— obrigatórios: targeted, holding, taken_over, removed, edge_taken, skipped, failedO que a última distribuição fez nas telas de destino. Uma tela em uma pasta de telas protegida é deixada como está e contada em protected, não ignorada; encerrar o alerta ainda limpa o que o gatilho definiu nela.
TriggerOverlayStyle— obrigatórios: noneOs parâmetros estáticos do cartão de texto com que uma sobreposição é desenhada. O gatilho escolhe o layout.
TriggerOverlayWrite— obrigatórios: showTriggerPatch— obrigatórios: noneTriggerReceipt— obrigatórios: outcome, trigger_idTriggerSecretRotate— obrigatórios: noneTriggerTarget— obrigatórios: noneExatamente um entre tag e screen_ids.
TriggerWithPassword— obrigatórios: noneTriggerWithSecrets— obrigatórios: noneTriggerWrite— obrigatórios: label, targetUDPStreamSource— obrigatórios: protocol, group, portURLStreamSource— obrigatórios: urlUploadScope— obrigatórios: playlist_ids, folder_idsO que um uploader pode usar (docs/uploaders.md): as playlists cujas páginas ele altera e as pastas de mídia para as quais envia. As pastas são exatamente as listadas, nunca suas subpastas. Um id que, ao ser gravado, não nomeia nenhum objeto ativo do projeto é invalid_request em sua posição; uma exclusão posterior deixa um id morto, que não concede nada.
O escopo é lido a cada requisição, então uma mudança vale para a próxima.
UptimeDay— obrigatórios: day, online_s, offline_s, availability, coverageUm dia UTC. disponibilidade é online_s sobre online_s mais offline_s, nulo quando nada foi registrado. cobertura é a parte do dia (de cada dia de tela reportado em uma linha de projeto) com um estado registrado, de 0 a 1: uma lacuna reduz a cobertura e nunca é tempo offline. intervalos (linhas de tela) é quantos intervalos registrados tocaram o dia; telas (linhas de projeto) quantas telas tiveram um estado registrado; ao vivo marca um dia de tela que inclui o intervalo aberto até agora.
UsageFrame— obrigatórios: page_id, primitive_id, rectUma primitiva de imagem ou vídeo que nomeia o arquivo de mídia, com seu retângulo e a forma como o arquivo o preenche.
UsageScreen— obrigatórios: id, label, screen, playlist_ids, howUma tela ativa que usa pelo menos uma das playlists listadas.
UsageScreenHow— obrigatórios: playlist_id, usesUsageTagFilter— obrigatórios: all, any, noneO filtro de um seletor de tag. Um arquivo corresponde quando tem todas as tags de all, pelo menos uma tag de any quando houver tags em any, e nenhuma tag de none; o seletor de tag abreviado equivale a all com uma tag.
UsageTrack— obrigatórios: index, idUserEmailChangeAccepted— obrigatórios: noneUserEmailChangeRequest— obrigatórios: email, proofSolicita uma alteração de e-mail verificado usando prova recente. O e-mail atual permanece efetivo enquanto a verificação está pendente. O endereço antigo recebe apenas um aviso, sem link para desfazer.
VerifiedOrganizationDomain— obrigatórios: domain, organization_id, state, verified_atVersionResponse— obrigatórios: version, commit, api_version, protocol_versionWebhook— obrigatórios: id, url, event_types, enabled, revision, status, created_at, updated_atUm webhook do projeto. Registros de log do Player (runtime.reported) não são entregues.
Cada evento de projeto correspondente é enviado via POST para url como o mesmo objeto JSON que GET /api/events retorna, com cabeçalhos ScreenRig-Webhook-Id, ScreenRig-Event-Id (o cursor do evento, estável em tentativas), User-Agent e ScreenRig-Signature t=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<raw body>" chaveada com a string secreta>.
Uma resposta 2xx em até 10 segundos é sucesso; qualquer outro status, um redirecionamento (nunca seguido), um timeout, ou uma falha de conexão ou TLS é tentado novamente com backoff exponencial (30 segundos dobrando até uma hora, com jitter) por 24 horas e então falha. Após três timeouts consecutivos, o timeout da tentativa cai para 5 segundos até que uma resposta chegue.
Um webhook tem no máximo uma tentativa em voo e um projeto no máximo duas, em todos os servidores. A entrega é pelo menos uma vez e desordenada; deduplique pelo ScreenRig-Event-Id.
Cada tentativa é medida como um evento do stream de escuta (1 crédito após a franquia mensal de 10.000 API/SSE), e os mesmos eventos que são gratuitos no stream de escuta são gratuitos aqui: screen.*, runtime.*, alert_mute.*, application.event, playback.page_failed e agent.command.
Uma tentativa recusada antes de qualquer envio (url_rejected, dns_failed) não é cobrada. payment_required e secret_unavailable espaçam as tentativas, mas nunca contam para failing nem para a desativação automática. status é failing enquanto nenhuma entrega tiver sido bem-sucedida desde failing_since; após 72 horas de falha contínua, o webhook é desativado (disabled_reason delivery_failures) e notification.disabled é registrado.
WebhookDelivery— obrigatórios: id, webhook_id, event_id, event_type, state, attempts, created_atWebhookDeliveryAttempt— obrigatórios: attempt, at, status, error, duration_msWebhookDeliveryAttemptList— obrigatórios: itemsWebhookDeliveryList— obrigatórios: items, next_cursorWebhookEventTypes— obrigatórios: noneTipos de evento exatos, como screen.online, ou prefixos terminados em .*, como screen.* (todo tipo que começa com screen.). notification.test nunca é distribuído por uma assinatura; é enviado apenas por POST /api/webhooks/{id}/test.
WebhookHandshake— obrigatórios: noneUm handshake de fornecedor que a URL responde, para um fornecedor sem esquema de assinatura aqui. microsoft_graph responde a um POST que traz um parâmetro de consulta validationToken devolvendo o token decodificado como text/plain. monday responde a um POST JSON de {"challenge": "..."} com o mesmo JSON. trello responde à sua verificação HEAD com 200. azure_event_grid responde a um SubscriptionValidationEvent (aeg-event-type: SubscriptionValidation) com {"validationResponse": "<validationCode>"}. verify.vendor slack responde ao desafio url_verification assinado do Slack, e verify.vendor asana responde ao handshake X-Hook-Secret do Asana e guarda esse segredo para verificar os eventos dele.
Um handshake só é respondido para um webhook configurado para esse fornecedor, não grava nada, nunca é cobrado e não gasta orçamento de taxa, e é registrado no registro de entregas com o resultado handshake. Um webhook desativado não responde a nenhum.
WebhookList— obrigatórios: itemsWebhookPatch— obrigatórios: noneWebhookVerify— obrigatórios: vendor, secretA verificação de fornecedor de um webhook ou gatilho, como uma leitura a mostra. O segredo é sempre apenas uma dica.
WebhookVerifyVendor— obrigatórios: noneWebhookVerifyWrite— obrigatórios: vendorUm fornecedor cuja própria assinatura autentica uma postagem no lugar do segredo, porque esses fornecedores não conseguem enviar o nosso.
O cabeçalho e o esquema de cada um são do próprio fornecedor e fixos: github envia X-Hub-Signature-256, sha256= e o HMAC-SHA256 hexadecimal do corpo; stripe envia Stripe-Signature, t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>"> (vários v1 enquanto um segredo é trocado, t em até cinco minutos); shopify envia X-Shopify-Hmac-Sha256, o HMAC-SHA256 do corpo em base64; slack envia X-Slack-Signature, v0= e o HMAC-SHA256 hexadecimal de "v0:<X-Slack-Request-Timestamp>:<body>" (em até cinco minutos); linear envia Linear-Signature, o HMAC-SHA256 hexadecimal do corpo, e o membro webhookTimestamp do corpo (milissegundos Unix) deve estar dentro de um minuto; vercel envia x-vercel-signature, o HMAC-SHA1 hexadecimal do corpo; asana envia X-Hook-Signature, o HMAC-SHA256 hexadecimal do corpo com o X-Hook-Secret do handshake do Asana como chave; generic_hmac é qualquer remetente que assine com HMAC-SHA256 no cabeçalho que você nomear.
Uma postagem que traz uma assinatura válida é aceita sem o segredo, e o segredo continua funcionando ao lado. verify não pode ser combinado com signing. Uma postagem é julgada pelo corpo como chegou, antes de gastar qualquer orçamento de taxa. O Slack e o Asana também respondem aos handshakes deles (veja WebhookHandshake).
WebhookWithSecret— obrigatórios: id, url, event_types, enabled, revision, status, created_at, updated_at, secretUm Webhook mais seu segredo de assinatura. Retornado apenas por create e rotate-secret.
WebhookWrite— obrigatórios: url, event_typesWebsiteSetupCode— obrigatórios: code, expires_at