OpenAPI YAMLOpenAPI JSONproblemas YAMLResumen de la API
Índice de esquema
AccessLevel— obligatorios: noneleer (Solo lectura) < proponer < gestionar. Proponer lee, contribuye (multimedia, notas, comentarios, soporte, retroalimentación, capturas de pantalla, borradores de anuncios) y convierte los cambios en listas de reproducción y pantallas en revisiones (docs/reviews.md).
AccessLimitedBy— obligatorios: nonePor qué effective_access es menor que el acceso de la credencial. proyecto: el proyecto requiere revisión para cambios de agente. persona: la persona responsable del agente es un miembro que no puede aprobar revisiones.
AdslotPageWrite— obligatorios: id, type, adslot_idEspacio publicitario de página completa. Como máximo 16 páginas de adslot, y al menos una página ordinaria sin visibilidad, son comprobaciones del servidor y no se expresan aquí.
AdvertisingAvailability— obligatorios: estimated_plays, booked_plays, available_plays, screens, observed_from, observed_to, flight_start, flight_endUna estimación: las ocurrencias de espacio que produjeron las pantallas seleccionadas durante la ventana observada, proyectadas sobre la vigencia, menos las reproducciones que otros objetivos directos aún necesitan en las mismas pantallas.
AdvertisingAvailabilityQuery— obligatorios: flight_start, flight_endAdvertisingCampaign— obligatorios: 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— obligatorios: name, daily_cap_mcr, lifetime_cap_mcr, flight_start, flight_end, networksAdvertisingCampaignList— obligatorios: campaignsAdvertisingCampaignNetwork— obligatorios: 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— obligatorios: seller_project_id, screen_ids, slot_ids, creative_idsAdvertisingCategory— obligatorios: noneLa categoría del anunciante. Dos anuncios de una misma categoría nunca se reproducen en la misma pausa publicitaria de una pantalla; un anuncio sin categoría nunca se separa.
AdvertisingCreative— obligatorios: id, revision, media_id, media_revision, sha256, kind, content_type, duration_ms, width, height, bytes, state, created_atAdvertisingCreativeCreate— obligatorios: media_idAdvertisingCreativeList— obligatorios: creativesAdvertisingCreativeReview— obligatorios: id, seller_project_id, creative_revision, state, created_atAdvertisingDaypart— obligatorios: start, endAdvertisingDeliveryReport— obligatorios: gross_mcr, fee_mcr, net_mcr, completed, interrupted, unbillable, rows, coverageAdvertisingDeliveryRow— obligatorios: screen_id, slot_id, reservation_id, gross_mcr, fee_mcr, net_mcr, completed_atAdvertisingDirectCampaign— obligatorios: 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— obligatorios: name, advertiser, flight_start, flight_end, media_idsUna campaña directa: el acuerdo propio del vendedor con un anunciante externo sobre su propio inventario publicitario. No mueve dinero.
AdvertisingDirectCampaignList— obligatorios: direct_campaignsAdvertisingDirectPace— obligatorios: status, expected_playsEntrega frente al objetivo, que se acumula de forma uniforme a lo largo de la vigencia.
AdvertisingDirectPrice— obligatorios: model, amount, currencyEl precio del acuerdo que registró el vendedor. screenRIG nunca lo cobra; valora el informe.
AdvertisingDirectReport— obligatorios: campaign_id, name, advertiser, from, to, delivered_plays, reserved_plays, pace, plays, played_ms, not_played, rowsAdvertisingDirectReportRow— obligatorios: day, screen_id, slot_id, media_id, plays, played_msAdvertisingDirectValue— obligatorios: model, amount, currencyEl precio registrado aplicado a las reproducciones entregadas: por cada mil reproducciones para cpm, la tarifa completa para flat.
AdvertisingFillStats— obligatorios: from, to, occurrences, direct, marketplace, vast, unfilled, fill_rate, unfilled_reasons, daysOferta publicitaria del vendedor para todas las horas UTC que se solapan con la ventana solicitada: ocurrencias solicitadas, rellenos por origen y ocurrencias sin rellenar con el motivo de la primera solicitud. La solicitud abarca hasta 35 días; los límites efectivos pueden abarcar 35 días más una hora.
AdvertisingFillStatsDay— obligatorios: day, occurrences, direct, marketplace, vast, unfilled, fill_rateAdvertisingInventory— obligatorios: screen_id, revision, ads_enabled, audience_tags, rate_override_mcr_per_15s, rate_revision, created_at, updated_atAdvertisingInventoryList— obligatorios: inventoryAdvertisingInventoryWrite— obligatorios: ads_enabledAdvertisingJoinedInventory— obligatorios: inventory, slotsAdvertisingJoinedNetwork— obligatorios: seller_project_id, membership_id, policy, admission_generation, scope, price_change_pending, default_rate_mcr_per_15sAdvertisingJoinedNetworkList— obligatorios: networksAdvertisingMembership— obligatorios: id, seller_project_id, admission_generation, policy_revision, policy, scope, state, revision, created_at, updated_atAdvertisingMembershipList— obligatorios: membershipsAdvertisingMembershipScope— obligatorios: policy, screen_ids, slot_idsAdvertisingNetwork— obligatorios: id, revision, enabled, rate_revision, pricing_generation, seller_fee_bps, seller_fee_revision, created_at, updated_atAdvertisingNetworkCreate— obligatorios: nameAdvertisingQuote— obligatorios: id, campaign_id, campaign_revision, revision, state, expires_at, items, pricing_generations, created_atAdvertisingQuoteAccept— obligatorios: quote_idAdvertisingQuoteItem— obligatorios: seller_project_id, screen_id, slot_id, creative_id, duration_ms, rate_mcr_per_15s, play_price_mcr, pricing_generation, fee_bps, fee_revisionAdvertisingRate— obligatorios: rate_mcr_per_15sAdvertisingReportCoverage— obligatorios: mode, outcomes_completeCobertura de conteos de resultados de reproducción. Los totales monetarios siempre provienen de liquidaciones inmutables. Cuando outcomes_complete es falso, los conteos son límites inferiores observados y el historial faltante no está disponible, no es cero.
AdvertisingReview— obligatorios: id, creative_id, creative_revision, state, created_atAdvertisingReviewDetail— obligatorios: review, creativeAdvertisingReviewList— obligatorios: reviewsAdvertisingReviewRejection— obligatorios: reasonAdvertisingScope— obligatorios: screen_ids, slot_idsAdvertisingSellerCampaign— obligatorios: id, buyer_project_id, name, state, flight_start, flight_end, screen_ids, slot_ids, creative_ids, review_state, enabled, price_change_pending, updated_atUna campaña de comprador enviada, proyectada solo sobre la red del vendedor que llama.
AdvertisingSellerCampaignDelivery— obligatorios: completed, reserved_mcr, gross_mcr, fee_mcr, net_mcrReproducciones y cantidades liquidadas de por vida en la red del vendedor que llama, más su cantidad retenida actual.
AdvertisingSellerCampaignDetail— obligatorios: campaign, deliveryAdvertisingSellerCampaignList— obligatorios: campaignsAdvertisingSlot— obligatorios: 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— obligatorios: slotsAdvertisingSlotWrite— obligatorios: name, accepted_media, max_image_duration_ms, max_video_duration_msAdvertisingSpendReport— obligatorios: campaign_id, spent_mcr, reserved_mcr, completed, unbillable, pending, coverageAgent— obligatorios: id, name, agent_type, capabilities, state, authenticated_requests, metered_credits, created_atAgentCapability— obligatorios: noneUn área de capacidad de credencial de agente. Las capacidades son fijas cuando se crea la credencial; para cambiarlas, conecte un nuevo agente y desconecte el antiguo. El orden canónico es el de este enum; las listas de capacidades nunca contienen duplicados.
AgentConnection— obligatorios: connection_id, name, agent_type, status, capabilities, expires_at, created_atAgentDisconnectRequest— obligatorios: noneAgentInput— obligatorios: noneAgentList— obligatorios: itemsAgentScreenScopeUpdate— obligatorios: screen_scopeAgentSelfStatus— obligatorios: agent, connection_readyAlert— obligatorios: id, screen_id, condition, state, since, muted, attentionUna condición de pantalla mientras dura. Los lectores tratan una condición desconocida como una condición que no pueden nombrar.
AlertAcknowledge— obligatorios: noneAlertActor— obligatorios: kind, idAlertList— obligatorios: items, next_cursor, countsAlertMute— obligatorios: id, screen_ids, tags, until, created_atAlertMuteList— obligatorios: itemsAlertMuteWrite— obligatorio: untilAl menos un id de pantalla o una etiqueta.
AppStoreNotificationAcknowledgement— obligatorios: acknowledgedAppStoreNotificationRequest— obligatorios: signedPayloadAppStoreOffer— obligatorios: account_token, products, education_eligible, education_eligibility_source, can_purchase, current_plan_id, subscriptionAppStoreProduct— obligatorios: product_id, plan_idAppStoreSubscription— obligatorios: organization_id, plan_id, product_id, original_transaction_id, environment, expires_at, auto_renews, statusLa suscripción de App Store de una organización.
AppStoreTransactionRequest— obligatorios: signed_transactionApplication— obligatorios: id, name, revision, created_at, updated_atApplicationEventContext— obligatorios: primitive_id, codeApplicationEventReport— obligatorios: severity, code, contextApplicationList— obligatorios: itemsApplicationPlacement— obligatorios: playlist_id, playlist_name, page_id, primitive_id, release_id, release, controller, rect, canvas, screen_countUna primitiva de aplicación en una página de una lista de reproducción.
ApplicationRename— obligatorios: nameApplicationUploadCommit— obligatorios: sha256, compressed_bytesNombra de nuevo el archivo declarado; una confirmación que nombre otros bytes se rechaza con invalid_request.
ApplicationUploadDeclaration— obligatorios: sha256, compressed_bytes, expanded_bytes, file_countDeclara un tar.gz producido por la CLI, con los metadatos que una carga transmitida envía como encabezados.
ApplicationUploadSession— obligatorios: id, application_id, release_id, operation, upload_url, method, headers, expires_atApplicationUsage— obligatorios: placements, screensArchivedProjectDevice— obligatorios: screen_id, label, hostAuditActor— obligatorios: kindAuditActorKind— obligatorios: noneAuditClient— obligatorios: kindAuditEntry— obligatorios: id, scope, at, actor, source, action, resource, changesAuditFieldChange— obligatorios: path, before, afterAuditHead— obligatorios: scope, seq, hash, floor_seq, floor_hash, unsealed, formatAuditList— obligatorios: items, next_cursorAuditProblem— obligatorios: seq, code, detailAuditResource— obligatorios: typeAuditRevision— obligatorios: typeAuditSource— obligatorios: noneLa superficie por la que llegó un cambio: una sesión del panel, la API HTTP, la CLI screenrig, una llamada a una herramienta MCP, un miembro del personal con permiso de escritura, una llamada firmada de un dispositivo, un webhook entrante o el propio servidor (un proceso que aplica un cambio aprobado).
AuditVerifyResult— obligatorios: ok, scope, checked, head, problemsAutoTopUpDisabledSettings— obligatorios: enabledDeshabilitar conserva los importes guardados y el gasto mensual. Los campos de importe opcionales se ignoran, incluidos los borradores sin terminar.
AutoTopUpEnabledSettings— obligatorios: enabled, threshold_cents, amount_cents, monthly_limit_centsAutoTopUpSettings— obligatorios: noneAutoTopUpView— obligatorios: enabled, threshold_cents, amount_cents, monthly_limit_cents, paused, this_month_centsBIBrowse— obligatorios: 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— obligatorios: name, okBIConnection— obligatorios: id, project_id, kind, name, config, embed_origin, secret, last_test, revision, created_at, updated_atEl acceso de un proyecto a un sistema BI. Cada conexión pertenece a un solo proyecto.
BIConnectionConfig— obligatorios: noneBIConnectionList— obligatorios: items, next_cursorBIConnectionPatch— obligatorios: noneBIConnectionWrite— obligatorios: name, kind, configBISecret— obligatorios: set, hintCómo se muestra un secreto almacenado. El secreto en sí nunca se devuelve.
BITarget— obligatorios: noneQué muestra una vista. Grafana con una conexión: dashboard_uid (y opcionalmente un panel). Power BI con una conexión: workspace_id y report_id, con pages o rotate_all_pages. Tableau con una conexión: view (Workbook/View), con rotate_sheets. Web con una conexión: url. Sin una conexión: solo public_url (y rotate_sheets para Tableau).
BITestReport— obligatorios: at, ok, checksBIView— obligatorios: id, project_id, kind, name, target, refresh_s, rotate_s, fit, revision, status, embed_url, created_at, updated_atBIViewError— obligatorios: at, code, detailBIViewList— obligatorios: items, next_cursorBIViewPatch— obligatorios: noneBIViewStatus— obligatorios: last_ok_at, last_errorCómo le fue a la vista la última vez en pantalla. Solo cambia cuando cambia el resultado.
BIViewTest— obligatorios: at, ok, checksBIViewWrite— obligatorios: nameDefina connection_id con exactamente uno de url y target (para Tableau, url puede venir con un target que solo contiene rotate_sheets; una vista web toma url y ningún target), o kind (grafana, powerbi o tableau) con target.public_url solo.
BIWebCookie— obligatorios: name, value, domainUna cookie de un conjunto de cookies exportado de un navegador con la sesión iniciada.
BIWebSession— obligatorios: state, cookies, cookies_updated_at, last_login_at, login_failures, retry_atLas cookies y el inicio de sesión de una conexión web. state: idle (todavía nada; la primera captura inicia sesión), active, login_needed (la página mostró su página de inicio de sesión; la siguiente captura inicia sesión), paused (un inicio de sesión no tuvo éxito; el siguiente espera hasta retry_at), stopped (cinco inicios de sesión rechazados seguidos; cambie las credenciales) o expired (una conexión solo con cookies cuyas cookies dejaron de funcionar; dele un conjunto nuevo).
BIWebStep— obligatorios: actionUn paso de un inicio de sesión con script. goto: url (https, pública). fill: selector y value. click y wait_for: selector. press: value, un nombre de tecla como Enter o Tab, y opcionalmente selector para dar primero el foco. wait_ms: ms.
Un valor puede contener {{username}}, {{password}} y {{otp}}, que el renderizador rellena a partir del inicio de sesión; no ponga ninguna contraseña ni código en un valor, solo el marcador.
BillingBalance— obligatorios: wallet_revision, remaining_mcr, reserved_mcr, available_mcr, sources, withdrawalBillingPayer— obligatorios: kind, idBillingPaymentMethod— obligatorios: brand, last4, exp_month, exp_yearBillingPayoutStatus— obligatorios: rails_available, unavailable_reasonBillingPlanSubscription— obligatorios: subscription_id, plan, status, entitlement, cancel_at_period_endBillingPortalSession— obligatorios: urlBillingSourceBucket— obligatorios: remaining_mcr, reserved_mcrBillingSources— obligatorios: nonredeemable, purchased, ad_earnedBillingStatement— obligatorios: entries, next_cursorBillingStatementEntry— obligatorios: sequence, journal_id, kind, amount_mcr, amount_credits, amount_usd, occurred_atBillingUsageAllowance— obligatorio: storage_bytes, api_events, storage_mcr_per_gb_monthLo que un pagador obtiene gratis, como cadenas decimales canónicas. El ancho de banda nunca se cobra, por lo que no tiene asignación.
BillingUsageAmounts— obligatorio: bandwidth_bytes, storage_mcr, api_eventsBillingWithdrawal— obligatorios: eligible_earned_mcr, amount_usd_cents, threshold_exclusive_usd_cents, allowed, blockers, rails_availableBrowserLinkClaim— obligatorios: session_id, status, screenBrowserLinkClaimRequest— obligatorios: codeBrowserLinkClaimScreen— obligatorios: id, public_id, state, public_urlBrowserLinkEvent— obligatorios: session_id, status, event_id, expires_atBrowserLinkSession— obligatorios: session_id, code, display_code, status, expires_atBrowserLinkStatus— obligatorios: session_id, code, display_code, status, continuation_path, expires_atBrowserProvisioningCompletion— obligatorios: screen, public_urlBrowserProvisioningExchange— obligatorios: provisioning_token, exchange_idCLIEnrollment— obligatorios: project, agent, connection_ready, token, issuance_id, issuance_expires_at, invitationCLIEnrollmentOAuth— obligatorios: project, agent, connection_ready, issuance_id, issuance_expires_at, invitation, access_token, token_type, expires_in, refresh_token, refresh_expires_at, scopeInscripción en el formato de credencial oauth. La concesión de inscripción (cliente screenrig-cli, Manage en el nuevo proyecto con todas las capacidades, acceso de identidad Manage) emitió su primer par de tokens; un reintento exacto antes de issuance_expires_at devuelve el mismo par, reintentos posteriores devuelven credential_issuance_expired.
CLIEnrollmentRequest— obligatorios: client_idCampaign— obligatorios: id, name, playlist_id, audience, priority, paused, reserved, revision, created_at, updated_atUna campaña de contenido: cada pantalla de audience muestra playlist_id mientras from, until y windows se cumplen en la zona horaria de la pantalla. Si faltan from, until y windows, significa siempre.
CampaignAudience— obligatorios: noneQué pantallas selecciona una campaña: exactamente uno de all (coinciden todas las reglas), any (coincide al menos una), tag (la pantalla lleva la etiqueta), screen_id (esa pantalla) o folder (las pantallas de esa carpeta de pantallas y de cada carpeta que contiene, GET /api/screen-folders; la carpeta debe existir).
Las reglas se anidan hasta 3 niveles como máximo y una audiencia tiene como máximo 500 reglas. {"all": []} es cada pantalla del proyecto; en los demás casos all y any listan al menos una regla.
CampaignList— obligatorios: itemsCampaignPatch— obligatorios: noneCampaignPreviewRequest— obligatorios: bodyCampaignPromote— obligatorio: revisionCampaignReach— obligatorios: published, current, at, empty_groupsCuántas pantallas activas coinciden con la audiencia; una pantalla en emparejamiento no se cuenta.
Cuenta las coincidencias de la audiencia, no dónde se reproduce la campaña: una pantalla activa sin lista de reproducción predeterminada coincide y no reproduce nada. published es el recuento cuando la campaña se publicó por última vez (creada, o actualizada con una audiencia, playlist_id o paused distintos); current, el recuento más reciente.
Un cambio en las etiquetas, la carpeta o el estado de una pantalla activa, o un movimiento de carpeta, vuelve a contar las campañas cuya audiencia nombra lo que cambió unos 15 segundos después de que cesan los cambios y añade campaign.reach_changed (published, previous, current; republished true desde una publicación) y, por cada etiqueta o carpeta de la audiencia que empieza o deja de coincidir con pantallas, campaign.group_changed (kind, value, matched); una publicación que quita de la audiencia una etiqueta o carpeta vacía añade campaign.group_changed con removed true y matched 0.
Ausente en una campaña no publicada ni recontada desde que se incorporó el alcance.
CampaignRevision— obligatorios: revision, created_at, change, current, campaignUna revisión almacenada de una campaña: la campaña tal como quedó después de una escritura. change dice qué la originó: created, edited (una actualización o una importación de programación), restored o promoted (una copia de una revisión anterior, nombrada por restored_from), o baseline (la revisión que tenía la campaña cuando comenzó su historial, antes de que se registrara alguna escritura).
Un valor que este lector no conoce se lee como edited.
CampaignRevisionList— obligatorios: itemsCampaignScreens— obligatorios: campaign_id, counts, itemsCampaignStatus— obligatorios: campaign_id, screen_id, statusEl estado de una campaña en una pantalla.
En una pantalla cuyo Player resuelve y recibe su propia pila (schedule.stack), una campaña vigente por horario ocupa el lugar que le asigna esa pila: una campaña de franja o principal se reproduce en su región y un bloqueo de pantalla en sus pantallas; una campaña que no figura en la pila queda pending o blocked (playlist_unavailable). playing: la pantalla la muestra. pending: debería mostrarse y el cambio llega en un minuto. waiting: actualmente fuera de from, until o windows (next_start indica el inicio si ocurre dentro de ocho días). ended: until ya pasó. outranked: está vigente, pero gana una toma de control de la pantalla (reason takeover) u otra campaña (reason campaign, by). conditional: está vigente por horario y se reproduce mientras también se cumple la condición que solo observa el Player (reason interaction: alguien está usando la pantalla; data: su condición de datos). paused. blocked: no puede mostrarse aquí (reason no_default_playlist, no_timezone o playlist_unavailable: la lista falta, no está aprobada o no se ajusta a la pantalla; region_not_laid_out: no está dispuesta en ninguna pantalla de este equipo (su franja no cabe en ninguna pantalla de destino o su bloqueo no indica ninguna salida del equipo) y se excluye de su pila; o stack_only: el Player no resuelve su propia pila y solo uno que lo hace respeta una región, un bloqueo de pantalla, una interacción o una condición de datos). not_in_audience.
CampaignWrite— obligatorios: name, playlist_id, audienceCanvasBackground— obligatorios: none#RRGGBBAA canónico sólido en mayúsculas, o un degradado lineal de arriba hacia abajo.
CanvasColor— obligatorios: nonesRGB RRGGBBAA en mayúsculas canónicas.
CapPull— obligatorios: noneCAP fuentes que la plataforma lee para el disparador, con dónde están las pantallas objetivo y qué alertas cuentan: los parámetros de una colocación de tarjeta de alerta cap (docs/feeds.md "Alertas CAP"). Cada URL fuente se consulta una vez por minuto para cada disparador y colocación que la nombre.
Sin fuentes, se leen los feeds públicos de la plataforma que cubren la ubicación (NWS, Canada NAAD y MeteoAlarm para una ubicación con códigos de área). La alerta coincidente más severa toma el control de las pantallas objetivo exactamente como lo haría un mensaje enviado; cuando las fuentes no muestran ninguna (una cancelación o expiración), termina una alerta extraída.
Una fuente obsoleta o fallida nunca termina una alerta. location es obligatorio a menos que se proporcionen fuentes.
Capabilities— obligatorios: 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— obligatorios: cardsCardCreate— obligatorios: type, paramsCardDataEntry— obligatorios: key, document, bytes, sha256, revision, created_at, updated_atCardDataList— obligatorios: items, next_cursorCardDataSummary— obligatorios: key, bytes, sha256, revision, created_at, updated_atCardDataWrite— obligatorios: documentCardDetails— obligatorios: id, major, version, params_schema, data_schema, feed, tier, layouts, exampleCardFile— obligatorios: src, sha256CardInstance— obligatorios: id, project_id, type, major, params, created_at, updated_at, revisionCardKVWebhook— obligatorios: id, card_id, description, mapping, enabled, signing, url, created_at, updated_atUn webhook entrante que escribe el documento de datos de una tarjeta.
CardKVWebhookCreate— obligatorios: noneCardKVWebhookList— obligatorios: itemsCardKVWebhookRotate— obligatorios: noneCardKVWebhookUpdate— obligatorios: noneCardKVWebhookWithSecrets— obligatorios: noneCardKVWebhookWriteResult— obligatorios: statusCardRequirements— obligatorios: cardml, featuresCardSummary— obligatorios: id, title, short, category, tags, tier, layouts, majorsComments— obligatorios: commentsCommentsWrite— obligatorios: commentsConnection— obligatorios: id, project_id, provider, mode, name, status, last_error, config, secret, last_test, revision, created_at, updated_atEl acceso reutilizable de un proyecto a Microsoft o Google. Las fuentes, las conexiones de Power BI y las cuentas de sincronización de medios de SharePoint nombran una en config.connection_id en lugar de llevar credenciales propias.
ConnectionCheck— obligatorios: name, ok, detailConnectionConfig— obligatorios: noneLo que una conexión nombra además de su secreto; solo están presentes los miembros que usan su proveedor y su modo. Un secreto, una clave o un token de actualización nunca está aquí.
ConnectionConfigWrite— obligatorios: noneMicrosoft, modo own_app: ambos miembros. No se acepta para una conexión de Google ni para el modo screenrig_app.
ConnectionConsent— obligatorios: noneUna conexión devuelta con su enlace de consentimiento de un solo uso, que solo lleva una escritura que lo genera: crear una conexión en modo screenrig_app y POST /api/connections/{id}/connect. La persona que da su consentimiento abre consent_url antes de consent_expires_at. Es el enlace de un solo consentimiento: envíelo solo a esa persona. Una lectura de la conexión nunca lo lleva.
ConnectionError— obligatorios: code, message, atPor qué una conexión no funciona. El mensaje es una frase fija más, para Microsoft, el código AADSTS; nunca repite texto que envió un llamador.
ConnectionList— obligatorios: items, next_cursorConnectionPatch— obligatorios: noneConnectionSecret— obligatorios: set, hintCómo muestra una respuesta el secreto, la clave o el token de actualización de una conexión. El valor nunca se devuelve.
ConnectionTest— obligatorios: at, ok, checksConnectionWrite— obligatorios: provider, mode, nameCreatedProject— obligatorios: project, organizationCreditPurchase— obligatorios: id, status, amount_cents, credits, creditedDashboardAgentAction— obligatorios: project_idDashboardApplicationPreviewLaunch— obligatorios: release_id, launch_url, expires_atDashboardApplicationSummary— obligatorios: countDashboardBalance— obligatorios: credit_remaining, credit_included, credit_resetDashboardBoot— obligatorios: noneUna solicitud para el shell del panel. Cada miembro es el cuerpo que la ruta nombrada responde para esta misma sesión, y está ausente cuando esa ruta no respondería 2xx para ella. advertising_network es nulo cuando el proyecto no tiene red.
DashboardDisplayName— obligatorios: noneNombre para mostrar imprimible recortado, máximo 80 bytes UTF-8. Rechaza controles, texto con apariencia de URL, @, www., :// y material de credenciales. Nunca autorización.
DashboardEmail— obligatorios: email, email_verified, email_revisionLa vista de correo electrónico propia del usuario actual. La dirección verificada sigue vigente mientras un cambio está pendiente, y el candidato pendiente es visible solo para su propietario.
DashboardEmailVerificationAccepted— obligatorios: statusDashboardHealthSummary— obligatorios: display_disconnected, hot, crashing, stalePantallas activas con un informe de estado, contadas por condición; una pantalla puede contarse en varias. display_disconnected, hot y crashing cuentan solo pantallas en línea cuyo último informe está actual (no obsoleto); stale cuenta pantallas en línea cuyo informe tiene más de 35 minutos y nada más.
DashboardMe— obligatorios: user_id, display_name, email, password, passkeys, created_atDashboardMediaSummary— obligatorios: count, bytesContadores de medios listos del proyecto de la sesión. bytes cuenta solo los bytes de medios almacenados; no es el total used_bytes del proyecto, que también abarca los árboles de versiones y las entradas clave/valor. image_bytes, video_bytes y audio_bytes desglosan bytes por primitiva y siempre suman bytes mientras image, video y audio sean las únicas primitivas; si alguna vez se almacena otra primitiva, los tres suman menos que bytes.
DashboardMember— obligatorios: user_id, display_name, joined_at, passkeys, password, owner, externalDashboardMemberList— obligatorios: items, viewer_user_id, viewer_is_ownerDashboardPasskey— obligatorios: id, name, credential_id, provider, created_at, last_used_atDashboardPasskeyAssertion— obligatorios: ceremony_id, request_optionsDashboardPasskeyAssertionComplete— obligatorios: ceremony_id, credentialDashboardPasskeyComplete— obligatorios: ceremony_id, credentialDashboardPasskeyList— obligatorios: rp_id, user_handle, itemsDashboardPasskeyPatch— obligatorios: nameDashboardPasskeyProof— obligatorios: type, ceremony_id, credentialDashboardPasskeyRegistration— obligatorios: ceremony_id, creation_optionsDashboardPasswordLogin— obligatorios: email, passwordDashboardPasswordProof— obligatorios: type, passwordDashboardPasswordSet— obligatorios: password, proofDashboardPendingEmail— obligatorios: email, expires_atDashboardProject— obligatorios: status, created_at, email, screen_count, screen_limit, used_bytes, reserved_bytes, content_limit_bytes, event_retention_days, nameEstado, dirección de contacto, límites aplicados, uso, retención y estado público de créditos totales para un proyecto. El identificador interno del plan no se publica.
DashboardProjectList— obligatorios: itemsDashboardProjectListItem— obligatorios: id, name, last_used_atDashboardProjectReference— obligatorios: id, nameDashboardProjectSwitch— obligatorios: project_idDashboardProof— obligatorios: noneDashboardProofRequest— obligatorios: proofDashboardReauthentication— obligatorios: ceremony_id, optionsDashboardReauthenticationRequest— obligatorios: kindDashboardSSOProof— obligatorios: typePrueba mediante un inicio de sesión único reciente. Es válida mientras la sesión actual haya iniciado sesión a través del proveedor de identidad de la organización hace 10 minutos como máximo, y no lleva ceremonia ni secreto. De lo contrario, la ruta responde reauthentication_required y la persona inicia sesión de nuevo a través de su proveedor (POST /api/session/sso-starts, intent reauth).
DashboardScreenSummary— obligatorios: total, online, pairing_pending, active, archivedContadores de pantalla para el proyecto de la sesión. total es pairing_pending más activos y excluye archivados, coincidiendo con screen_count del proyecto. online se deriva de flujos de eventos en tiempo real emparejados exactamente como Screen.online; no es un booleano almacenado ni un latido del Player.
DashboardSession— obligatorios: user_id, display_name, email, project, auth_method, authenticated_at, expires_at, dev_auth, staff, shadow, passkey_enrollment_required, email_verification_requiredSesión de persona. Los identificadores son descriptivos; la cookie de sesión establece la autoridad. Una persona sin proyectos tiene project: null.
DashboardSessionOrganization— obligatorios: id, name, managedLa organización principal de la persona.
DashboardSessionSSO— obligatorios: organization_id, provider_name, linkedEl contexto de inicio de sesión único de la persona. Está presente siempre que la dirección verificada de la persona pertenece a un dominio cuya organización tiene una conexión de proveedor de identidad; linked es false hasta que la persona inicia sesión mediante ella o la vincula. Una sesión SSO dura 24 horas desde el inicio de sesión y no se prolonga con el uso.
DashboardStaffWriteMode— obligatorios: request_id, project_id, expires_atDashboardSummary— obligatorios: screens, media, applicationsDeletedProject— obligatorios: id, screens, paired_screens_active, paired_screens_archived, paired_screens_completed_pending, agents, media, applications, playlists, membershipsDemoRequestInput— obligatorios: email, country, screen_range, organization, budget, timezone, source, flow_idDemoResult— obligatorios: route, booking, review_requested, video_url, email, country, timezone, flow_id, sourceDemoSlots— obligatorios: slots, timezoneDemoSource— obligatorios: noneDeviceSessionRequest— obligatorios: noneCreación de sesión de navegador vinculada a cookie. El cuerpo es opcional. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1).
DisplayWindow— obligatorios: daysDocsPage— obligatorios: url, title, markdown, truncated, sections, corpus_commitDocsSearchResponse— obligatorios: results, corpus_commitDocsSearchResult— obligatorios: url, title, section, snippet, scoreEducationEligibilitySource— obligatorios: noneQuién decidió education_eligible. staff es una decisión del personal, en uno u otro sentido, y es definitiva. school_email es la decisión automática a partir de la dirección de correo K-12 verificada de un administrador (un dominio escolar como k12.ca.us o sch.uk; nunca un dominio educativo general como .edu o .ac.uk). La cadena vacía significa que nadie decidió.
EmailVerifyRequest— obligatorios: tokenEmailVerifyResult— obligatorios: purpose, statusEmptyPaymentRequest— obligatorios: noneEnrollmentInvitation— obligatorios: id, status, expires_atEvent— obligatorios: cursor, type, severity, message, atEventActor— obligatorios: user_id, display_nameUsuario del panel que causó esta mutación. Opcional y ausente en cada evento producido por un agente, la CLI, un reproductor o un trabajador, por lo que el campo distingue una mutación del panel en lugar de etiquetar todo el tráfico. Es solo atribución descriptiva y nunca autorización. display_name es el nombre que el usuario eligió al registrarse y no está verificado.
EventAgent— obligatorios: agent_id, name, agent_typeAtribución segura del agente principal presente solo cuando el evento fue causado directamente por un portador agente autenticado. Nunca es autorización.
EventCommand— obligatorios: name, methodLa solicitud del agente que causó este evento. Opcional y ausente en cada evento producido por un usuario del panel, un reproductor o un trabajador. Es solo una atribución descriptiva y nunca una autorización. Cada campo es escrito por el servidor desde la ruta que coincidió o desde el registro de problemas.
Un objeto comando no puede llevar un vector de argumentos, un cuerpo de solicitud, un encabezado ni ningún texto elegido por el llamador, y deliberadamente no hay campo para ello. name y method aparecen en cada evento que un agente solicita y confirma.
Los campos de resultado aparecen SOLO en un evento agent.command, que es el registro de una solicitud que no comprometió ningún evento de dominio: un evento de dominio comprometido es la prueba misma de que la solicitud tuvo éxito.
EventList— obligatorios: items, next_cursorFeedDocument— obligatorios: schema, fetchedAt, attributionFeedPending— obligatorios: key, state, retry_after_secondsFeedbackContext— obligatorios: noneSobre cerrado de diagnóstico. Cada miembro es un escalar opcional restringido, el anidamiento es estructuralmente imposible, y un miembro desconocido se rechaza con invalid_request. La forma existe para que un cliente no pueda persistir valores de argumentos, credenciales o datos de entorno de forma libre a través de ella.
FeedbackList— obligatorios: itemsFeedbackReplyWrite— obligatorios: textFeedbackResponse— obligatorios: id, text, status, created_atUna respuesta inmutable de personal o agente. Un autor ausente identifica una respuesta de personal. Texto plano (escápelo para cualquier contexto de visualización); el texto con forma de credencial se reemplaza con [redacted] antes de almacenarse.
FeedbackStatus— obligatorios: noneDónde está el personal sobre una presentación. waiting_on_user pide información al agente que envió; una respuesta del agente la reabre o un informe cerrado. Un informe "planificado" mantiene su estado.
FeedbackSubmission— obligatorios: id, kind, title, body, created_atUna presentación con alcance de proyecto. Sus propios campos (id, tipo, título, cuerpo, contexto, created_at) nunca cambian después de ser escritos. status está abierto hasta que el personal responde y luego es el estado de la respuesta más reciente; las respuestas de agente reabren informes que esperan entrada o cerrados, mientras que un informe "planificado" mantiene su estado.
Las respuestas son réplicas del personal y agentes, las más antiguas primero y como máximo 20, nunca editadas ni eliminadas. Cada réplica también añade un evento feedback.responded al flujo de eventos del proyecto (resource.id es el id de la presentación; detalles llevan response_id, status, fixed_in y author para respuestas de agentes, nunca el texto).
El id de la presentación nunca es autorización: solo el proyecto propietario lo lee.
FeedbackWrite— obligatorios: title, bodyFleetLink— obligatorios: id, label, enabled, tags, screens_created, revision, created_at, updated_atUna URL de Player que convierte cada dispositivo que la abre en su propia pantalla en este proyecto.
FleetLinkList— obligatorios: itemsFleetLinkPatch— obligatorios: noneFleetLinkWrite— obligatorios: labelGroupBinding— obligatorios: binding_id, group_id, group_name, role, created_atGroupBindingCreate— obligatorios: group_id, roleGroupBindingGroup— obligatorios: id, display_name, member_countGroupBindingList— obligatorios: bindings, groupsHLSStreamSource— obligatorios: protocol, urlHealthResponse— obligatorios: statusHealthTrend— obligatorios: items, next_cursorHealthTrendHour— obligatorios: hour, screens_reporting, hot, display_disconnected, crashingHostContext— obligatorios: platformEl entorno y hardware en el que se ejecuta un reproductor, según lo reportado por el reproductor. Un HINT que nombra un dispositivo; nunca una credencial, nunca autorización. Solo la clave Ed25519 autoriza.
Almacenado por pantalla, reemplazado por cada emisión de sesión que lo lleva, eliminado con la pantalla, nunca escrito en registros de operación, nunca reflejado en respuestas de problemas y nunca devuelto a ningún proyecto que no sea el del propietario. Solo lectura en la API del proyecto; ScreenPatch no puede escribirlo.
HostDevice— obligatorios: noneIdentificadores de hardware opcionales. duid y serial son los únicos dos que consulta la pista de recuperación; una lectura fallida en el reproductor omite el campo.
IceServer— obligatorios: urlsUn RTCIceServer. Se eliminan las URL del puerto 53 porque los navegadores las bloquean y no se transmite nada de forma incremental.
IdentityProvider— obligatorios: connection_id, kind, preset, name, jit, service_provider, ready_to_require, policy, revision, created_at, updated_atLa conexión de inicio de sesión único de la organización. No contiene ningún secreto.
IdentityProviderCertificate— obligatorios: sha256, subject, not_afterIdentityProviderOIDC— obligatorios: issuer, client_id, client_secret_set, scopesIdentityProviderOIDCWrite— obligatorios: client_idIdentityProviderSAML— obligatorios: idp_entity_id, idp_sso_url, certificatesIdentityProviderSAMLWrite— obligatorios: noneIdentityProviderServiceProvider— obligatorios: oidc_redirect_uri, saml_entity_id, saml_acs_url, saml_metadata_urlLos valores que se ingresan en el proveedor de identidad, derivados del origen del panel y del id de la conexión.
IdentityProviderTest— obligatorios: at, ok, subject_presentEl resultado del último inicio de sesión de prueba mediante la conexión.
IdentityProviderWrite— obligatorios: kind, preset, name, proofInvitation— obligatorios: id, kind, delivery, status, project_id, created_at, expires_atInvitationAcceptRequest— obligatorios: token, modeSe requieren nuevas credenciales para create_login y reset. El enlace create_login requiere la cookie de registro verificada y usa su nombre para mostrar y correo electrónico.
El correo electrónico create_login requiere display_name. signed_in necesita iniciar sesión en diez minutos o una prueba invitation_accept vinculada al id de invitación. buyer solo aplica a ad_buyer; los nuevos proyectos de buyer inician con crédito cero.
InvitationAccepted— obligatorios: kind, project_id, nextInvitationAdvertising— obligatorios: screen_ids, slot_ids, policyAlcance propiedad del vendedor: al menos una pantalla o espacio publicitario. Se aceptan solo pantallas, solo espacios o ambos.
InvitationBuyer— obligatorios: noneInvitationCreate— obligatorios: kindLa entrega por correo electrónico requiere correos electrónicos. La entrega por enlace es solo project_member y omite correos electrónicos y publicidad. ad_buyer requiere publicidad. Máximo 50 invitaciones pendientes de miembros y compradores por organización; una invitación pendiente por correo electrónico del mismo tipo y dirección se reutiliza.
InvitationCreated— obligatorios: invitationsInvitationCredential— obligatorios: noneInvitationEmailVerificationAccepted— obligatorios: status, expires_atInvitationEmailVerificationRequest— obligatorios: token, display_name, emailInvitationInspect— obligatorios: id, kind, delivery, project, expires_at, person, modes, methodsInspección no consumidora. person es nulo para enlaces. Nunca informa estado de verificación de registro, salvo que un restablecimiento de inicio de sesión, cuyo enlace se envió solo a la dirección, indica si completarlo reemplaza una cuenta no verificada (replaces_unverified_account). Los modos de correo electrónico son create_login o signed_in; los enlaces ofrecen ambos, y los restablecimientos ofrecen reset.
InvitationInspectRequest— obligatorios: tokenInvitationIssued— obligatorios: id, kind, delivery, status, project_id, created_at, expires_atInvitationKind— obligatorios: noneInvitationList— obligatorios: items, next_cursorInvitationPasskeyOptionsRequest— obligatorios: token, modeInvitationPasswordCredential— obligatorios: type, passwordInvitationSignup— obligatorios: email, display_name, verified, expires_atInvitationStatus— obligatorios: noneKVEntry— obligatorios: application_id, key, value_base64, content_type, bytes, sha256, revisionKVList— obligatorios: items, next_cursorKVSummary— obligatorios: application_id, key, content_type, bytes, sha256, revisionKVWebhook— obligatorios: id, application_id, key, description, url, created_atUn webhook entrante de clave/valor. Su secreto solo se devuelve al crear y rotar el secreto.
KVWebhookCreate— obligatorios: keyKVWebhookDelivery— obligatorios: at, outcome, status, bytes, request_idKVWebhookDeliveryList— obligatorios: itemsKVWebhookList— obligatorios: itemsKVWebhookWithSecret— obligatorios: noneKVWebhookWriteResult— obligatorios: key, revision, bytes, sha256, content_type, updated_atKVWrite— obligatorios: value_base64LevelDate— obligatorios: dateUna fecha civil concreta, el día completo o entre start y end como los de una ventana. Empieza entre from y until y no es una fecha de excepción.
LevelInteraction— obligatorios: noneEl nivel rige mientras alguien usa la pantalla: desde un toque, clic o tecla hasta que pasan idle_s segundos sin entrada. Uso típico: una página interactiva sobre un bucle de atracción. idle_s se almacena y se devuelve (60 si se omite).
LevelMonthly— obligatorios: noneUna repetición mensual en la zona horaria de la pantalla: day (de 1 a 31; un mes sin ese día la omite), o nth (de 1 a 4, -1 la última) y weekday. start y end como los de una ventana; la fecha en que empieza la repetición es la que le corresponde.
LinearGradientBackground— obligatorios: type, stopsDegradado lineal de arriba hacia abajo. No hay campo de ángulo. stops tiene de 2 a 8 entradas, estrictamente crecientes en [0, 1], la primera en=0, la última en=1.
LinearGradientStop— obligatorios: at, colorUna parada en un fondo lineal de arriba a abajo. at=0 es el borde superior, at=1 es el borde inferior.
LiveFrames— obligatorios: live_id, stateProgreso del adaptador de fotogramas de una sesión en vivo. Esquema abierto.
LiveSession— obligatorios: state, screen_id, viewer_urlSesión en vivo de una pantalla. Esquema abierto.
LiveStartRequest— obligatorios: noneLiveViewer— obligatorios: viewer_id, live_id, offer, ice_servers, expires_atOferta del relé para un espectador. Esquema abierto.
LiveViewerAnswer— obligatorios: answerManifestActivatedContext— obligatorios: manifest_revisionManifestActivatedReport— obligatorios: severity, code, contextManifestUpgradeContext— obligatorios: manifest_revision, stateManifestUpgradePlaylist— obligatorios: id, name, revisionLa identidad de la lista de reproducción detrás de una revisión deseada emitida o en cola: desired_playlist usa su concesión deseada exacta o el objetivo de contenido compartido de solo lectura para la asignación efectiva actual antes de la emisión de la concesión. active_playlist siempre usa la concesión histórica reconocida exacta, nunca una asignación o edición de contenido más reciente. id más revisión son la versión de la lista de reproducción que un operador lee como Target v42 / Playing v41; name es el nombre para mostrar de la lista de reproducción, nulo cuando la lista de reproducción ya no existe o no puede resolverse.
Una concesión activa histórica faltante es nula, nunca una revisión fabricada. Una meta deseada en cola no concede acceso a contenido.
ManifestUpgradeReport— obligatorios: severity, code, contextUna instantánea del ciclo de vida de actualización de manifiesto de última victoria para la pantalla de sesión.
El servidor almacena un espacio por pantalla y deriva el modelo de lectura del proyecto Screen.manifest_upgrade a partir de él; se acepta un informe obsoleto, reemplazado o preactivación posterior sin cambio (202), nunca se rechaza como conflicto, y ningún informe promueve una concesión. severity es solo para el sobre: la gravedad del evento derivado del proyecto proviene del estado.
McrString— obligatorios: noneCantidad exacta de milicréditos enteros como cadena decimal canónica. 1 crédito es 1000 mcr.
Media— obligatorios: id, filename, primitive, content_type, operation_id, sha256, bytes, revision, state, created_at, updated_atMediaAvailability— obligatorios: noneCuándo pueden elegir el medio los selectores dinámicos, en la zona horaria de cada pantalla: dentro de [from, until) y en una repetición de windows, monthly o dates (si no hay ninguno de los tres: todos los días) cuya fecha no esté en except. La gramática de niveles del horario sin data ni interaction.
MediaAvailabilityPatch— obligatorios: availabilityMediaCommit— obligatorios: content_type, bytes, sha256Declara solo lo que el servidor puede volver a verificar contra el objeto almacenado byte por byte. La identidad del códec no se declara aquí: el servidor la deriva del contenedor durante la verificación asincrónica, por lo que un cliente no puede afirmar un códec que controle el comportamiento del reproductor.
MediaFolder— obligatorios: id, name, parent_id, revision, created_at, updated_atUna carpeta de biblioteca de medios. Un selector de lista de reproducción por:carpeta reproduce directamente los archivos listos dentro de ella, no los de sus subcarpetas.
MediaFolderCreate— obligatorios: nameMediaFolderList— obligatorios: itemsMediaFolderPatch— obligatorios: noneMediaGenerationReference— obligatorios: noneExactamente uno de media_id o b64. Se rechazan URLs HTTP.
MediaGenerationRequest— obligatorios: promptSolicita una imagen fija. El prompt son bytes del cliente y nunca se devuelve, registra ni publica en SSE del proyecto. aspect_ratio predeterminado es 16:9. quality es bajo, medio o alto y predetermina medio. tag se almacena en el objeto multimedia listo como una etiqueta de carga. Referencias opcionales son base64 en línea o media_id del proyecto; URLs HTTP son rechazadas.
El tamaño sumado de todas las referencias de una solicitud, tanto en línea como media_id, no debe exceder 25165824 bytes (24 MiB); una solicitud que supere el límite será rechazada.
En Standard, el saldo restante que no puede cubrir el doble del costo del proveedor de la imagen fija, redondeado a créditos enteros, después del piso de introducción (negativo 1,000,000 créditos hasta 2027-01-01, luego cero) devuelve payment_required, excepto en desarrollo. Los demás planes nunca se rechazan por su saldo.
MediaGenerationUsage— obligatorios: quality, credits, usdDébito para el cliente por una imagen fija almacenada, el usage del result de una Operation media.generate en succeeded. quality es la calidad solicitada y cambia la imagen, no un precio fijo. Los créditos son el doble del costo para el vendedor de esa imagen fija, redondeados a créditos ScreenRig enteros. usd es el equivalente en dólares de esos créditos.
Nunca se muestra nombre del vendedor, costo del vendedor ni conteo de tokens.
MediaList— obligatorios: itemsMediaMove— obligatorios: folder_idAl menos un id entre media_ids y folder_ids, máximo 1000 en total.
MediaMoveResult— obligatorios: media, foldersMediaReplace— obligatorios: upload_idMediaRestore— obligatorios: noneMediaRestorePending— obligatorios: status, review, warningsMediaRestored— obligatorios: media, warningsMediaSelectorTagFilter— obligatorios: noneMediaSelectorWeights— obligatorios: nonePartes de un selector ponderado, indexadas por ID de medio o tag:NAME.
El peso de un elemento es su clave de ID de medio si existe; si no, la primera clave tag:NAME, en orden alfabético, entre las etiquetas que lleva, con ese peso repartido por igual entre los elementos de la selección que la comparten, de modo que la parte de un patrocinador se mantiene sea cual sea el número de creatividades; si no, el elemento cuenta como su propio grupo con peso 1.
Cada ciclo completo reproduce cada elemento exactamente según su parte.
MediaSingleTagPatch— obligatorios: tagMediaSync— obligatorios: id, project_id, account_id, provider, name, folder_id, every_s, state, source, next_run_at, revision, created_at, updated_atUna carpeta de origen mantenida al día con una carpeta de medios.
MediaSyncAccount— obligatorios: id, project_id, kind, name, config, secret, state, revision, created_at, updated_atLo que usan las sincronizaciones para leer: las credenciales de la propia aplicación de Microsoft Entra del proyecto (microsoft365), la conexión de una persona con Canva (canva) o con Dropbox (dropbox), o una cuenta de servicio de Google con la que se comparten las carpetas (google_drive). El secreto de cliente, los tokens y la clave se sellan y nunca se devuelven.
MediaSyncAccountConfig— obligatorios: noneMediaSyncAccountConnect— obligatorios: noneUna cuenta devuelta con su enlace de consentimiento de un solo uso: lo que responden la creación de una cuenta de Canva o de Dropbox y media sync account connect. La persona titular de la cuenta de Canva o de Dropbox abre authorize_url, con la sesión iniciada en Canva o en Dropbox, antes de authorize_expires_at. Es el enlace de un solo consentimiento: envíelo solo a esa persona. Las lecturas de la cuenta nunca lo llevan.
MediaSyncAccountList— obligatorios: items, next_cursorMediaSyncAccountPatch— obligatorios: noneMediaSyncAccountWrite— obligatorios: kind, nameMediaSyncCheck— obligatorios: name, ok, detailMediaSyncDesign— obligatorios: id, titleUn diseño de Canva que la persona conectada puede ver.
MediaSyncDesignList— obligatorios: items, continuationMediaSyncList— obligatorios: items, next_cursorMediaSyncPatch— obligatorios: noneMediaSyncRun— obligatorios: at, status, added, updated, removed, pending_delete, skipped_totalEl resumen de la última ejecución de una sincronización.
MediaSyncRunError— obligatorios: code, detailMediaSyncSecret— obligatorios: set, hintCómo muestra una respuesta el secreto de cliente de una cuenta, los tokens de una cuenta de Canva o de Dropbox (set una vez conectada, sin hint) o la propia clave de cuenta de servicio de una cuenta de Google Drive (set cuando la cuenta tiene una; hint contiene los últimos cuatro caracteres de su private_key_id). El valor nunca se devuelve.
MediaSyncSkipped— obligatorios: name, reasonMediaSyncSource— obligatorios: web_urlLa fuente que lee una sincronización, resuelta cuando se creó la sincronización. Una carpeta de SharePoint tiene drive_id e item_id; una carpeta de Dropbox, item_id y path; una carpeta de Google Drive, item_id, drive_id cuando está en una unidad compartida, y shared_by; un diseño de Canva tiene design_id y los miembros que le siguen.
MediaSyncTest— obligatorios: at, ok, checksMediaSyncWrite— obligatorios: provider, account_idMediaTagPatch— obligatorios: noneMediaTagsPatch— obligatorios: tagsMediaUploadDeclaration— obligatorios: filename, content_type, bytes, sha256Declara una carga. El máximo de bytes es un techo de transporte independiente del plan, no un tamaño alcanzable. Un tipo de contenido de imagen está limitado a 20971520 bytes, 20 MiB, y una declaración de imagen mayor se rechaza con invalid_request antes de transferir ningún byte.
Ese límite de imagen es una puerta solo de bytes: la declaración nunca decodifica la imagen para aplicarlo, y se aplica a GIF animados y WebP animados exactamente como a una imagen fija. El plan predeterminado no tiene límite de almacenamiento de producto.
Un límite de almacenamiento personalizado, cuando está presente, se verifica primero y una declaración que no puede contener se rechaza con quota_exceeded antes de transferir ningún byte.
Un proyecto Standard sin crédito restante es rechazado en declare y commit con payment_required cuando los bytes que almacena su pagador, con esta subida, superan 1000000000 bytes (1 GB, el almacenamiento gratuito de Standard); el ancho de banda nunca se cobra.
Una declaración audio/mpeg (MP3) está limitada a 178257920 bytes, 170 MiB, y una mayor se rechaza igual; lea media_audio_bytes para prevalidarla.
Una declaración video/mp4 o video/webm está limitada por el plan del proyecto, 500000000 bytes, 500 MB, en Standard y 1000000000 bytes, 1 GB, en todos los demás planes, y una mayor se rechaza igual, indicando el límite que se aplica; lea media_video_bytes desde GET /api/project/capabilities para prevalidarla.
Un cambio de plan solo afecta a las declaraciones posteriores: los videos almacenados siguen reproduciéndose. Lea media_image_bytes del documento de capacidades para prevalidar el límite de imagen, y project_content_bytes allí, o content_limit_bytes en el proyecto, para conocer cualquier techo de almacenamiento personalizado. Una etiqueta opcional se almacena en el objeto de medios listo y no se redeclara al confirmar.
Un source_filename opcional registra el nombre original del archivo del llamador cuando el cliente transcodificó los bytes antes de la carga; el nombre de archivo del objeto listo se deriva entonces de él para que fuentes distintas nunca colisionen (photo.png subido como photo.webp se almacena como photo.png.webp, photo.jpg como photo.jpg.webp, y una fuente photo.webp permanece photo.webp).
MediaUploadSession— obligatorios: id, operation, upload_url, method, headers, expires_atMediaUploadSource— obligatorios: filename, content_type, sha256, bytesIdentidad original de carga verificada al ingerir orientación EXIF normalizada. Solo lectura; úselo para reconocer reintentos. El resumen, tamaño y tipo de medios listos describen los bytes de entrega normalizados.
MediaUsage— obligatorios: playlists, screensMediaUsagePlaylist— obligatorios: id, name, uses, screen_countMediaUse— obligatorios: kind, whereUna forma en que una lista de reproducción contiene o alcanza el archivo multimedia; una lista de reproducción que lo hace en varias páginas cuenta como un solo uso.
MediaVersion— obligatorios: number, current, filename, content_type, sha256, bytes, source, created_atMediaVersionActor— obligatorios: kindMediaVersionPage— obligatorios: items, next_cursorMediaWarning— obligatorios: code, detail, playlistsMediaWarningPlaylist— obligatorios: id, nameMemberActivity— obligatorios: id, project_id, user_id, display_name, at, kind, action, outcome, status, sourceMemberActivityClient— obligatorios: kindEl cliente como lo nombra el registro de solicitudes edge, analizado desde User-Agent y Sec-CH-UA-Platform.
MemberActivityKind— obligatorios: nonesign_in y sign_in_failed llevan auth_method; credential_changed es una passkey agregada, renombrada o eliminada, una contraseña establecida o un cambio de correo electrónico solicitado o verificado; reauthenticated es una prueba verificada (acción reauthentication.<proof kind>); mutation es cualquier otro cambio en el panel.
MemberActivityList— obligatorios: items, next_cursor, recorded_sinceMemberActivityOutcome— obligatorios: noneok para estado menor a 400, rechazado para respuesta 4xx, fallido para respuesta 5xx.
MemberActivityResource— obligatorios: typeMemberApproverUpdate— obligatorios: can_approveMemberScreenScopeUpdate— obligatorios: screen_scopeMemberUploadScopeUpdate— obligatorios: upload_scopeNativeIdentityChallenge— obligatorios: nonce, expires_at, aud, op, request_hashCompare el op y request_hash devueltos con sus valores calculados localmente antes de firmar. Cada nonce expira en 120 segundos y puede consumirse una vez.
NativeIdentityChallengeRequest— obligatorios: kid, op, request_hashProporcione la operación y su request_hash para cada desafío. Una clave desconocida también requiere public_key y op=pairing.start. Crear un desafío no inscribe la clave.
NativeIdentityProof— obligatorios: kid, public_key, signatureEl encabezado protegido JWS compacto es exactamente {"alg":"EdDSA"}. Las reclamaciones son kid, nonce, aud=screenrig-runtime, op, enteros iat/exp, jti no vacío y request_hash.
Las pruebas contextuales duran como máximo 120 segundos y expiran a más tardar en el desafío emitido. request_hash es SHA-256 hexadecimal en minúsculas de cadenas UTF-8 unidas por un NUL, sin NUL final, comenzando con screenrig.native.identity.request.v1 y op.
Agregue Idempotency-Key para pairing.start y session.mint; agregue la credencial de emparejamiento srp_ exacta y luego completion_nonce para pairing.complete; no agregue nada para identity.reset. Cada prueba debe incluir request_hash. Un resultado de operación en caché aún requiere una prueba emitida nueva o la prueba aceptada exacta mientras su recibo de corta duración siga siendo válido.
Se rechazan miembros duplicados o desconocidos JWS/JWK, base64url no canónico y claves no de orden primo. Se ignoran miembros desconocidos en el cuerpo de la solicitud.
NativeIdentitySessionRequest— obligatorios: kid, public_key, signatureNativeIdentityProof con op=session.mint más la pista opcional de host. Un host presente REEMPLAZA el host almacenado en la pantalla, porque las versiones de firmware y shell cambian durante la vida de una pantalla. La pista nunca afecta la autorización; solo la prueba firmada lo hace.
Los miembros desconocidos se ignoran, y host y reproducción se leen con tolerancia (docs/player-compatibility.md §1.1).
NativePairingComplete— obligatorios: completion_nonce, public_key, signatureNativePairingCompletion— obligatorios: screen, public_urlNativePairingFleetLink— obligatorios: statusLo que hizo el enlace de flota presentado para esta sesión de emparejamiento. reclamado y recuperado significa que la pantalla ya está elegida, y el Player completa el emparejamiento sin mostrar su código. Cualquier otro estado deja el código en la pantalla para un reclamo ordinario.
NativePairingRecovery— obligatorios: offeredPresente solo cuando el duid host o el serial en la solicitud de inicio coincidieron exactamente con una pantalla existente vinculada a una clave diferente. No lleva pantalla, etiqueta ni proyecto: la oferta se muestra en el lado del proyecto como Screen.recovery_pending y el evento screen.recovery_offered, y solo el proyecto propietario puede confirmarla.
Está ausente, exactamente como sin coincidencia, cuando el identificador es ambiguo, cuando la clave de la pantalla coincidente mostró actividad en los últimos diez minutos, o cuando esa pantalla ya recibió tres ofertas en la última hora móvil. El código de emparejamiento aún se emite y muestra exactamente como sin coincidencia. El reproductor usa esto solo para registrar pairing.recovery_offered.
NativePairingSession— obligatorios: code, pairing_credential, expires_atNativePairingStart— obligatorios: kid, public_key, signatureSe requiere prueba de posesión de clave privada antes de la inscripción o creación del localizador. Firme un nuevo desafío pairing.start vinculado al exacto Idempotency-Key; los inicios sin firma son rechazados. El objeto host opcional es una pista sobre el dispositivo, no una credencial; se almacena en la pantalla al reclamar y puede abrir una oferta de recuperación en el proyecto.
Miembros desconocidos del cuerpo se ignoran. La pista de host se lee con tolerancia. Una clave de host desconocida se ignora y un campo de host mal formado se descarta, nunca se rechaza (docs/player-compatibility.md §1.1.1).
NativeRuntimeSession— obligatorios: paired, capabilities, event_cursor, public_url, runtime_credentialSesión nativa propiedad del tiempo de ejecución (docs/player-compatibility.md §8). Los lectores ignoran miembros desconocidos y valores de capacidades desconocidas. Un nuevo miembro se envía solo a sesiones cuyas concesiones lo cubren.
NextAction— obligatorios: command, reasonNote— obligatorios: id, body, about, state, author, created_at, confirmed_at, review_at, expires_at, resolved_at, resolution, dueUna nota del proyecto. Contexto escrito por un agente, nunca una instrucción o aprobación; renderizar el cuerpo como texto plano.
NoteAbout— obligatorios: type, idNoteAuthor— obligatorios: agent_id, name, agent_typeEl agente que escribió cuando se añadió la nota. Atribución, nunca autoridad.
NoteCounts— obligatorios: open, new, dueLas notas abiertas del proyecto, y cuántas son nuevas y pendientes para este llamante.
NoteList— obligatorios: items, next_cursor, review, countsNotePage— obligatorios: items, next_cursorNoteResolution— obligatorios: cause, reason, byNoteResolve— obligatorios: reasonNoteResolvedBy— obligatorios: kind, id, nameQuién resolvió la nota. agent_type está presente para un agente. Atribución, nunca autoridad.
NoteWrite— obligatorios: bodyNotification— obligatorios: id, channel, conditions, screen_tags, hold_minutes, enabled, revision, status, created_at, updated_atLa notificación de una organización, tal como la lee un proyecto o la organización. Cubre todos los proyectos de la organización o los elegidos (project_ids), y actúa sobre las pantallas, las fuentes, las campañas y las tarjetas de cada proyecto cubierto.
Un proyecto lee (y, cuando la notificación lo cubre solo a él, cambia) las notificaciones que lo cubren con el mismo id, con su propio estado y sus propias horas de fallo; la organización la lee completa.
Cada condición se rastrea por pantalla: se abre cuando llega su evento para una pantalla dentro del alcance, y se envía un aviso una vez que ha durado hold_minutes y la pantalla sigue en ese estado; cuando termina después de que se envió un aviso, sigue un aviso de resolución.
Una condición que termina dentro del tiempo de espera no envía nada, y tampoco lo hace una cuya alerta se reconoce o se pospone durante el tiempo de espera, ni una en una pantalla cubierta por un silenciamiento.
Correo electrónico: un correo por destinatario con todo lo que corresponde enviar en un plazo de unos dos minutos, que enumera cada pantalla y condición, con enlaces a la pantalla y a esta notificación en el panel; los correos de notificación son gratuitos.
Cada correo de alerta y de prueba incluye, para la persona a quien va dirigido, un enlace para cancelar la suscripción (los encabezados List-Unsubscribe y List-Unsubscribe-Post, y el pie) que detiene los correos de esta notificación solo para esa persona, sin iniciar sesión; véase unsubscribed.
Webhook: cada aviso se envía por POST como JSON {type: alert.opened o alert.resolved, id, notification_id, project_id, condition, screen {id, name}, since, at, event_id, severity}, donde id es el id de la entrega, since es cuando comenzó la condición, at es cuando se mantuvo el tiempo suficiente (opened) o se despejó (resolved), event_id es el cursor del evento que lo origina, y severity (info, warning o error) es la gravedad de la condición para alert.opened e info para alert.resolved, en toda notificación de webhook.
El aviso de una campaña también incluye reach {published, current} (reach_dropped: las pantallas que la campaña alcanzaba cuando se publicó y las que alcanza cuando se envía el aviso) o audience_group {kind: tag o folder, value: la etiqueta o el id de la carpeta} (group_empty); el correo electrónico y el chat dicen lo mismo con palabras.
Una notificación que define min_severity o severity también lo indica en el texto de su correo electrónico, Slack, Telegram y Teams.
Teams y PagerDuty siempre muestran la gravedad efectiva. alert.resolved para screen_offline también lleva likely_cause, la causa de la interrupción que terminó (ScreenOutage.likely_cause) o null cuando se desconoce; espera hasta dos minutos después de que la pantalla vuelve a que el primer informe de salud la determine, y un correo también la nombra.
Un reinicio se determina de inmediato; una causa de red o de plataforma necesita un informe de estado recibido después de que la pantalla vuelva, que un Player puede enviar hasta 15 minutos más tarde, así que un aviso enviado antes lleva null y la causa aparece en ScreenOutage.likely_cause y screen.outage_classified.
El correo y los canales de chat comunican tres o más pantallas que pasan a una misma condición en cinco minutos y comparten una red, una ubicación, un modelo, una versión del Player o una etiqueta como un solo aviso con una sola recuperación (NotificationDeliveryGroup); los avisos de las demás pantallas se omiten como grouped.
Un webhook sigue enviando un aviso por pantalla. Los event_types se envían por POST como el mismo objeto JSON que devuelve GET /api/events.
Cada POST incluye ScreenRig-Webhook-Id (el id de la notificación), ScreenRig-Event-Id (el id de la entrega para un aviso, el cursor del evento para un evento; estable entre reintentos, deduplique por él), User-Agent y ScreenRig-Signature t=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<raw body>" keyed with the secret string>.
Con una respuesta 2xx en un plazo de 10 segundos, la entrega tiene éxito; en cualquier otro caso se reintenta con retroceso exponencial (de 30 segundos, que se duplican hasta una hora, con variación aleatoria) durante 24 horas y luego se marca como fallida; los fallos de correo electrónico se reintentan de la misma manera.
Los avisos de pantalla y los eventos screen.* son gratuitos; los demás eventos se miden como un evento listen-stream. status es failing mientras nada haya tenido éxito desde failing_since; tras 72 horas de fallo continuo, la notificación se deshabilita (disabled_reason delivery_failures) y se agrega notification.disabled.
NotificationActiveHours— obligatorios: timezone, windowsCuándo se envían los avisos abiertos: las ventanas (screenrig.schedule/v1), leídas en timezone. Un aviso que vence mientras están cerradas espera a la siguiente apertura (outside hold, el valor predeterminado) y se envía entonces si su condición sigue vigente, de modo que una condición que se despeja antes no envía nada, o se omite (outside drop; last_error outside_hours).
Un aviso resuelto de un aviso abierto que se envió siempre se envía, dentro del horario o no, y una prueba lo ignora. crashing se retiene o se descarta como cualquier otra condición. El horario juzga un aviso cuando sale por primera vez; uno fallido se reintenta según el calendario habitual, sea cual sea el horario.
Añadir, cambiar o quitar el horario vuelve a juzgar de inmediato los avisos retenidos por el anterior.
NotificationCondition— obligatorios: noneUn cambio importante en el estado de una pantalla. screen_offline: el Player perdió su conexión (screen.offline, registrado 60 segundos después de que caduca su presencia); termina con screen.online. display_disconnected: el Player informa que su monitor está desconectado (screen.health_changed con change display_disconnected); termina con display_reconnected. running_hot: el dispositivo informa una temperatura igual o superior al umbral de temperatura alta (temperature_high); termina con temperature_normal. on_battery: el dispositivo tiene batería y su último informe de salud indica none como fuente de batería, es decir, desenchufado (screen.health_changed con change on_battery); termina cuando un informe indica cualquier otra fuente (plugged_in).
El aviso indica que la pantalla funciona con la batería y no nombra ninguna causa. storage_full: el almacenamiento del Player no puede guardar su contenido (screen.storage_shortfall); termina con screen.storage_shortfall_cleared. content_stuck: la actualización de contenido de la pantalla está en estado retrying, failed, blocked o partial (screen.manifest_upgrade); termina cuando un estado posterior no es ninguno de esos. not_playing: el Player muestra un estado de nivel error en lugar de su contenido (screen.status_changed con level error, excepto storage_full); termina cuando su estado deja de ser un error. loop_stalled: el Player no informa de ningún problema y su contenido está al día, pero ningún inicio de medio ha llegado al backend durante más tiempo del que permite el ciclo de la pantalla (screen.glass_changed con el veredicto de reproducción stalled; Screen.glass indica cuándo juzga y qué deja de lado); termina cuando llega un inicio de medio o la pantalla deja de ser juzgada, por ejemplo al quedar sin conexión. glass_blank y glass_frozen: el backend leyó las capturas de pantalla de la pantalla a lo largo de una serie que cubre su ciclo y todas eran de un solo tono liso (glass_blank) o la misma imagen (glass_frozen) (screen.glass_changed con el veredicto de imagen blank o frozen; Screen.glass indica cuándo juzga y qué deja de lado); termina cuando dos capturas seguidas muestran una imagen en movimiento o la pantalla deja de ser juzgada.
Una pantalla que deja de ser juzgada cierra la alerta, pero las notificaciones por correo y chat no envían aviso de recuperación por ella, porque no se vio que nada se recuperara (la fila de resolución se omite como no_longer_judged); un inicio de medio o dos capturas correctas sí lo envían. crashing: el reproductor falló o reinició su renderizador repetidamente (screen.health_changed con change crash_spike o renderer_restart_spike); se envía de inmediato, nunca queda en espera ni se resuelve. source_failed y source_stale tratan de una fuente de datos, no de una pantalla: el miembro screen del aviso lleva el id y el nombre de la fuente, el enlace es la página de la fuente, y screen_tags nunca coincide con una fuente, por lo que una notificación limitada por etiquetas no las vigila. source_failed: falló una actualización de la fuente (source.status_changed con state error); se borra en la siguiente actualización que funciona (state ok). source_stale: la última actualización correcta de la fuente es anterior a su stale_after_seconds, el momento en que caducan los datos de sus tarjetas y las páginas que dependen de ella recurren a la alternativa (source.stale); se borra en la siguiente actualización que funciona.
Ninguno es una alerta de pantalla. reach_dropped y group_empty tratan de una campaña (un nivel compartido de la pila de programación), no de una pantalla: el miembro screen del aviso lleva el id y el nombre de la campaña, el enlace es el calendario de la campaña en el panel, y una campaña es del proyecto, por lo que screen_tags y audience nunca las limitan. reach_dropped: un nuevo recuento halló que la campaña alcanza menos pantallas que cuando se publicó por última vez, porque las pantallas salieron de una de sus etiquetas o carpetas, o fueron archivadas o eliminadas (campaign.reach_changed con current por debajo de published); reach_drop define qué tan grande debe ser una caída para notificarse; se cierra cuando vuelve a alcanzar tantas pantallas.
Una publicación que establece una nueva línea base, o la eliminación de la campaña, también la cierra, lo que cierra un incidente de PagerDuty y la alerta de un webhook, pero no envía correo ni aviso de chat de recuperación (no_longer_judged). group_empty: una etiqueta o carpeta de la audiencia de la campaña no coincide con ninguna pantalla (campaign.group_changed con matched 0); un aviso por etiqueta o carpeta (audience_group); se cierra cuando vuelve a coincidir con una pantalla, o cuando una publicación la quita de la audiencia (removed true), lo que cierra un incidente de PagerDuty y la alerta de un webhook, pero no envía correo ni aviso de chat de recuperación (no_longer_judged).
Las propias entradas de programación de una pantalla apuntan a listas de reproducción, no a pantallas, por lo que solo las campañas tienen alcance.
Ninguno es una alerta de pantalla. card_data_stale trata de una tarjeta, no de una pantalla: el miembro screen del aviso lleva el ID de la tarjeta y su nombre (el tipo de la tarjeta, como en «tarjeta del tiempo»), el enlace es el editor de páginas del panel en una página que coloca la tarjeta (la propia página de la notificación cuando ninguna lo hace), y since es cuándo caducaron sus datos.
Se abre cuando el documento de datos de una tarjeta, que un agente, un trabajo o una persona escribió con una caducidad (ttl_seconds o expires_at, como en card data put --ttl), llega a esa caducidad sin otra escritura que lo renueve mientras una pantalla muestra la tarjeta (card.data_expired), de modo que la tarjeta queda en blanco en esa pantalla; se cierra cuando llega una escritura de los datos de la tarjeta (card.data_renewed).
Los documentos de una fuente de datos no se anuncian: caducan según el periodo de caducidad de la fuente, que cubre source_stale. Una tarjeta que ninguna pantalla muestra no envía nada, y tampoco una que se renovó, se eliminó o se quitó de todas las pantallas antes de que venza el aviso.
Eliminar los datos de una tarjeta pone fin al aviso sin aviso de recuperación, como una publicación pone fin a una caída de alcance (no_longer_judged). Ajuste ttl_seconds al calendario de quien escribe, para que se note un trabajo que se detuvo. Como una fuente de datos, una tarjeta no tiene etiquetas de pantalla: una notificación limitada a screen_tags no vigila tarjetas, y no es una alerta de pantalla.
Los lectores tratan un valor desconocido como ausente.
NotificationConditions— obligatorios: noneNotificationDelivery— obligatorios: id, notification_id, event_id, event_type, state, attempts, created_atNotificationDeliveryAttempt— obligatorios: attempt, at, status, error, duration_msNotificationDeliveryAttemptList— obligatorios: itemsNotificationDeliveryGroup— obligatorios: id, attribute, value, countUn grupo de pantallas al que representa un solo aviso. Cuando al menos tres pantallas de un proyecto pasan a la misma condición con menos de cinco minutos de diferencia y comparten un valor, una notificación por correo, Slack, Teams, PagerDuty o Telegram envía un solo aviso para ellas en lugar de uno por pantalla.
Una pantalla que pasa a la condición más tarde con un valor del que está hecho el grupo abierto se une a él sin un aviso nuevo, y un solo aviso lo comunica cuando se recupera su última pantalla. Una notificación de webhook sigue enviando un aviso por pantalla.
NotificationDeliveryList— obligatorios: items, next_cursorNotificationDestination— obligatorios: noneSolo Slack, Teams, PagerDuty y Telegram; obligatorio para ellos. La credencial con la forma que emite el servicio: slack, la URL del webhook entrante (hooks.slack.com); teams, la URL del webhook de Workflows (logic.azure.com o powerplatform.com; las URL de conector de Office 365 están retiradas); pagerduty, la clave de enrutamiento de Events API v2 de 32 caracteres; telegram, el token del bot.
Otra forma da notification_destination_rejected. Se sella, nunca se devuelve y en las lecturas solo aparece como destination_hint.
NotificationEventTypes— obligatorios: noneSolo webhook. Eventos del proyecto que además se envían por POST a medida que ocurren, exactamente como los envía un webhook: tipos exactos, como screen.online, o prefijos que terminan en .*, como screen.*. notification.test nunca se distribuye.
NotificationList— obligatorios: itemsNotificationPatch— obligatorios: noneNotificationProjectIDs— obligatorios: noneProyectos activos de la organización, cada uno nombrado una sola vez. Una lista vacía no cubre ninguno.
NotificationReachDrop— obligatorios: noneLa menor caída en el alcance de una campaña por la que se envía un aviso reach_dropped: screens es el menor número de pantallas perdidas (1 de forma predeterminada) y percent, si se define, la menor proporción de las pantallas que la campaña alcanzaba cuando se publicó; una caída debe cumplir ambos.
Una caída menor no pone en cola ningún aviso, y un aviso en cola cuya caída se redujo por debajo del umbral cuando le toca enviarse se omite (condition_cleared). Solo con la condición reach_dropped; en una notificación sin ella, invalid_request.
NotificationRecipients— obligatorios: noneSolo correo electrónico. owner (quien sea propietario del proyecto cuando se envía un aviso) o el user_id de una persona que es miembro del proyecto; un user_id que no corresponde a un miembro devuelve invalid_request. A cada uno se le envía un correo electrónico a su dirección verificada. Se omite a quien haya dejado el proyecto desde entonces o no tenga una dirección verificada.
NotificationSeverity— obligatorios: noneLa gravedad de un aviso, de la menos grave a la más grave. Un aviso abierto tiene la gravedad de su condición: error para screen_offline y warning para cualquier otra condición, salvo que la severity de la notificación indique otra cosa. Un aviso resuelto y una prueba son info.
NotificationSeverityOverrides— obligatorios: noneCondición a gravedad para esta notificación, como {"not_playing": "error"}. Cuenta para min_severity y es la gravedad que Teams y PagerDuty muestran para la condición. Una condición que no figura conserva su valor predeterminado. En un patch, un objeto vacío, como null, borra todas las anulaciones.
NotificationTelegramChat— obligatorios: noneSolo Telegram; obligatorio para él. El chat en el que publicar: su id numérico (negativo para un grupo o canal) o @channelname. No es una credencial.
NotificationUnsubscription— obligatorios: user_id, atNotificationWrite— obligatorios: channelemail envía a los destinatarios, webhook hace POST firmado a url, y slack, teams, pagerduty y telegram publican un mensaje por caída y pantalla en un chat o buscapersonas con el destination de solo escritura (telegram también necesita telegram_chat_id), y después una recuperación; PagerDuty abre un incidente y lo resuelve. Necesitan al menos una condición y no admiten event_types.
OAuthAuthorization— obligatorios: id, client_name, client_registered, redirect_host, access, capabilities, created_at, expires_atOAuthAuthorizationRedirect— obligatorios: redirect_uriOAuthError— obligatorios: errorOAuthTokenResponse— obligatorios: access_token, token_type, expires_inOnboardingSiteCTA— obligatorios: label, path, href, atEl enlace de registro o de inicio de sesión en el que la persona hizo clic en el sitio web.
OnboardingSiteVisit— obligatorios: path, atOnboardingStepName— obligatorios: noneUn paso de los flujos de entrada, en orden de visualización. email_verified, email_gate_reached y los hitos de la cuenta (agent_connected, screen_paired, playlist_with_content, activated) los escribe o los incorpora el servidor y no son nombres que envíe un cliente.
OnboardingStepRequest— obligatorios: journey_id, stepOnboardingValue— obligatorios: noneLo que la persona ingresó en un paso: la dirección escrita (email_submitted, reset_requested), el nombre (signup_name_entered), sí o no (signup_marketing_choice), las opciones elegidas o el texto de seguimiento (question_answered, question_follow_up), una dirección o un nombre ingresados en una invitación. Nunca una contraseña, un código ni un token. Vacío equivale a ausente.
Operation— obligatorios: id, kind, state, created_at, updated_atOperationAccepted— obligatorios: id, release_id, operation_idOrganizationAdminInvitation— obligatorios: id, kind, delivery, status, recipient_email, organization_id, created_at, expires_atOrganizationAdminInvitationCreate— obligatorios: emailsOrganizationAdminInvitationCreated— obligatorios: invitationsOrganizationAdminInvitationList— obligatorios: items, next_cursorOrganizationAdmins— obligatorios: admins, candidates, revisionOrganizationAdminsUpdate— obligatorios: admin_user_idsOrganizationBillingUsage— obligatorio: org_id, period, pool, allowance, stored_bytes, screens, projects, next_cursorOrganizationDomainChallenge— obligatorios: organization_id, challenge_id, domain, name, value, expires_atOrganizationDomainInput— obligatorios: domainOrganizationDomainProof— obligatorios: challenge_idOrganizationDomainRemoved— obligatorios: statusOrganizationGuestPolicy— obligatorios: mode, domainsLa política de invitados vigente de la organización. Los invitados son personas cuya organización principal es otra, o que no tienen ninguna; una política nunca elimina a quien ya es miembro.
OrganizationGuestPolicyDomain— obligatorios: noneUn nombre DNS en minúsculas con al menos dos etiquetas, tal como aparece después de la @ de una dirección de correo electrónico verificada (los nombres internacionalizados en su forma xn--).
OrganizationGuestPolicyMode— obligatorios: noneallow admite a todo invitado. domains admite a un invitado cuya dirección de correo electrónico verificada está en uno de los dominios listados (coincidencia exacta). none no admite a ningún invitado. Los miembros de la organización nunca son invitados.
OrganizationGuestPolicyResult— obligatorios: mode, domains, outside_policyLa política de invitados vigente, con cuántas personas deja fuera.
OrganizationGuestPolicyUpdate— obligatorios: modeOrganizationLibraryUpdate— obligatorios: project_idOrganizationList— obligatorios: organizations, new_organization_allowedOrganizationMemberInvitation— obligatorios: id, kind, delivery, status, recipient_email, organization_id, created_at, expires_atOrganizationMemberInvitationCreate— obligatorios: emailsOrganizationMemberInvitationCreated— obligatorios: invitationsOrganizationMemberInvitationList— obligatorios: items, next_cursorOrganizationNotificationList— obligatorios: itemsOrganizationNotificationPatch— obligatorios: noneUn NotificationPatch y project_ids.
OrganizationNotificationWrite— obligatorios: channelUn NotificationWrite y los proyectos que cubre la notificación. Un project_ids ausente o null cubre todos los proyectos de la organización, incluidos los que se agregan después; una lista cubre exactamente esos proyectos, cada uno un proyecto activo de la organización.
OrganizationPayments— obligatorios: organization_id, available, local_simulation, purchasesOrganizationPeople— obligatorios: projects, people, truncatedOrganizationPeopleMembership— obligatorios: project_id, role, can_approveOrganizationPeoplePerson— obligatorios: user_id, display_name, email, admin, member, managed, outside_guest_policy, projectsOrganizationPeopleProject— obligatorios: project_id, nameOrganizationPerson— obligatorios: user_id, display_name, emailOrganizationPersonal— obligatorios: noneLa organización es solo el contenedor de su único proyecto: exactamente un proyecto activo, sin dominio verificado, sin plan de organización actual o programado, y sin administrador aparte del propietario de ese proyecto. El panel oculta el nivel de organización para ella.
OrganizationProject— obligatorios: id, name, organization_id, status, screen_countOrganizationProjectAccess— obligatorios: project_id, joinedOrganizationProjectAccessChange— obligatorios: project_id, user_id, accessOrganizationProjectAccessRequest— obligatorios: changesOrganizationProjectAccessResult— obligatorios: changesOrganizationProjectOwner— obligatorios: project_id, owner_user_idOrganizationProjectOwnerUpdate— obligatorios: user_idOrganizationProjectPage— obligatorios: projects, next_cursorOrganizationRename— obligatorios: nameOrganizationSummary— obligatorios: id, name, personalOrganizationView— obligatorios: id, name, personal, revision, admin, home, project_count, plan_id, free, plan_required, education_eligible, education_eligibility_sourcePageDataCondition— obligatorios: keyUn predicado de datos de tarjeta, evaluado antes de la hora civil. Los datos faltantes o caducados nunca coinciden. La página también respeta sus límites de tiempo ordinarios. Requiere la capacidad host page.conditions; los hosts más antiguos reciben la página deshabilitada.
PageFailure— obligatorios: page_id, code, atÚltimo informe aceptado playback.page_failed para esta pantalla. Ausente hasta que un Player informe uno. Metadatos de salud del proyecto solo lectura; no cambia la revisión de pantalla ni la autoridad del manifiesto.
PageVisibility— obligatorios: enabledHorario opcional de visibilidad de página. Es un hermano de advance y nunca forma parte de screenrig.canvas/v1; describe la orquestación de reproducción, no la geometría. El servidor valida y lleva estas reglas como datos. El reproductor las evalúa contra la zona horaria de la pantalla publicada en la raíz del manifiesto.
Una página es elegible cuando enabled es true, ahora está dentro de [from, until), y windows está ausente o al menos una ventana coincide. Cada lista de reproducción debe mantener al menos una página sin campo de visibilidad, por lo que siempre existe contenido elegible. Los vectores de conformidad para las reglas de evaluación son la familia screenrig.schedule/v1 en packages/schedule-contract.
PageVisibilityWindow— obligatorios: daysUna ventana civil recurrente. Omitir inicio y fin selecciona todo el día. Cuando fin es menor o igual que inicio, la ventana cruza la medianoche y el día de inicio la posee, así que vie 22:00 a 02:00 se extiende hasta la mañana del sábado.
PairScreen— obligatorios: codePairingClaim— obligatorios: screen, public_urlPairingClaimedEvent— obligatorios: type, completion_noncePairingComplete— obligatorios: completion_noncePairingCompletion— obligatorios: screen, public_urlPairingSession— obligatorios: code, expires_atPasskeyAdditionProof— obligatorios: authorization_ceremony_id, authorization_credentialPlaybackAggregate— obligatorios: screen_id, media_id, filename, day, play_count, last_page_id, last_manifest_revision, first_started_at, last_started_atPlaybackAggregateCsv— obligatorios: noneCSV RFC 4180, registros CRLF, UTF-8, con la fila de encabezado screen_id,media_id,filename,primitive,day,play_count,last_page_id,last_manifest_revision,first_started_at,last_started_at. Los tiempos son UTC RFC 3339. Una celda que comienza con =, +, -, @, tabulación o retorno de carro se antepone con una comilla simple para que las hojas de cálculo no la evalúen.
Content-Disposition nombra playback-aggregates.csv. Un flujo que falla después del encabezado se aborta en la conexión.
PlaybackAggregateList— obligatorios: itemsPlaybackApplicationStartedContext— obligatorios: manifest_revision, page_id, primitive_id, release_idPlaybackApplicationStartedReport— obligatorios: severity, code, contextUn inicio visible de un primitivo de aplicación en una página: la aplicación se volvió visible en pantalla, reportado una vez por aparición de página por el controlador Player; el contenido de la aplicación nunca reporta su propia visibilidad, y una descarga de paquete nunca es un inicio.
La pantalla que envía está autenticada; las identidades de página, primitiva, versión y manifiesto son observaciones reportadas sin contenido ni verificaciones de membresía. Almacena un registro duradero por reproducción (GET /api/playback/plays). Las marcas de tiempo de mantenimiento de lanzamiento/aplicación propiedad del proyecto se siguen mediante una proyección por lotes recuperable.
Los reconocimientos ordinarios de reproducción omiten encabezados opcionales de saldo de créditos. No hay fila agregada diaria para inicios de aplicación; los registros de reproducción son la evidencia.
PlaybackCompleteness— obligatorios: day_from, day_to, measured_plays, missing_plays, completeness, days, gaps, truncatedCuántas de las reproducciones que realizaron las pantallas llegaron al backend, en los días UTC inclusivos de day_from a day_to. measured_plays y missing_plays son las sumas de days, y completeness es measured_plays dividido entre su suma, null cuando ambos son 0. days enumera, del más antiguo al más reciente, solo los días con una reproducción medida o faltante. gaps enumera los huecos de la numeración de reproducciones, del más reciente al más antiguo.
Las reproducciones sin número (Players antiguos, inicios almacenados antes de los números de reproducción) no están en ninguna de estas cifras.
PlaybackCompletenessDay— obligatorios: day, measured_plays, missing_plays, completenessLa numeración de reproducciones de un día de recepción UTC.
PlaybackGap— obligatorios: screen_id, day, from, to, missing_playsUn tramo de números de reproducción que un Player omitió, por lo que se hicieron tantas reproducciones que nunca llegaron.
PlaybackGrant— obligatorios: noneEl apretón de manos de reproducción que el backend concedió: la intersección del PlaybackHandshake del mint y lo que este backend soporta, firmado en la sesión. Se omite de la sesión cuando no hay intersección, por lo que una sesión creada sin apretón de manos no cambia. Un reproductor usa /screen/manifest solo cuando manifest_versions contiene 3.
PlaybackHandshake— obligatorios: noneApretón de manos opcional de reproducción que un Player declara al iniciar. Es una pista que selecciona comportamiento, nunca autorización: miembros desconocidos y entradas del tipo incorrecto se ignoran, y un valor que no es objeto no negocia nada. La respuesta inicial refleja la intersección soportada como PlaybackGrant. adslot-v1 se concede solo a sesiones emparejadas.
PlaybackMediaStartedContext— obligatorios: media_id, manifest_revision, page_id, primitivePlaybackMediaStartedReport— obligatorios: severity, code, contextUn inicio visible de un primitivo de imagen o video en una página. Los Players envían esto una vez por aparición de página del medio, para imágenes exactamente igual que para videos; los bucles dentro de una aparición no son reinicios. La pantalla que envía está autenticada; las identidades de medio, página, primitivo y manifiesto son observaciones sin contenido ni verificaciones de membresía de concesión.
El éxito reconoce la inserción cruda duradera; los conteos diarios continúan mediante una proyección por lotes recuperable. Los reconocimientos ordinarios de reproducción omiten encabezados opcionales de saldo de créditos.
PlaybackPageFailedContext— obligatorios: page_id, codePlaybackPageFailedReport— obligatorios: severity, code, contextInforma que una página no pudo estar lista. Al aceptar, el servidor reemplaza Screen.last_page_failure y añade un evento durable playback.page_failed solo para el proyecto en la misma transacción. No cambia la revisión de la pantalla ni la autoridad del manifiesto.
PlaybackPlay— obligatorios: screen_id, page_id, media_id, primitive, received_atUn inicio duradero reportado por Player de una imagen, video o aplicación.
La sesión autentica pantalla y proyecto; las identidades de elemento, página, manifiesto, primitiva y versión son observaciones reportadas y no autorizan acceso a contenido. playlist_id y playlist_revision son metadatos opcionales enriquecidos asincrónicamente desde un manifiesto de pantalla coincidente; los metadatos faltantes permanecen ausentes.
Los inicios de aplicación llevan release_id con media_id y primitive vacíos. primitive_id y started_at están presentes solo cuando el Player los reporta; started_at se limita a [received_at - 24h, received_at + 5m].
Una página JSON también nombra su pantalla, su elemento multimedia, su lista de reproducción y su aplicación como texto para mostrar, leído cuando se sirve; la exportación CSV y los informes xlsx y pdf omiten esos nombres.
PlaybackPlayCsv— obligatorios: noneCSV RFC 4180, registros CRLF, UTF-8, con la fila de encabezado screen_id,playlist_id,page_id,primitive_id,media_id,primitive,started_at,received_at,manifest_revision,playlist_revision en ese orden fijo; un valor ausente es una celda vacía. Los tiempos son UTC RFC 3339. Una celda que comienza con =, +, -, @, tabulación o retorno de carro se antepone con una comilla simple.
Content-Disposition nombra playback-plays.csv. Una exportación completa termina después de su último registro CRLF sin remolque; un flujo que falla después del encabezado se aborta en la conexión (el cliente ve un error de transporte, nunca un final limpio), por lo que se reintenta desde el último received_at.
PlaybackPlayList— obligatorios: items, next_cursorPlaybackTotals— obligatorios: by, day_from, day_to, truncatedTotales de reproducción durante los días UTC inclusivos day_from a day_to. Exactamente uno de days (by=day), screens (by=screen), media (by=media) o screen_days (by=screen_day, agrupados por pantalla en orden de rango, días ascendentes) está presente, el que nombró la solicitud. truncated es verdadero cuando un ranking puede omitir claves que quedaron por debajo del mejor de una sección o tienda.
PlaybackTotalsDay— obligatorios: day, play_count, first_started_at, last_started_atPlaybackTotalsMedia— obligatorios: media_id, play_count, first_started_at, last_started_atPlaybackTotalsScreen— obligatorios: screen_id, play_count, first_started_at, last_started_atPlaybackTotalsScreenDay— obligatorios: screen_id, day, play_countPlaybackVideoStartedContext— obligatorios: media_id, manifest_revision, page_idPlaybackVideoStartedReport— obligatorios: severity, code, contextReportar un inicio de video visible. Esto usa la misma agregación diaria que playback.media_started con video primitivo. Enviar un reporte por inicio; enviar ambos tipos de evento cuenta el inicio dos veces. Use playback.media_started al reportar imágenes y videos.
PlayerBrowserIdentity— obligatorios: kind, version, pwaMotor de navegador y modo de instalación para Players en navegador, incluyendo shells nativos. Una pista opcional malformada se descarta sin rechazar el mint.
PlayerCardsIdentity— obligatorios: noneLa biblioteca de tarjetas incorporada que lleva el Player (docs/player-compatibility.md §3.1): la versión CalVer de la biblioteca y el semver de cada tarjeta, cuyo mayor indica qué ubicaciones de tarjeta renderiza la pantalla. Almacenado en la pantalla con el resto del player. Las entradas mal formadas se descartan una por una; nunca es un 400.
PlayerIdentity— obligatorios: kindAutoidentificación del reproductor, enviada solo en las tres rutas mint (docs/player-compatibility.md §3.1). Es una pista y nunca una autorización, y no está cubierta por la prueba nativa. Se lee con tolerancia: los miembros desconocidos se ignoran, un miembro opcional inválido se descarta por sí solo, y un reproductor que no es un objeto o no tiene un tipo válido no declara nada.
Nunca es un 400. Un mint emparejado lo almacena en la pantalla para el histograma de la flota del operador.
PlayerPublicKey— obligatorios: kty, crv, xPlayerShellIdentity— obligatorios: kindEl entorno en el que se ejecuta un reproductor web. Sus tokens de compatibilidad se registran, nunca se conceden. Un tipo inválido descarta el entorno.
Playlist— obligatorios: id, name, revision, pagesPlaylistAdvance— obligatorios: nonePlaylistAdvanceWrite— obligatorios: nonePlaylistApplicationAdvance— obligatorios: mode, max_msPlaylistApplicationPrimitive— obligatorios: id, primitive, release_id, rect, layer, content_fitPlaylistApplicationPrimitiveWrite— obligatorios: id, primitive, release_id, layer, content_fitPlaylistApproval— obligatorios: state, review_idPresente mientras se revisa esta lista de reproducción. La lista de reproducción en sí es la versión activa (aprobada).
PlaylistAudio— obligatorios: tracks, loop, volumeBanda sonora de lista de reproducción almacenada con valores predeterminados completados.
PlaylistAudioCue— obligatorios: trackPista opcional de banda sonora en una página ordinaria. Cuando la página se vuelve actual, el Player cambia a la pista nombrada desde su inicio a menos que ya esté reproduciéndola; restart true la reinicia incluso entonces. La secuencia continúa desde esa pista.
Los reproductores pueden ignorar una pista. track debe nombrar un id de pista en el audio de la lista de reproducción; una señal sin audio de lista de reproducción es invalid_request. No permitido en páginas de espacios publicitarios. Una página con modo avanzado audio_end termina cuando termina la pista señalada; requiere esta señal.
PlaylistAudioEndAdvance— obligatorios: mode, max_msPlaylistAudioEndAdvanceWrite— obligatorios: modeLa página termina cuando termina la pista de banda sonora que su audio_cue nombra. La página debe llevar un audio_cue y la lista de reproducción una banda sonora de audio (docs/playlist-audio.md).
PlaylistAudioTrack— obligatorios: id, media_idPlaylistAudioWrite— obligatorios: tracksBanda sonora opcional de lista de reproducción: multimedia de audio ordenado listo (MP3) que se reproduce continuamente mientras cambian las páginas (docs/playlist-audio.md). Los cambios de página nunca la detienen ni reinician. PUT reemplaza toda la lista de reproducción, por lo que omitir audio elimina la banda sonora.
PlaylistCanvas— obligatorios: width, height, backgroundPlaylistCardPrimitive— obligatorios: id, primitive, card, major, params, rect, layer, content_fit, controllerPlaylistCardPrimitiveWrite— obligatorios: id, primitive, card, layout, content_fitUna tarjeta integrada que el Player dibuja de forma nativa (reloj, clima, menú, cinta de noticias, mosaicos KPI y el resto del catálogo de tarjetas vendidas, screenrig.cards.contract/v1). layout la coloca: full (todo el lienzo), free (su propio rectángulo y capa), center (900 x 420), wide (el lienzo con un margen de 30 a izquierda y derecha y 80 arriba y abajo), header (todo el borde superior, 80 de alto), footer (todo el borde inferior, 80 de alto), corner (270 cuadrado), chip (240 x 70) o strip (todo el borde, 120 de alto), en unidades de diseño 1080p escaladas por min(ancho del lienzo, alto del lienzo) / 1080. corner y chip toman una esquina ancla (arriba-izquierda, arriba-derecha, abajo-izquierda, abajo-derecha) y strip un borde ancla (arriba, abajo, izquierda, derecha); los otros layouts no toman ninguna.
Excepto para free, el servidor deriva rect y layer del lienzo o de la cobertura de los displays del marco: omítalos o envíe exactamente lo que deriva.
Una página contiene como máximo una tarjeta completa, central o ancha, una tarjeta de esquina o chip por esquina, y una tira por borde (una tarjeta con presencia puede compartir un borde con una tira normal); un encabezado ocupa la ranura de tira normal del borde superior y un pie de página la del borde inferior, por lo que una página contiene como máximo uno de cada uno, sin tira normal en ese borde, y una tarjeta con presencia aún puede compartirlo.
Una esquina o astilla en un borde que sostiene una tira se mueve más allá de ella por 120, y más allá de un encabezado o pie de página por 80.
En una playlist con formato, displays es el marco del que deriva el diseño (full es el marco, corner la esquina del marco; free rechaza displays), la escala de la tarjeta es el mínimo entre ancho y alto del mosaico dividido por 1080 = 1 en lugar de derivarse del marco, y dos tarjetas compiten por un espacio, o se superponen en las tiras, solo cuando sus marcos comparten un display (no displays es cada display).
El nivel de una tarjeta determina sus diseños (GET /api/card-types): core admite los nueve, fullscreen admite full. params contiene las propiedades estáticas de la colocación (tema, ubicación, títulos, definiciones de columnas) y solo cambia al volver a publicar.
Una cadena en params puede incluir {screen.name}, {screen.timezone} y {screen.field.NAME}, y un parámetro location puede ser la cadena {screen.location}; el backend los expande para cada pantalla, de modo que una misma lista de reproducción muestra a cada pantalla sus propios valores. data nombra un documento de datos de tarjeta (GET/PUT /api/card-data/{key}) que contiene las propiedades dinámicas de la tarjeta (secciones de menú, elementos del ticker, mosaicos de KPI); los agentes lo cambian sin volver a publicar. {screen.field.NAME} en una clave data lee un documento por pantalla, por ejemplo menu-{screen.field.store_number}.
Con datos, los parámetros no pueden llevar propiedades dinámicas; sin ellos, los parámetros llevan toda la configuración. Cada cadena en los parámetros que comienza con media: es una referencia multimedia, media:<id>, que nombra una imagen lista en este proyecto que la tarjeta dibuja (destacar people[].photo, product-grid products[].photo); una tarjeta nunca toma una URL de imagen.
Publicar rechaza una tarjeta desconocida o parámetros mayores e inválidos (card_invalid), un diseño, ancla, rectángulo o capa que la tarjeta no puede llevar (card_layout_invalid), tarjetas que reclaman un lugar en la página (card_layout_conflict), una referencia de medios que no nombra una imagen lista del proyecto (card_media_invalid), y una clave vinculada cuyo documento almacenado la tarjeta rechaza (card_data_invalid).
Las pantallas que muestran la ubicación reciben sus medios, y una escritura en vivo aprueba medios pendientes que nombra, como con un selector by:id. Una tarjeta con una fuente de terceros (clima) la lee desde la clave que el servidor deriva de sus parámetros estáticos.
PlaylistCreateRequest— obligatorios: noneLas páginas de una lista de reproducción, una plantilla de la que crearla, o la plantilla inicial integrada.
PlaylistDisplays— obligatorios: noneListas de reproducción con un formato solamente. Los monitores que cubre una primitiva: números de monitor únicos, ascendentes y basados en 1 dentro de 1..format.displays, que llenan un rectángulo de los mosaicos de la pared, como [2], [1, 2] o, en una cuadrícula de 4 columnas, [2, 3, 6, 7]. En una fila o una columna son contiguos.
El servidor deriva rect como el rectángulo delimitador de esos mosaicos; rect se omite o es exactamente el valor derivado. Se almacena y se refleja al leer.
PlaylistDurationAdvance— obligatorios: mode, after_msPlaylistExpandRequest— obligatorios: nonePlaylistExpanded— obligatorios: pagesPlaylistFormat— obligatorios: nonePara qué se crea una lista de reproducción: un muro de video (PlaylistWallFormat) o una región (PlaylistRegionFormat), nunca ambos. Una lista de reproducción sin formato es una lista ordinaria que se asigna a cualquier pantalla como la página.
PlaylistFromTemplate— obligatorios: playlist_idCrea una lista de reproducción a partir de una plantilla: sus páginas actuales con los valores rellenados, validadas por todas las reglas de las listas. Un valor de medio debe ser un medio listo del tipo correcto; un valor de dirección, una dirección http o https.
PlaylistFromTemplateWrite— obligatorios: name, from_templateCrea una lista de reproducción a partir de una plantilla. Envíe solo name y from_template.
PlaylistIframePrimitive— obligatorios: id, primitive, src, title, rect, layer, content_fit, controllerPlaylistIframePrimitiveWrite— obligatorios: id, primitive, src, title, layer, content_fitPlaylistImagePrimitive— obligatorios: id, primitive, selector, resolved_media, rect, layer, content_fit, controllerPlaylistImagePrimitiveWrite— obligatorios: id, primitive, selector, layer, content_fitPlaylistInstance— obligatorios: id, name, revision, template_revision, outdatedPlaylistInstanceList— obligatorios: itemsPlaylistIntrinsicSize— obligatorios: width, heightPlaylistList— obligatorios: itemsPlaylistMediaEndAdvance— obligatorios: mode, max_msPlaylistMediaEndAdvanceWrite— obligatorios: modePlaylistMediaSelector— obligatorios: nonePlaylistMediaSelectorByAll— obligatorios: byPlaylistMediaSelectorByFolder— obligatorios: by, folder_idLos archivos listos de la carpeta multimedia primitiva directamente dentro de una carpeta de medios (GET /api/media-folders), no los de sus subcarpetas, ordenados y espaciados como por:all. Como una etiqueta, la carpeta se lee nuevamente en cada resolución de selector, por lo que mover archivos dentro o fuera cambia lo que muestran las pantallas en reproducción desde su siguiente ciclo.
Escribir una lista de reproducción requiere que la carpeta exista en el proyecto; puede estar vacía. Una carpeta que no contiene ningún archivo listo del primitivo, o que se elimina después, no coincide con nada. Los reproductores la reciben como by:all; el servidor resuelve la carpeta.
PlaylistMediaSelectorByID— obligatorios: by, media_idPlaylistMediaSelectorByIDs— obligatorios: by, media_idsPlaylistMediaSelectorByTag— obligatorios: byPlaylistPage— obligatorios: id, canvas, transition, advance, primitivesPlaylistPageAdd— obligatorios: pagePlaylistPageStructure— obligatorios: idUna página que permanece, y las dos configuraciones de página que una persona cambia. advance reemplaza el avance de la página cuando está presente y lo mantiene cuando se omite; una página de espacio publicitario no tiene ninguno. visibility reemplaza la visibilidad de la página cuando es un objeto, la elimina cuando es nulo y la mantiene cuando se omite.
Un objeto de visibilidad que solo establece enabled true es una no operación y se rechaza: envíe null para eliminar las reglas.
PlaylistPageV2— obligatorios: nonePlaylistPageWrite— obligatorios: id, canvas, transition, advance, primitivesPlaylistPageWriteV2— obligatorios: nonePlaylistPatch— obligatorios: noneLos campos omitidos se conservan. El nombre, páginas, audio y formato suministrados reemplazan esos valores de nivel superior; audio o formato nulo lo eliminan. Las páginas suministradas se verifican contra el formato almacenado cuando se omite el formato, y un formato suministrado contra las páginas almacenadas cuando se omiten las páginas. Identidad, revisión, comentarios y marcas de tiempo no pueden establecerse aquí.
Los comentarios tienen sus propios endpoints.
PlaylistPrimitive— obligatorios: nonePlaylistPrimitiveLocked— obligatorios: noneUna primitiva bloqueada es contenido de marca fijo de una plantilla (logotipo, fondo, diseño, tema): solo el propietario del proyecto o un miembro que pueda aprobar la añade, la quita, la mueve o la edita, o quita su bloqueo, y una lista de reproducción creada con la plantilla la mantiene bloqueada. Si se omite, no está bloqueada. Una primitiva bloqueada no puede leer un campo.
Un cambio de cualquier otra persona es primitive_locked (403), o una revisión con Propose.
PlaylistPrimitiveWrite— obligatorios: nonePlaylistRect— obligatorios: x, y, width, heightPlaylistRegionFormat— obligatorios: region, orientationUna franja dibujada sobre la página a lo largo de un borde de un monitor: header arriba, footer abajo, side en el borde derecho a toda la altura. orientation es la orientación del monitor para el que se crea, tal como la ve el espectador tras la rotación.
Todas las páginas tienen el mismo lienzo (width y height); un header o footer es más ancho que alto y un side más alto que ancho, con el lado largo al menos el doble del corto; de lo contrario, 400 invalid_request en pages[i].canvas.
La lista de reproducción contiene solo primitivas de imagen y de tarjeta (se rechaza una página de video, stream, iframe, aplicación o espacio publicitario) y no tiene banda sonora (se rechaza el audio); una primitiva no nombra monitores.
Una lista de reproducción de región nunca es la lista predeterminada de una pantalla ni de una carpeta, ni un takeover: se reproduce como entrada de programación o como campaña con covers definido en su región (covers main y la página completa la rechazan), y covers header, footer o side necesita una lista de reproducción de región de esa región.
La entrada o la campaña se rechaza con 409 playlist_format_mismatch cuando la franja no está dispuesta en ninguno de los monitores a los que apunta: una franja se dispone en un monitor de su orientación, juzgada sobre la superficie que informa el Player tras la rotación (la rotación del muro de la pantalla cuando no ha informado ninguna), y solo mientras no cubra más de la mitad del monitor (su alto para un header o footer, su ancho para un side).
Una campaña solo se rechaza cuando no está dispuesta en ninguna de las pantallas de su audiencia; en una pantalla de una audiencia mixta donde no lo está, la campaña sale de la pila de esa pantalla y su explicación dice region_not_laid_out.
Un cambio de formato que mueve una lista de reproducción hacia o desde una región, o a otra región, se rechaza con 409 resource_conflict mientras la use una programación de pantalla, un takeover o una lista predeterminada, una lista predeterminada de carpeta o una campaña.
PlaylistResolvedMedia— obligatorios: media_id, intrinsic_sizePlaylistRevision— obligatorios: 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).
Un valor que este lector no conoce se lee como edited.
PlaylistRevisionAuthor— obligatorios: type, nameQuién hizo la revisión, tal como lo nombra el registro de eventos del proyecto; ausente cuando la escritura no nombró a nadie (una línea base o trabajo del sistema).
PlaylistRevisionDetail— obligatorios: revision, playlistPlaylistRevisionList— obligatorios: itemsPlaylistStarterWrite— obligatorios: starterAñade la plantilla integrada Aviso urgente (un titular y un mensaje). Envíe solo starter y, si quiere, name.
PlaylistStinger— obligatorios: noneUna tarjeta de transición solo con stinger (mayor 1). Todos los miembros son opcionales; los valores predeterminados permanecen en la ubicación de ejecución sintética. hang_ms predetermina a 1000 y es como máximo el 60 % de la transición duration_ms (verificado por el servidor). logo nombra una imagen lista en este proyecto, usando la ruta de concesión de medios de la tarjeta.
PlaylistStreamPrimitive— obligatorios: id, primitive, sources, fallback_media_id, rect, layer, content_fit, muted, controller, resolved_mediaPlaylistStreamPrimitiveWrite— obligatorios: id, primitive, sources, fallback_media_id, layer, content_fitPlaylistStructurePatch— obligatorios: noneLa estructura de una lista de reproducción y nada que muestre una página (patchPlaylistStructure). Los miembros omitidos se mantienen. Un nombre suministrado reemplaza el nombre. Las páginas suministradas son el nuevo orden completo de las páginas que contiene la lista: una página almacenada omitida se elimina.
El contenido de la página (lienzo, transición, audio_cue, primitivos, comentarios) y la banda sonora no pueden enviarse y siempre son los almacenados.
PlaylistTemplateField— obligatorios: name, label, typeUn valor que toma una plantilla. Las páginas lo leen como {field.NAME}: en los params de una tarjeta (campos de texto y de dirección), como media_id del selector de una imagen o un vídeo (campo de medio) o como src completo de un iframe (campo de dirección).
PlaylistTemplateFields— obligatorios: noneDeclarar campos convierte la lista de reproducción en una plantilla. Cada marcador que lee una página debe nombrar un campo declarado del tipo correcto y cada campo debe leerse; una lista sin campos no lee marcadores. Una plantilla nunca se muestra en una pantalla (playlist_is_template). PUT sin fields los conserva; null o una matriz vacía los quita.
PlaylistTransition— obligatorios: type, duration_msTransición de página. type y duration_ms son ambos obligatorios; OpenAPI no los establece por defecto. Los ejemplos de autoría de deslizamiento usan duration_ms 600; ese valor no es un valor predeterminado del esquema.
PlaylistV2— obligatorios: id, name, revision, pagesPlaylistV2List— obligatorios: itemsPlaylistValuesChange— obligatorios: valuesPlaylistVideoPrimitive— obligatorios: id, primitive, selector, resolved_media, muted, loop, rect, layer, content_fit, controllerPlaylistVideoPrimitiveWrite— obligatorios: id, primitive, selector, layer, content_fitPlaylistWallFormat— obligatorios: displays, arrangement, orientationEl muro de video para el que se crea una lista de reproducción: de 2 a 12 monitores, con mosaicos de 1920 x 1080 (horizontal) o 1080 x 1920 (vertical), dispuestos en una fila, una columna o una cuadrícula. Una fila tiene los monitores como columnas y una fila, una columna tiene una columna y los monitores como filas, y una cuadrícula tiene columnas y monitores / columnas filas.
El monitor n se sitúa en la columna (n - 1) mod columns y en la fila floor((n - 1) / columns): de izquierda a derecha y luego de arriba a abajo.
El lienzo de c columnas y r filas de mosaicos de ancho w y alto h es (c * w, r * h), por ejemplo 5760 x 1080 para 3 monitores horizontales en fila, 1080 x 3840 para 2 monitores verticales en columna y 7680 x 3240 para 12 monitores horizontales en una cuadrícula de 4 columnas.
El ancho y alto del lienzo de cada página ordinaria deben ser exactamente iguales, de lo contrario 400 invalid_request en pages[i].canvas. La escala de la tarjeta en esa lista de reproducción es el mínimo entre ancho y alto del mosaico dividido por 1080 = 1.
Una lista de reproducción con formato puede vincularse solo a una pantalla cuya pared tiene la misma forma (displays = número de salidas, disposición, columnas, retrato si y solo si la rotación es 90 o 270), de lo contrario 409 playlist_format_mismatch: asignación, asignación de flota, entradas de horario y toma. Una lista sin formato se vincula a cualquier pantalla.
PlaylistWarning— obligatorios: code, message, page_id, primitive_idAlgo sobre lo que el autor de una escritura correcta debería actuar. La escritura guardó lo que llevaba; una advertencia nunca la hace fallar. Una escritura de lista de reproducción responde con advertencias en la lista de reproducción; una escritura de pantalla (updateScreen, las rutas de campos, ubicación y lista de reproducción del panel) en la pantalla; una asignación de flota en la página de resultados.
Dos códigos. iframe_framing_refused: una página https pública nombrada por una primitiva de iframe (su src o su fallback_src) envía X-Frame-Options (DENY, SAMEORIGIN o el obsoleto ALLOW-FROM) o una lista frame-ancestors de Content-Security-Policy que no admite el origen del Player web.
El Player web y los Players macOS, Samsung Tizen, LG webOS y BrightSign encuadran la página, por lo que no pueden mostrarla; los Players Android, Linux y Windows abren una página iframe completa y no se ven afectados.
El backend lee las cabeceras de respuesta tras confirmarse la escritura, para un máximo de 8 páginas distintas por escritura; no informa de una página inaccesible a tiempo o que responde con error. Cada página distinta aparece una vez, con la primera primitiva que la usa, y añade un evento playlist.iframe_framing_refused (advertencia) al registro del proyecto.
Un src con tokens de pantalla no es una sola página y no se lee. screen_fact_missing: a una pantalla a la que llega la escritura le falta un valor que lee el src de un iframe o los params de una aplicación mediante un token de pantalla ({screen.field.NAME}, {screen.location.…}, {screen.timezone}), o los valores que tiene forman uno que el manifiesto rechaza (una dirección de más de 2048 caracteres, un segmento de ruta de . o .., params de lanzamiento de más de 4096 caracteres en la URL de lanzamiento), por lo que la primitiva se omite del manifiesto de esa pantalla (diagnóstico del manifiesto screen_fact_missing o screen_fact_invalid) hasta que la pantalla tenga el valor.
Una advertencia por escritura nombra la primera primitiva de ese tipo, los tokens que ninguna pantalla listada pudo rellenar (como máximo 64), las primeras 20 pantallas afectadas y cuántas hay.
Una escritura de lista de reproducción (un reemplazo, un parche, un cambio de estructura, una promoción o una revisión aplicada) llega a las pantallas que muestran la lista de reproducción; una escritura de pantalla llega a esa pantalla, tanto para la lista de reproducción que muestra como para la que se acaba de asignar; una asignación de flota llega a las pantallas de su página; aprobar un cambio de pantalla llega a las pantallas que nombra.
PlaylistWrite— obligatorios: name, pagesPlaylistWriteV2— obligatorios: name, pagesPrimitiveEnter— obligatorios: typeEntrada de objeto opcional. La escritura de lista de reproducción y el manifiesto en tiempo de ejecución usan este objeto tal cual; no hay cambio a snake_case dentro de él. Ausente significa pintura en reposo, opacidad completa. El retraso entero opcional de 0 a 8 retrasa el inicio por stagger*120 ms tras el retraso compartido de 500 ms. Ausente o 0 es el inicio de hoy. La duración es una constante nombrada en screenrig.canvas/v1.
PrimitiveMotion— obligatorios: noneMovimiento persistente opcional de objeto. La escritura de lista de reproducción y el manifiesto en tiempo de ejecución usan este objeto tal cual; no hay cambio a snake_case dentro de él. Ausente significa que el primitivo permanece en reposo tras la entrada.
Copiado sin interpolar. spin y drift se aplican solo a imagen y video; aplicación e iframe con spin o drift son rechazados por el servidor (motion_not_allowed_for_primitive). path se aplica a imagen, video, aplicación e iframe. Esta restricción no está codificada como OpenAPI if/then.
PrimitiveMotionDrift— obligatorios: type, zoom, direction, speedEscala lenta continua alrededor del centro del clipRect combinada con una traslación lenta. Solo imagen y video; el servidor rechaza deriva en aplicación e iframe. Va y viene; nunca salta.
PrimitiveMotionPath— obligatorios: type, points, rateTraducción a lo largo de una polilínea de puntos de referencia en unidades de lienzo después del rectángulo creado. loop es por defecto loop cuando se omite. Válido en imagen, video, aplicación e iframe.
PrimitiveMotionPoint— obligatorios: x, yPrimitiveMotionSpin— obligatorios: type, direction, speedRotación continua alrededor del centro del clipRect. Solo imagen y video; el servidor rechaza giro en aplicación e iframe.
Problem— obligatorios: errors, instance, request_idEl documento de problema que responde cada ruta excepto las rutas de ejecución, contenido y sonda orientadas al Player (RuntimeProblem). El error mismo es errors[0]: su estado, código, tipo, título, detalle y sugerencia. Solo los miembros del documento permanecen en el nivel superior. Ramifique según errors[0].code, nunca según detail o hint, que son prosa.
Un campo de solicitud culpado añade errors[0].field; cada campo culpado adicional es su propia entrada con el detalle de ese campo.
ProblemError— obligatorios: status, code, type, title, detail, hintUn error de un documento de problema. Los miembros adicionales describen este error más a fondo (por ejemplo, dependencias de not_ready).
ProblemField— obligatorios: field, code, detailProject— obligatorios: id, revision, status, email, used_bytes, reserved_bytes, screen_count, content_limit_bytes, screen_limit, credit_remaining, created_at, updated_at, nameProjectBillingUsage— obligatorio: period, usage, stored_bytes, allowanceProjectCapabilities— obligatorios: project_id, plan_id, features, feature_revision, capabilities, media_video_bytes, plan_features, limitsProjectContext— obligatorios: project, organizationProjectContextList— obligatorios: projectsProjectCreate— obligatorios: nameProjectDeleteConfirmation— obligatorios: name, revisionProjectDeletionPreview— obligatorios: project, organization, devices, allowedProjectFeatures— obligatorios: advertiser, screensProjectMove— obligatorios: organization_idProjectMoveDestinations— obligatorios: organizationsProjectName— obligatorios: noneNombre de proyecto imprimible recortado. Rechaza controles, texto con apariencia de URL, @, www. y ://.
ProjectOwnerTransfer— obligatorios: user_idProjectPatch— obligatorios: nameProjectPlanFeature— obligatorios: id, enabled, required_planProjectPlanFeatures— obligatorios: featuresets, featuresLas funciones del plan que tiene el proyecto. El plan y los featuresets del proyecto las deciden; el crédito nunca desbloquea una. Una función que el proyecto no tiene se rechaza con feature_not_in_plan (402), cuyo required_plan nombra el plan de venta general más bajo que la incluye.
ProjectPlanLimits— obligatorios: screens, members, video_bytes, event_retention_daysLos límites del proyecto tal como los dan su plan y sus featuresets, las cifras que aplica la admisión. Cero significa que no hay tope del plan.
ProjectUptime— obligatorios: itemsProvisionScreen— obligatorios: noneRTSPStreamSource— obligatorios: protocol, urlReadyResponse— obligatorios: status, degradedReleaseLaunch— obligatorios: launch_url, expires_atReport— obligatorios: kind, title, generated_at, columns, rows, truncatedUn informe como tabla: columns dice qué es cada miembro de una fila. Las filas llevan más miembros de los que muestran las columnas (id, parent_id y depth para el esquema de carpetas). Las columnas de porcentaje van de 0 a 100.
ReportCatalog— obligatorios: items, formatsReportColumn— obligatorios: key, label, typeReportKindInfo— obligatorios: kind, title, description, paramsReportParam— obligatorios: name, descriptionReportSchedule— obligatorios: cadenceReportSubscription— obligatorios: id, name, kind, filters, schedule, format, enabled, recipients, revision, created_at, updated_atReportSubscriptionList— obligatorios: itemsReportSubscriptionPatch— obligatorios: noneReportSubscriptionRecipient— obligatorios: user_idReportSubscriptionWrite— obligatorios: name, kind, schedule, format, recipientsReseller— obligatorios: id, name, spread_bps, spread_effective_at, customer_count, review_state, customer_limitResellerCustomer— obligatorios: organization_id, name, plan_id, delegated_at, project_count, screen_count, stored_bytes, annual_list_cents, annual_wholesale_centsResellerCustomerPage— obligatorios: items, next_cursorResellerCustomerProject— obligatorios: id, name, status, screen_count, memberResellerCustomerProjectPage— obligatorios: projects, next_cursorResellerEnrollment— obligatorios: organization_idResellerList— obligatorios: itemsResellerStatement— obligatorios: reseller_id, name, period, spread_bps, lines, usage_list_mcr, usage_wholesale_mcr, plan_annual_list_cents, plan_annual_wholesale_centsResellerStatementLine— obligatorios: 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— obligatorios: id, nameReview— obligatorios: id, kind, state, subject, proposer, url, created_at, updated_at, impactReviewAdCreative— obligatorios: creative_id, creative_revision, content_pathReviewApproveRequest— obligatorios: noneReviewBlocker— obligatorios: id, state, subjectReviewChangesRequest— obligatorios: noteReviewDecider— obligatorios: noneReviewDecisionResult— obligatorios: reviewReviewDependentResult— obligatorios: id, stateReviewImpact— obligatorios: screensReviewList— obligatorios: items, next_cursor, pending_countReviewLocation— obligatorios: project_id, project_nameReviewMediaChange— obligatorios: media_id, filename, before, afterEl cambio pendiente de un elemento multimedia que una revisión selector_refresh pregunta.
ReviewMediaFields— obligatorios: tags, folder_idReviewMediaFile— obligatorios: sha256, bytes, content_typeReviewMediaPlaylist— obligatorios: id, name, screens, media_added, media_removedReviewMediaReplace— obligatorios: media_id, filename, source, version, before, after, aspect_changed, playlistsEl reemplazo del archivo de un elemento multimedia sobre el que pregunta una revisión media_replace. El medio conserva su archivo hasta la aprobación.
ReviewPageEdit— obligatorios: op, page_idReviewPending— obligatorios: status, reviewUna escritura de clase revisión con acceso Proponer, o una escritura que alcanza una pantalla protegida con cualquier nivel de acceso. El cambio no está en pantalla hasta que una persona aprueba la revisión; una revisión protegida la decide un segundo aprobador (docs/screen-scope.md).
ReviewPerson— obligatorios: user_id, nameReviewPlaylistChange— obligatorios: operation, base_revision, proposed, diffReviewPlaylistDiff— obligatorios: name_changed, pages_added, pages_removed, pages_changed, soundtrack_changed, media_added, media_removedReviewPolicy— obligatorios: agent_changes_require_review, review_policy_revisionReviewPolicyUpdate— obligatorios: agent_changes_require_reviewReviewPreview— obligatorios: live, proposedListas de reproducción activas y propuestas en la forma almacenada que GET /api/playlists/{id} devuelve (páginas con resolved_media).
ReviewProposer— obligatorios: kindReviewProtectedCampaign— obligatorios: noneUn campaign_create, campaign_update o campaign_delete.
ReviewProtectedChange— obligatorios: subkindLa entrada guardada de una revisión protected_change, aplicada a través del servicio propietario cuando la aprueba un segundo aprobador. Exactamente uno de campaign, folder y move está presente, como nombra subkind. La aprobación se repite en base_revision; una campaña o carpeta que avanzó deja la revisión obsoleta (review_stale).
ReviewProtectedFolder— obligatorios: noneUn folder_create, folder_update, folder_delete o folder_unprotect.
ReviewProtectedMove— obligatorios: folder_id, screen_ids, folder_idsUn screens_move, el cuerpo de POST /api/screens/move.
ReviewRejectRequest— obligatorios: reasonReviewScreenChange— obligatorios: action, screens, request, playlist_idsReviewSubject— obligatorios: type, id, nameReviewSummary— obligatorios: id, kind, state, url, subject, impactRuntimeAdslotCandidate— obligatorios: page_id, occurrence_id, check_sequence, earliest_start_atRuntimeAdslotEvent— obligatorios: event_id, decision_id, occurrence_id, kind, client_sequenceRuntimeAdslotEventBatch— obligatorios: eventsRuntimeAdslotEventResponse— obligatorios: resultsRuntimeAdslotEventResult— obligatorios: event_id, stateRuntimeAdslotMedia— obligatorios: kind, duration_ms, content_type, bytes, sha256, content_path, fitRuntimeAdslotPage— obligatorios: id, type, adslot_idEspacio publicitario de página completa, enviado solo a una sesión emparejada con adslot-v1 concedido. Un Player que encuentra un tipo de página desconocido descarta esa página.
RuntimeAdslotResolveRequest— obligatorios: manifest_revision, candidatesRuntimeAdslotResolveResponse— obligatorios: server_time, resultsRuntimeAdslotResult— obligatorios: occurrence_id, check_sequence, stateRuntimeAdvance— obligatorios: modeRuntimeApplicationPackage— obligatorios: version, url, bytes, sha256, entrypoint, contentTypePaquete normalizado inmutable construido solo a partir del árbol de aplicaciones validado de forma independiente. Los reproductores nativos verifican los bytes y SHA-256 antes de retener atómicamente esta versión para restauración offline del último estado conocido bueno. La URL es una referencia de transporte vinculada a la autorización, no una URL pública o duradera de objeto.
RuntimeApplicationPrimitive— obligatorios: id, primitive, applicationId, releaseId, launchUrl, origin, protocol, grantId, package, rect, layer, contentFitRuntimeAudio— obligatorios: loop, volume, tracksBanda sonora de la lista de reproducción (docs/playlist-audio.md). Emitida solo cuando la lista tiene una y al menos una pista proyectada. El reproductor reproduce las pistas en orden, independientemente del secuenciador de páginas; los cambios de página, transiciones y visibilidad nunca la pausan ni reinician.
La identidad de la pista es id más mediaId más sha256, nunca src, por lo que una actualización de manifiesto que mantiene la pista en reproducción no la reinicia. La ganancia efectiva es volumen por el volumen del Player. Una pista defectuosa se descarta por sí sola (invalid_audio_track).
RuntimeAudioCue— obligatorios: track, restartPista de banda sonora emitida en una página que creó audio_cue. Cuando la página se vuelve actual: si se está reproduciendo una pista diferente o ninguna, cambie a la pista desde el inicio; si la pista se está reproduciendo, reiníciela solo cuando restart sea verdadero. La secuencia continúa desde la pista. Se puede ignorar una pista. Se descarta una pista que no nombra ninguna pista del manifiesto (invalid_audio_cue).
RuntimeAudioTrack— obligatorios: id, mediaId, src, sha256, bytes, contentType, durationMs, grantIdRuntimeCanvas— obligatorios: width, height, viewportFit, backgroundRuntimeCardPrimitive— obligatorios: id, primitive, card, major, params, rect, layer, contentFitUna tarjeta integrada. Para un Player que declara capacidades CardML, el backend selecciona la revisión publicada compatible más reciente dentro de la versión principal fijada, considerando revisiones retenidas y todas las características requeridas; cuando ninguna califica, omite la tarjeta con diagnósticos card_unavailable y elimina páginas vacías.
El reproductor combina los valores predeterminados de la tarjeta, luego los parámetros, y cuando hay datos, las propiedades dinámicas del documento en GET /screen/card-data/{data} (solo claves que la tarjeta marca como dinámicas).
Una tarjeta con datos permanece oculta hasta que llega su primer documento y luego aparece; screen.card_data_changed para la clave la vuelve a buscar en su lugar. feed, cuando está presente, se obtiene de la misma ruta y se pasa a la tarjeta como su feed. Un Player que no tiene la tarjeta o su versión principal no dibuja nada para ella.
Una cadena en params o en el documento de datos que comienza con media: es una referencia de medios, media:<id>, que el Player resuelve a bytes que posee antes de que la tarjeta los dibuje, y queda en blanco cuando no puede; nunca pasa una URL de params o datos a una tarjeta. media lista el nombre de parámetros de imágenes listas, con los descriptores que lleva resolvedMedia de un primitivo de imagen, para que el Player las descargue y verifique cuando llega el manifiesto; una referencia a media que desapareció desde la publicación está ausente y la tarjeta dibuja su alternativa.
Los elementos multimedia que nombra un documento de datos provienen de /media/{media_id} cuando llega el documento (ETag es el sha256). Los elementos multimedia de las tarjetas nunca retienen una página. El backend ya expandió para esta pantalla los tokens {screen.name}, {screen.timezone}, {screen.field.NAME} y {screen.location} de una colocación, por lo que params y data llevan sus propios valores.
RuntimeChrome— obligatorios: schema_version, bannerChrome propiedad del tiempo de ejecución (docs/player-compatibility.md §8). Los lectores leen los miembros que conocen y ignoran el resto; una forma de banner que un lector no entiende no muestra banner.
RuntimeCodecs— obligatorios: noneLista de códecs RFC 6381 derivada del servidor para esta reproducción exacta, nunca declarada por el cliente. Es un hermano de contentType; un Player puede formar una consulta de capacidad como contentType seguido de codecs="VALOR". Un video cuyo códec no puede derivarse se rechaza al subirlo. La propiedad es opcional. Un valor ausente no significa que el códec no sea compatible.
Un valor presente contiene actualmente una entrada de pista de video; la gramática permite entradas separadas por comas.
RuntimeCommandResultWrite— obligatorios: stateEl cuerpo de POST /screen/commands/{command_id}/result. Los miembros desconocidos se ignoran (docs/player-compatibility.md §1.1).
RuntimeConditionReport— obligatorios: severity, code, contextRuntimeDisplay— obligatorios: noneEl control del monitor de la pantalla, evaluado en el dispositivo (docs/player-compatibility.md §6.5): el horario de energía y la anulación, el ajuste de oscurecimiento por inactividad y el modo de brillo. Se omite cuando la pantalla no tiene ninguno; entonces el monitor permanece encendido con el brillo del operador. Se ignoran miembros desconocidos.
RuntimeHealthWrite— obligatorios: noneEl cuerpo PUT /screen/health. Cada miembro es opcional; envíe lo que la plataforma pueda medir. Los miembros desconocidos se ignoran y un valor fuera de rango se descarta (no se rechaza). Los enteros son números JSON enteros.
RuntimeHostHint— obligatorios: platformLa pista opcional del host nativo al iniciar el emparejamiento, completar el emparejamiento y crear la sesión de identidad. Nombra un dispositivo y nunca es autorización.
Se lee con tolerancia (docs/player-compatibility.md §1.1.1): se ignoran miembros desconocidos, se descarta un campo mal formado o una entrada de capacidades, se mantienen como máximo 32 capacidades, y un valor que no es un objeto o una plataforma fuera del patrón descarta toda la pista. Ninguno de estos rechaza la solicitud.
Un Player aún envía solo los valores de plataforma registrados y los miembros a continuación, porque un backend precontrato rechaza cualquier otra cosa.
RuntimeHostHintDevice— obligatorios: noneIdentificadores de hardware opcionales en la pista nativa del host. Un campo mal formado se descarta.
RuntimeIframeCookie— obligatorios: name, value, domain, path, secure, httpOnly, sameSiteUna cookie de una pestaña compartida, con el formato de la API de cookies del navegador. El valor es secreto.
RuntimeIframePrimitive— obligatorios: id, primitive, src, title, rect, layer, contentFitRuntimeImagePrimitive— obligatorios: id, primitive, selector, resolvedMedia, grantId, rect, layer, contentFitRuntimeImageResolvedMedia— obligatorios: mediaId, src, intrinsicSize, sha256, bytes, contentTypeRuntimeIntrinsicSize— obligatorios: width, heightRuntimeKVEntry— obligatorios: application_id, key, value_base64, content_type, bytes, sha256, revisionRuntimeKVList— obligatorios: itemsRuntimeKVSummary— obligatorios: application_id, key, content_type, bytes, sha256, revisionRuntimeKVWrite— obligatorios: value_base64RuntimeKiosk— obligatorios: lockEl bloqueo de kiosco (docs/player-compatibility.md §6.5). Se emite en cada sesión mientras kiosk.lock de la pantalla está activado y se omite en caso contrario. Un Player que puede fijarse a la pantalla lo hace mientras lock es true y libera la fijación cuando el miembro está ausente o lock es false; uno que no puede lo ignora. Se ignoran miembros desconocidos.
RuntimeLiveHeartbeat— obligatorios: connectionEl informe propio del Player. Esquema abierto.
RuntimeLiveHeartbeatAnswer— obligatorios: lease_until, max_untilRuntimeLiveJoin— obligatorios: live_id, ice_servers, lease_until, max_until, heartbeat_ms, videoA qué publica un Player y dentro de qué límites. Esquema abierto.
RuntimeLiveJoinRequest— obligatorios: noneVacío. Se puede omitir el cuerpo.
RuntimeLiveOffer— obligatorios: sdpUna descripción de sesión sin su tipo, como la oferta del Player y la respuesta del relé.
RuntimeLiveStopped— obligatorios: reasonRuntimeManifest— obligatorios: schemaVersion, manifestRevision, grantId, contentGeneration, screenId, screenLabel, playlistRevision, generatedAt, pagesManifiesto de tiempo de ejecución inmutable usando el contrato determinista screenrig.canvas/v1 de lienzo, rectángulo, ajuste y orden de fuente. Se permiten propiedades adicionales de solo lectura para que un reproductor en este contrato ignore claves desconocidas (regla de compatibilidad 2). Los esquemas de escritura permanecen cerrados.
Las páginas son páginas ordinarias de lienzo y, para una sesión emparejada concedida adslot-v1, páginas de adslot de página completa; un manifiesto sin página de adslot es contenido propio.
RuntimeManifestDiagnostic— obligatorios: level, code, detailUna omisión de proyección de tiempo de ejecución a prueba de fallos. Los Players y la CLI pueden mostrar estos; nunca son autorizaciones.
RuntimeMediaSelector— obligatorios: noneRuntimeMediaSelectorByAll— obligatorios: by, oneAtATimeRuntimeMediaSelectorByID— obligatorios: by, mediaId, oneAtATimeRuntimeMediaSelectorByIDs— obligatorios: by, mediaIds, oneAtATimeRuntimeMediaSelectorByTag— obligatorios: by, oneAtATimeRuntimeObservationSurfaceWrite— obligatorios: id, width, height, pixel_ratio, presentationRuntimeObservationWrite— obligatorios: observed_at, surfacesEl cuerpo PUT /screen/observation. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1). El valor almacenado es ScreenObservation del proyecto.
RuntimeOrigins— obligatorios: contentLa lista blanca de orígenes entregada (docs/player-compatibility.md §2.3). Presente solo en una respuesta mint para un Player con orígenes-v1 concedidos.
El reproductor une el contenido con sus orígenes de contenido compilados e ignora una entrada inválida. release_suffix reemplaza el sufijo de lanzamiento compilado solo cuando es un sufijo DNS válido de al menos dos etiquetas; está ausente cuando el origen en tiempo de ejecución sirve los lanzamientos directamente (desarrollo local).
El conjunto entregado nunca cambia el origen de la credencial, y el backend nunca pone una URL en un origen que esta sesión mint no entregó. Un Player almacena el objeto que validó como último bueno conocido, por lo que una sesión posterior sin orígenes mantiene válido ese LKG.
RuntimePage— obligatorios: contractVersion, id, canvas, transition, advance, primitivesRuntimePairingScreen— obligatorios: id, public_id, label, state, revision, manifest_revision, content_access_generation, created_at, updated_atResumen de pantalla propiedad del tiempo de ejecución en finalizaciones de emparejamiento y aprovisionamiento del navegador. Su conjunto de miembros está congelado: los campos de pantalla del proyecto nunca aparecen aquí (docs/player-compatibility.md §8). el estado permanece dentro de los tres valores siguientes.
RuntimePrimitive— obligatorios: noneRuntimeProblem— obligatorios: type, title, status, detail, instance, code, request_id, errorsEl documento de problema de las rutas orientadas al Player de pantalla (/screen/) y multimedia (/media/), los streams de emparejamiento y las rutas de sonda (/.ready, /.health): cada miembro plano en el nivel superior. Los Players liberados por la tienda leen su código y acción de nivel superior (docs/player-compatibility.md §5), por lo que esta forma permanece tal cual; todas las demás rutas responden Problem.
RuntimeRect— obligatorios: x, y, width, heightRuntimeReport— obligatorios: noneLos cuerpos y contextos de reporte se leen con tolerancia (docs/player-compatibility.md §1.1). Un código necesita sus propios miembros de contexto; otros miembros se ignoran. Los Players aún envían solo los miembros a continuación, porque un backend pre-contrato rechaza cualquier otro.
RuntimeScreenLabel— obligatorios: screen_labelEl nombre almacenado de la pantalla, el valor que lleva el manifiesto como screen_label.
RuntimeScreenLabelWrite— obligatorios: screen_labelEl cuerpo PUT /screen/screen-label. El servidor quita los espacios al inicio y al final de screen_label y almacena de 1 a 120 caracteres sin caracteres de control. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1).
RuntimeScreenPlaylist— obligatorios: playlist_idLa lista de reproducción asignada a la pantalla después del cambio.
RuntimeScreenPlaylistWrite— obligatorios: playlist_idEl cuerpo PUT /screen/playlist. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1).
RuntimeScreenPlaylists— obligatorios: playlists, moreLas listas de reproducción que ofrece el selector en el dispositivo de una pantalla, alfabéticamente por nombre sin considerar mayúsculas, luego por id.
RuntimeSelectorPlaylistSnapshot— obligatorios: selections, pageMaxMsLas selecciones de una lista de reproducción de la pila, indicadas por los ids de página de esa misma lista de reproducción.
RuntimeSelectorSnapshot— obligatorios: manifestRevision, snapshotRevision, selections, pageMaxMsRuntimeSession— obligatorios: paired, capabilities, event_cursor, public_urlSesión propiedad del tiempo de ejecución (docs/player-compatibility.md §8). Los lectores ignoran miembros desconocidos y valores de capacidades desconocidas. Un nuevo miembro se envía solo a sesiones cuyas concesiones lo cubren.
RuntimeSessionRequest— obligatorios: public_idMoneda anónima para espectadores. Los miembros desconocidos se ignoran (docs/player-compatibility.md §1.1).
RuntimeStack— obligatorios: levels, playlistsCada nivel de la pila de la pantalla, enviado solo a un Player que declaró la capacidad de host schedule.stack y solo cuando la pila tiene más de un nivel (docs/player-compatibility.md §6.11). Los miembros raíz del manifiesto son la lista de reproducción del nivel inferior; el Player resuelve los niveles por sí mismo con el contrato de programación.
RuntimeStackPlaylist— obligatorios: playlistRevision, pagesRuntimeStatusWrite— obligatorios: observed_at, chipEl cuerpo PUT /screen/status. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1). El valor almacenado es ScreenStatus del proyecto.
RuntimeStorageWrite— obligatorios: observed_at, volume, cache, durability, plan, transfer_24hEl cuerpo PUT /screen/storage. Se ignoran miembros desconocidos (docs/player-compatibility.md §1.1). El valor almacenado es ScreenStorage del proyecto más received_at del servidor.
RuntimeStreamPrimitive— obligatorios: id, primitive, sources, muted, fallback, grantId, rect, layer, contentFitRuntimeSuspension— obligatorios: message, sinceSe emite mientras la pantalla está suspendida (docs/player-compatibility.md §6.9): pages es [] sin diagnostics, y un Player muestra message como un aviso a pantalla completa en lugar de la superficie sin contenido. since es el momento en que la pantalla se suspendió por primera vez. La revisión del manifiesto es la propia del aviso, nunca la de una lista de reproducción, y la pantalla no necesita una lista de reproducción asignada.
RuntimeTelemetryBatch— obligatorios: telemetry_epoch, stream_id, sequence, created_at, reportsUna cola FIFO duradera del Player envía como máximo un lote ordinario por minuto con una fase aleatoria, o antes si se llena. El cuerpo JSON total es como máximo 256 KiB; como máximo 64 informes, cada uno de hasta 32 KiB. Cada informe conserva su marca de tiempo de ocurrencia y play_id estable.
Mantener un lote inmutable en vuelo en disco hasta 202, incrementar la secuencia solo después del acuse de recibo, y reintentar los mismos bytes tras respuestas perdidas o reinicios. La secuencia comienza en 1 y no tiene saltos.
Dedupe retiene como máximo ocho transmisiones en vivo por pantalla, cada marca de agua por al menos 24 horas en las que su lote aún puede reproducirse; mantenga la misma transmisión durante la renovación de credenciales. Los registros expiran localmente después de 24 horas con contabilidad explícita. manifest.activated y manifest.upgrade permanecen individuales e inmediatos.
Las escrituras interactivas, resolución de anuncios, obtención de contenido, capturas de pantalla y SDK emitConfirmed() también son inmediatas. El muestreo de salud mantiene su cadencia de quince minutos; las transiciones urgentes de pantalla/salud se envían inmediatamente. La observación y las instantáneas ordinarias de salud son últimas ganadoras con tiempos originales de ocurrencia. Salud requiere health.write.
Los informes individuales existentes siguen siendo aceptados. Los límites de abuso de ítems de informe se aplican por nuevo ítem y no por sobre HTTP; la reproducción comprometida consume solo la admisión de la solicitud.
RuntimeTransition— obligatorios: type, durationMsTransición de página creada. Los movimientos simples mantienen el tipo, duración y decoraciones opcionales. El stinger lleva la forma normal del contenido de la tarjeta sobre ambas capas. La falta de código o un intérprete de Player incompatible degrada solo la transición a un fundido cruzado de la misma duración, con diagnósticos de transition_unavailable.
RuntimeTransitionCard— obligatorios: primitive, card, major, params, version, src, sha256, model, requiresEl mismo contenido proyectado de tarjeta que una tarjeta canvas, sin geometría de colocación canvas. Stinger está fijado a major 1; params incluye durationMs y hangMs.
RuntimeUpgradeNotice— obligatorios: state, player_kind, recommendedPresente en una respuesta mint cuando la versión comparable del reproductor está por debajo de la versión recomendada para player_kind (docs/player-compatibility.md §6.1). El reproductor inicia una comprobación de actualización de plataforma y no muestra nada en pantalla. Un lector ignora al miembro para un estado que no conoce.
RuntimeVerbosity— obligatorios: noneEl nivel de registro y el nivel de toast más bajos que el Player genera y muestra (docs/player-compatibility.md §6.12). Se emite en cada sesión cuando la pantalla define alguno de los dos; cada miembro se omite cuando no está definido. Los errores siempre se generan y se muestran. Un Player ignora un miembro o valor desconocido y conserva su valor predeterminado.
RuntimeVideoPrimitive— obligatorios: id, primitive, selector, resolvedMedia, muted, loop, grantId, rect, layer, contentFitRuntimeVideoResolvedMedia— obligatorios: mediaId, src, intrinsicSize, sha256, bytes, contentTypeRuntimeWall— obligatorios: outputs, arrangement, rotation, spanEl muro de video de la pantalla según lo dispone su reproductor (docs/player-compatibility.md §6.8). Se emite solo cuando la pantalla tiene un muro. Se ignoran miembros desconocidos.
SCIMError— obligatorios: schemas, statusEl documento de error de RFC 7644 sección 3.12.
SCIMEvent— obligatorios: at, action, statusSCIMEventList— obligatorios: eventsSCIMGroupList— obligatorios: groupsSCIMGroupProjectBinding— obligatorios: binding_id, project_id, project_name, roleSCIMGroupSummary— obligatorios: id, display_name, member_count, bindingsSCIMResource— obligatorios: noneUn documento SCIM 2.0 con la forma que le dan RFC 7643 y RFC 7644 en la ruta que lo transporta; cada operación indica cuál es. Es un recurso User o Group, un ListResponse, un mensaje PatchOp, un ServiceProviderConfig, un ResourceType o un Schema. Los miembros que screenRIG no usa se aceptan y se ignoran.
SCIMSettings— obligatorios: enabled, base_url, tokens, user_count, group_countSCIMSettingsWrite— obligatorios: enabled, proofSCIMToken— obligatorios: id, name, prefix, created_atSCIMTokenCreate— obligatorios: name, proofSCIMTokenCreated— obligatorios: id, name, prefix, created_at, tokenUn SCIMToken con su secreto, devuelto una sola vez.
SSODiscovery— obligatorios: sso, required, accountCómo inicia sesión o se registra la dirección. sso, required y provider_name los decide únicamente el dominio de la dirección; account indica si una persona activa tiene la dirección.
SSODiscoveryRequest— obligatorios: emailSSOErrorCode— obligatorios: noneEl código estable con el que termina un inicio de sesión único cuando no se completa: el valor de #sso_error= en la dirección a la que redirige POST /api/sso/finish, y el código de una prueba fallida del proveedor de identidad. no_email: el proveedor no declaró ninguna dirección de correo electrónico. email_unverified: marcó la dirección como no verificada. domain_not_allowed: la dirección no pertenece a ninguno de los dominios verificados de la organización. account_exists: la dirección ya pertenece a una cuenta con su propio inicio de sesión; la persona inicia sesión como antes y vincula la identidad desde su cuenta (intent link). managed_elsewhere: otra organización administra a la persona. subject_mismatch: la cuenta está vinculada a una identidad diferente en el mismo proveedor. not_provisioned: nadie tiene la dirección y la conexión no crea personas. sso_required: la organización exige el inicio de sesión único para la dirección. staff_account: el proveedor de identidad de un cliente nunca inicia sesión en una cuenta del personal de screenRIG, ni la adopta ni la vincula. expired: el inicio de sesión superó sus 10 minutos. bad_state: el state del inicio de sesión o su vinculación con el navegador no coincide, o ya se usó. interaction_required: una renovación silenciosa necesita a la persona. provider_refused: el proveedor respondió con un error. provider_unavailable: no se pudo alcanzar o leer el proveedor. verification_failed: el token o la aserción del proveedor no superó la verificación. deactivated: la persona está desactivada.
SSOPolicy— obligatorios: required, break_glass_user_ids, passkey_admin_ids, policy_revisionSSOPolicyWrite— obligatorios: required, break_glass_user_ids, proofSSOStart— obligatorios: redirect_urlSSOStartRequest— obligatorios: emailSSOTestStart— obligatorios: redirect_urlScheduleCalendar— obligatorios: subject, from, to, screens, groupsScheduleCalendarConflict— obligatorios: kind, level_idsScheduleCalendarGroup— obligatorios: key, screens, screen_ids, displays, levels, spans, on_screen, conflictsScheduleCalendarOnScreen— obligatorios: display, from, toScheduleCalendarSpan— obligatorios: level_id, from, to, stateScheduleImportCommitted— obligatorios: preview, appliedScheduleImportLevel— obligatorios: key, action, home, content, screens, priority, rowsScheduleImportPreview— obligatorios: name, columns, valid, fingerprint, summary, rows, levels, removalsScheduleImportRemoval— obligatorios: homeScheduleImportRequest— obligatorios: rowsScheduleImportResolved— obligatorios: kind, id, nameScheduleImportRow— obligatorios: row, statusScheduleImportRowError— obligatorios: code, messageScheduleImportSummary— obligatorios: rows, rows_with_errors, levels, creates, updates, unchanged, removes, screens, playlistsSchedulePreview— obligatorios: gained, lost, calendarQué cambiaría una escritura de campaña o de programación. gained son las pantallas que llevarían un nivel de la escritura que ahora no llevan, lost las que llevan uno que dejarían de llevar; un nivel que permanece en una pila no cambia ninguno de los dos y aparece en calendar.
SchedulePreviewReach— obligatorios: count, screen_idsScreen— obligatorios: id, public_id, label, revision, manifest_revision, manifest_upgrade, content_access_generation, state, online, created_at, updated_atScreenAction— obligatorios: noneUna acción de flota, discriminada por tipo. Cada miembro lleva solo sus propios parámetros; un miembro de otro tipo es un campo desconocido e invalid_request.
ScreenActionAddTags— obligatorios: type, tagsAgrega etiquetas que una pantalla no tiene ya. Una pantalla que excedería 16 etiquetas falla con invalid_request.
ScreenActionAssign— obligatorios: type, playlist_idScreenActionClearDisplaySchedule— obligatorios: typeElimina la programación de pantalla de cada pantalla; una pantalla sin programación está bien y sin cambios.
ScreenActionClearPlaylist— obligatorios: typeQuita la lista de reproducción predeterminada propia de cada pantalla, conservando el emparejamiento y los demás niveles de contenido. Sin contenido efectivo, el Player muestra su pantalla de espera. De clase revisión, como la asignación.
ScreenActionClearPlaylistSchedule— obligatorios: typeElimina la programación de lista de reproducción de cada pantalla; una pantalla sin programación está bien y sin cambios.
ScreenActionClearRebootSchedule— obligatorios: typeQuita la programación de reinicio de cada pantalla; una pantalla sin ella queda ok y sin cambios. Solo acceso de gestión.
ScreenActionDisplay— obligatorios: type, powerLas mismas reglas que ScreenDisplayWrite. until se verifica contra el reloj de la solicitud cuando la Idempotency-Key no tiene registro de flota, y nuevamente por cada pantalla.
ScreenActionDisplayClear— obligatorios: typeFinaliza la anulación manual de pantalla de cada pantalla (DELETE /api/screens/{id}/display); una pantalla sin ella está bien y sin cambios.
ScreenActionMaintenance— obligatorios: typePOST /api/screens/{id}/clear-cache, /restart-app o /update por pantalla; una pantalla cuyo host no declaró la capacidad falla por sí sola con command_unsupported. Una pantalla sin conexión mantiene el comando queued hasta que vuelve a estar en línea (expires_in_s).
ScreenActionReboot— obligatorios: typePOST /api/screens/{id}/reboot por pantalla; una pantalla cuyo host no declaró reboot falla sola con reboot_unsupported. Una pantalla sin conexión mantiene el reinicio en cola hasta que se pone en línea (expires_in_s).
ScreenActionReload— obligatorios: typePOST /api/screens/{id}/reload por pantalla. Una pantalla sin conexión mantiene la recarga en cola hasta que se pone en línea (expires_in_s).
ScreenActionRemoveTags— obligatorios: type, tagsElimina las etiquetas listadas; se ignora una etiqueta que la pantalla no tiene.
ScreenActionRequest— obligatorios: selector, actionScreenActionResult— obligatorios: action, matched, succeeded, failed, resultsScreenActionScreenResult— obligatorios: screen_id, statusEl resultado de una pantalla. ok lleva el resultado de la ruta de una sola pantalla: revision (y tags para las acciones de etiquetas) para las acciones assign, tag, takeover, takeover_clear, set_playlist_schedule, clear_playlist_schedule, set_reboot_schedule y clear_reboot_schedule, reload para reload, toast para toast. failed lleva el problema que habría respondido la solicitud propia de esa pantalla.
ScreenActionSelector— obligatorios: noneScreenActionSelectorFolder— obligatorios: by, folder_idCada pantalla activa de la carpeta de pantallas y de cada carpeta que contiene, en orden de creación. No hay límite de cantidad de pantallas.
ScreenActionSelectorIds— obligatorios: by, screen_idsScreenActionSelectorTag— obligatorios: by, tagCada pantalla activa cuyas etiquetas contienen la etiqueta, en orden de creación. No hay límite de cantidad de pantallas.
ScreenActionSetDisplaySchedule— obligatorios: type, enabled, windowsReemplaza la programación de pantalla de cada pantalla (ScreenDisplayScheduleWrite), normalizada una vez antes de distribuir. Una pantalla sin zona horaria falla sola con invalid_request.
ScreenActionSetPlaylistSchedule— obligatorios: type, entriesReemplaza la programación de lista de reproducción de cada pantalla con las mismas entradas (ScreenPlaylistScheduleWrite). Los IDs de entrada se asignan una vez antes de distribuir. Una pantalla sin zona horaria o sin lista de reproducción predeterminada falla sola con invalid_request.
ScreenActionSetRebootSchedule— obligatorios: type, enabled, windowsReemplaza la programación de reinicio de cada pantalla (ScreenRebootScheduleWrite), normalizada una vez antes de la distribución. Solo acceso de gestión. Una pantalla sin zona horaria falla por sí sola con invalid_request, y una cuyo Player no declaró reboot con reboot_unsupported.
ScreenActionSetTags— obligatorios: type, tagsReemplaza el conjunto de etiquetas de cada pantalla; un arreglo vacío lo borra.
ScreenActionTakeover— obligatorios: type, playlist_idLas mismas reglas que ScreenTakeoverWrite. until se verifica contra el reloj de la solicitud antes de la distribución cuando la Idempotency-Key no tiene registro de flota, y nuevamente por cada pantalla.
ScreenActionTakeoverClear— obligatorios: typeFinaliza la toma de control de cada pantalla; una pantalla sin ella está bien y sin cambios.
ScreenActionToast— obligatorios: type, level, textLas mismas reglas de nivel, texto y duración que ScreenToastWrite, validadas una vez antes de la distribución.
ScreenCampaigns— obligatorios: screen_id, itemsScreenCommand— obligatorios: id, type, state, requested_at, expires_atUn reinicio, una recarga, un clear_cache, un restart_app o un update solicitados a una pantalla, en Screen.commands. Un comando enviado a una pantalla en línea se almacena como sent.
Uno solicitado a una pantalla sin conexión se almacena como queued sin evento de tiempo de ejecución; el backend añade el evento, con este id y expires_at, cuando aplica la próxima transición de la pantalla a en línea antes de expires_at, y el comando pasa a sent.
Cada comando tiene exactamente un evento de tiempo de ejecución, por lo que un Player no puede verlo dos veces. expired se deriva al leer para un comando en cola cuyo expires_at ya pasó. Un comando más reciente del mismo tipo reemplaza a uno que sigue en cola. Un reinicio sent pasa a done cuando un informe de salud con uptime_s sitúa el arranque después de sent_at; una recarga nunca llega a done.
Un clear_cache, restart_app o update pasa a done o failed cuando su Player informa, con cause y detail.
ScreenCommandPage— obligatorios: items, next_cursorScreenCommandWrite— obligatorios: noneEl cuerpo opcional de POST /api/screens/{id}/reboot, /reload, /clear-cache, /restart-app y /update. Un cuerpo vacío conserva el valor predeterminado.
ScreenDeviceSettingsPatch— obligatorios: noneUn cambio de los ajustes de oscurecimiento por inactividad y de brillo de una pantalla y de su bloqueo de kiosco (patchScreenDeviceSettings). El cuerpo nombra al menos uno de los dos miembros y ningún otro.
ScreenDisplay— obligatorios: requested, sourceEstado de encendido del monitor. requested es lo que la pantalla debería mostrar ahora: la anulación activa o, si no hay, el horario de pantalla habilitado evaluado en la zona horaria de la pantalla o, si no, encendido (source override, schedule o default); until es cuándo cambia eso a continuación, si se conoce. reported es el último display del informe de salud del Player (power, connected, reported_at, stale tras 35 minutos). idle y brightness son los ajustes display.idle y display.brightness de la pantalla (definidos por ScreenPatch).
Ausente cuando la pantalla no tiene programación, anulación, ajuste de inactividad ni de brillo, y no se reporta ningún monitor.
ScreenDisplayBrightness— obligatorios: modedisplay.brightness: auto hace corresponder la luz ambiental del dispositivo con el brillo de la ventana; fixed (el valor predeterminado) mantiene el brillo del operador. Lo aplica un Player que declara la capacidad del host brightness.auto, que declara solo cuando el dispositivo tiene un sensor de luz.
ScreenDisplayIdle— obligatorios: after_s, wakedisplay.idle: la pantalla se oscurece tras after_s segundos sin un toque, una tecla o, cuando wake incluye presence, alguien frente a la pantalla (la cámara del dispositivo, analizada en el dispositivo; ninguna imagen sale de él). Un evento de activación la vuelve a encender de inmediato, y el toque que activa una pantalla oscura se consume.
Mientras la pantalla está oscura, el Player pasa a un estado de monitor apagado, como con un horario de pantalla: deja la reproducción en pausa (sin reproducciones ni anuncios), informa display.power off en su informe de salud y se reanuda al activarse. Un horario o una anulación de pantalla que mantiene el panel apagado prevalece, y una aplicación que mantiene device.display prevalece sobre la inactividad mientras su página está en pantalla.
Lo aplica un Player que declara la capacidad del host display_power.idle.
ScreenDisplayOverride— obligatorios: override_id, power, until, ends_at, set_atScreenDisplayPatch— obligatorios: noneScreenDisplayReported— obligatorios: reported_at, staleEl último informe de estado del monitor del Player. Alimentación y conectividad observadas, independientes de la alimentación solicitada. stale es verdadero tras 35 minutos sin informe; es contexto, no prueba de que la alimentación causara un fallo de captura.
ScreenDisplaySchedule— obligatorios: enabled, windows, updated_atScreenDisplayScheduleView— obligatorios: display_scheduleScreenDisplayScheduleWrite— obligatorios: enabled, windowsScreenDisplayWrite— obligatorios: powerScreenEffectivePlaylist— obligatorios: id, sourceLa lista de reproducción de la que se construye el manifiesto de ejecución de la pantalla: la toma de control; si no, la primera campaña que se aplica (entry_id es el id de la campaña); si no, la primera entrada de programación de lista de reproducción coincidente (entry_id); si no, la asignada por defecto; si no, la lista de reproducción predeterminada de la carpeta más cercana que contiene la pantalla (source es folder, entry_id es el id de la carpeta). until es el próximo instante en que se sabe que esto cambia (fin de la toma de control o el siguiente límite de programación dentro de ocho días), ausente cuando nada basado en el tiempo lo cambia.
El trabajador de límite aplica un cambio con un retraso máximo de 60 segundos. Se omite una toma o entrada cuya lista de reproducción no pueda mostrarse. Ausente cuando la pantalla no muestra lista de reproducción.
ScreenExplainAt— obligatorios: instant, effective_playlist, verdicts, not_judgedLo que muestra la pantalla en instant y por qué, según el resolutor que ejecuta el barrido de límites. La toma de control, el horario de listas de reproducción de la pantalla y las campañas del proyecto se leen tal como están ahora, no como estaban entonces. Una campaña cuya lista de reproducción falta o no está aprobada se omite, como la omite el barrido.
En una pantalla cuyo Player resuelve su propia pila (schedule.stack), los veredictos leen esa pila y not_judged lo indica (player_stack).
ScreenFieldsPatch— obligatorio: fieldsUn cambio de los campos de una pantalla (patchScreenFields). El cuerpo no tiene ningún otro miembro.
ScreenFolder— obligatorios: id, name, parent_id, revision, created_at, updated_atUna carpeta de pantallas. Una pantalla está en una sola carpeta como máximo (Screen.folder_id); una carpeta selecciona sus pantallas y las de cada carpeta que contiene.
ScreenFolderCreate— obligatorios: nameScreenFolderDeleteResult— obligatorio: levelsScreenFolderList— obligatorios: itemsScreenFolderPatch— obligatorios: noneScreenGlass— obligatorios: noneLo que el backend concluyó sobre la imagen de la pantalla a partir de los informes recibidos, nunca de lo que el reproductor dice de sí mismo. Una comprobación que no tiene nada que decir deja su miembro ausente. Solo lectura en la API del proyecto. Nunca es autorización ni admisión. ScreenPatch no puede escribirlo.
ScreenGlassChangedDetails— obligatorios: check, verdict, previous, since, evidenceObjeto details de un evento screen.glass_changed duradero, solo del proyecto, que se añade cuando una comprobación de la imagen cambia su veredicto para una pantalla. No es un comando de audiencia de ejecución y no se entrega en GET /screen/events.
La condición loop_stalled se abre con un veredicto de reproducción stalled y termina con cualquier otro; glass_blank y glass_frozen se abren con un veredicto de imagen blank o frozen y terminan con cualquier otro.
ScreenHealth— obligatorios: reported_at, staleEl último informe de salud del dispositivo (PUT /screen/health), saneado, con reported_at del servidor. Falta un miembro que el Player no envió. stale es verdadero cuando reported_at tiene más de 35 minutos; la salud stale aún se muestra, nunca se elimina; archivar y recuperar pantalla la limpian.
Las transiciones añaden screen.health_changed solo para el proyecto con details.changes, una lista de {change, ...}: display_disconnected, display_reconnected, display_power (from, to), temperature_high (80 °C o más), temperature_normal (de nuevo por debajo de 75 °C), on_battery (battery.source pasó a none; level_percent cuando se informa) y plugged_in (cualquier otra fuente de nuevo; source), crash_spike y renderer_restart_spike (el conteo de 24 horas aumentó en 3 o más desde el último evento de pico; crashes_24h o renderer_restarts_24h y previous). battery está presente solo cuando el dispositivo informa una; el backend no lee nada de ella salvo battery.source para la condición on_battery y no infiere ninguna causa.
Solo lectura; nunca autorización.
ScreenHealthHistory— obligatorios: noneUna página de informes (resolución raw) o resúmenes horarios (resolución hour).
ScreenHealthHour— obligatorios: 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_atInformes de una pantalla en una hora UTC. Un miembro es nulo cuando ningún informe de la hora lo contiene.
ScreenHealthHours— obligatorios: resolution, hours, next_cursorScreenHealthSample— obligatorios: reported_atUn informe de salud del dispositivo almacenado: Screen.health sin obsoletos, y sin cpu.utilization_percent ni cpu.app_percent, que solo el último informe (Screen.health) contiene. Un miembro que el Player no envió está ausente.
ScreenHealthSamples— obligatorios: resolution, samples, next_cursorScreenIdentifyAccepted— obligatorios: identify_id, duration_ms, expires_atScreenIdentifyDetails— obligatorios: identify_id, label, screen_id, duration_ms, at, expires_atobjeto details en un evento duradero player.identify.
ScreenIdentifyWrite— obligatorios: noneScreenKiosk— obligatorios: lockkiosk.lock: el Player se fija a la pantalla (fijación de pantalla de Android con startLockTask; la persona que está frente a la pantalla lo confirma la primera vez, y la barra de estado, el botón de inicio y las aplicaciones recientes quedan bloqueados mientras está fijado; la variante gestionada como propietario del dispositivo conserva su lock task). Presente solo mientras el bloqueo está activado.
El panel de configuración del operador ofrece Salir del bloqueo de kiosco, que libera la fijación hasta que el siguiente manifiesto o reinicio la aplique de nuevo. Lo aplica un Player que declara la capacidad del host kiosk_lock.
ScreenKioskPatch— obligatorios: lockScreenLevelChange— obligatorios: source, id, playlist_id, screensScreenLevelChanges— obligatorios: gained, lostLo que una escritura hace a las programaciones de las pantallas que cambia: las campañas a cuya audiencia entran (gained) o de la que salen (lost), y las listas de reproducción predeterminadas de carpeta que empiezan o dejan de ser las suyas. screens cuenta las pantallas afectadas por nivel.
En una escritura de etiquetas, una entrada de campaña informa de la pertenencia a la audiencia: cada campaña en vivo a la que las pantallas entran o de la que salen, se reproduzca o no allí, lo cual depende de la lista de reproducción predeterminada de la pantalla. Un movimiento o cambio de carpeta lista las campañas cuya audiencia de carpeta se mueve en las pantallas que las reproducen.
ScreenLink— obligatorios: hint, created_atUna URL de Player que abre una pantalla en un navegador que no conserva almacenamiento, como una fuente de navegador de vMix u OBS.
ScreenLinkSessionRequest— obligatorios: screen_linkEl secreto del enlace de pantalla más las sugerencias opcionales host, playback y player. Los miembros desconocidos se ignoran, y host, playback y player se leen con tolerancia (docs/player-compatibility.md §1.1). El secreto es una credencial: nunca se registra ni se devuelve.
ScreenLinkSummary— obligatorios: hint, created_atEl enlace de la pantalla, sin su url. Presente solo mientras la pantalla tiene un enlace. Solo lectura; POST y DELETE /api/screens/{id}/link lo modifican.
ScreenList— obligatorios: itemsScreenLocation— obligatorios: latitude, longitudeDónde está una pantalla, en grados decimales, con un nombre corto de lugar y una dirección postal opcionales. Una colocación de tarjeta la lee mediante el token {screen.location}, y la lista de pantallas filtra por distancia a un punto (near).
ScreenLocationPatch— obligatorio: locationUn cambio de la ubicación de una pantalla (patchScreenLocation). El cuerpo no tiene ningún otro miembro.
ScreenMaintenanceAccepted— obligatorios: command_id, command, expires_at, stateScreenManifestUpgrade— obligatorios: desired_revision, active_revision, desired_playlist, active_playlist, state, code, attempt, retry_at, missing_page_count, state_since, reported_atEstado siempre presente calculado de actualización de manifiesto para esta pantalla, derivado en tiempo de lectura de su revisión deseada emitida o del objetivo de contenido de lista de reproducción compartida en cola, su última revisión activa de manifiesto reconocida por el servidor (manifest.activated) y el último informe aceptado de manifest.upgrade.
Estado del proyecto solo lectura: ningún cuerpo puede escribirlo, y ningún informe promueve una concesión. active_revision es la última activación reconocida, no prueba que todas las sesiones simultáneas ya la muestren.
Estar sin conexión nunca produce fallo, y un retry_at vencido en un estado de reintento es presentación del cliente, nunca juicio del servidor. desired_revision null es ninguno. state pending nombra una revisión deseada sin informe coincidente; activating nombra un objetivo ya en pantalla cuyo reconocimiento aún está pendiente; un slot de informe cuya revisión dejó de coincidir con desired_revision se ignora hasta que un nuevo informe coincida, así que un nuevo manifiesto deseado deriva pending sin borrar nada.
Antes de que el próximo contacto con el manifiesto emita la concesión deseada de una edición compartida, la revisión deseada y la lista de reproducción pueden exponer ese objetivo en cola como intención de solo lectura; no concede acceso. La identidad activa siempre proviene de la concesión histórica exacta reconocida. Una activación anterior no puede anunciar el objetivo en cola más nuevo como actual.
ScreenMove— obligatorios: folder_idAl menos un id entre screen_ids y folder_ids, como máximo 1000 en total.
ScreenMoveResult— obligatorios: screens, folders, levelsScreenNamePatch— obligatorios: nameEl nuevo nombre de una pantalla (patchScreenName). El cuerpo no tiene ningún otro miembro.
ScreenNotJudged— obligatorios: code, detailAlgo que la explicación no juzga.
ScreenObservation— obligatorios: observed_at, surfacesSuperficie de reproducción reportada por el reproductor. Ausente en Pantalla hasta el primer PUT /screen/observation. aceptado. Solo lectura en la API del proyecto; ScreenPatch, PairScreen, cuerpos de emparejamiento, cuerpos de sesión, canvas, manifiesto de tiempo de ejecución y POST /screen/reports no pueden escribirlo.
ScreenObservationSurface— obligatorios: id, width, height, pixel_ratio, presentationScreenOutage— obligatorios: offline_sinceLa última interrupción de presencia de la pantalla y, cuando el primer informe de estado tras su vuelta lo decide, por qué la pantalla desapareció. Una nueva interrupción la sustituye; una pantalla que nunca ha estado sin conexión desde que se registran las interrupciones no tiene ninguna.
La causa procede de los contadores de actividad del propio Player en ese informe, leídos frente a la interrupción y nunca frente al reloj del dispositivo: device_restart (el dispositivo arrancó después de que empezara la interrupción), app_crash (el Player arrancó y su recuento de fallos de 24 horas subió), app_restart (arrancó el Player y no el dispositivo), network (ninguno arrancó y nada apunta a screenRIG) y platform (ninguno arrancó, y un informe player.stream_down llegó a screenRIG durante la interrupción, o el observador de presencia estaba caído o recuperándose cuando la pantalla enmudeció). likely_cause está ausente cuando se desconoce, y sigue desconocida antes que adivinar: un informe sin tiempos de actividad, uno demasiado cercano al inicio de la interrupción, un reinicio posterior a la vuelta de la pantalla y un informe del Player en el minuto de la reconexión no deciden nada.
Un informe solo decide dentro de los 35 minutos posteriores a la vuelta de la pantalla. device_restart no distingue un corte de energía de un reinicio, y network no distingue la red propia de la pantalla de la que está por encima.
Decidirlo añade una sola vez el evento solo del proyecto screen.outage_classified, con los detalles {offline_since, back_at, likely_cause, evidence, online_event_id}; la notificación de resolución de una pantalla sin conexión nombra la causa cuando ya está determinada al enviarse el aviso. Los lectores tratan como desconocido un likely_cause que no conocen. Solo lectura; nunca autorización.
ScreenPatch— obligatorios: noneScreenPlayPageAccepted— obligatorios: screen_id, playlist_id, page_id, manifest_revision, expires_atScreenPlayPageDetails— obligatorios: page_id, playlist_id, manifest_revision, expires_atobjeto de detalles en un evento durable player.play_page.
ScreenPlayPageWrite— obligatorios: page_idScreenPlayerIdentity— obligatorios: legacy, seen_atIdentidad afirmada desde la última emisión emparejada del tiempo de ejecución. Metadatos de pantalla solo lectura, nunca autorización. Permisos internos y campos de emisión se retienen.
ScreenPlaylistPatch— obligatorios: playlist_idUna asignación de la lista de reproducción de una pantalla (patchScreenPlaylist). El cuerpo no tiene ningún otro miembro.
ScreenPlaylistSchedule— obligatorios: entries, updated_atProgramación de lista de reproducción evaluada por el servidor. Nunca llega al manifiesto de tiempo de ejecución; el manifiesto se construye a partir de la lista de reproducción efectiva que selecciona. Escríbala con PUT /api/screens/{id}/playlist-schedule.
ScreenPlaylistScheduleView— obligatorios: entriesScreenPlaylistScheduleWrite— obligatorios: entriesScreenPresenceHistory— obligatorios: items, next_cursorScreenPresenceTransition— obligatorios: at, stateScreenProvisioning— obligatorios: screen, public_url, provisioning_url, expires_atScreenRebootAccepted— obligatorios: reboot_id, expires_at, stateScreenRebootSchedule— obligatorios: enabled, windows, updated_atLas ventanas en las que el backend reinicia la pantalla. Presente mientras hay una definida.
ScreenRebootScheduleView— obligatorios: reboot_schedule, next_reboot_atScreenRebootScheduleWrite— obligatorios: enabled, windowsScreenRecoveryHost— obligatorios: noneLo que el dispositivo que solicita recuperar esta pantalla dice que es, copiado del objeto host del inicio de emparejamiento. Solo campos descriptivos; nunca contiene duid, serial o mac. Los campos ausentes no se informaron.
ScreenRecoveryPending— obligatorios: expires_atPresente mientras una sesión de emparejamiento nativa que presentó la identidad de hardware de esta pantalla espera que el proyecto propietario confirme con POST /api/screens/{id}/recovery/confirm. Lleva la fecha límite, que es la expiración propia de la sesión de emparejamiento, y los campos descriptivos del host del dispositivo que ofrece (nunca duid, serial o mac).
Un DUID es legible por cualquier aplicación en el panel, por lo que una oferta es una superficie de phishing: compare host.model y host.firmware con el monitor frente a usted antes de confirmar.
El servidor rechaza una oferta mientras la clave vinculada a la pantalla haya mostrado actividad en los últimos diez minutos (mint de sesión, transmisión en tiempo real, obtención de manifiesto o latido de presencia), y acepta como máximo tres ofertas por pantalla por hora móvil; una oferta nueva reemplaza a la pendiente. Ausente una vez confirmada, caducada o reclamada como pantalla nueva. Solo lectura.
ScreenReloadAccepted— obligatorios: reload_id, expires_at, stateScreenReplaceWrite— obligatorios: withScreenScheduleEntry— obligatorios: id, playlist_idScreenScheduleEntryWrite— obligatorios: playlist_idUna entrada de horario de lista de reproducción, un nivel de la propia pila de la pantalla (packages/schedule-contract SEMANTICS.md, Levels and the stack). id es opcional (entry_N se asigna en orden cuando se omite) y único en el horario.
Rige mientras rigen todos sus miembros de regla: from (inclusivo) y until (exclusivo), límites civiles con precisión de minuto y sin desfase; una repetición de windows, monthly o dates (si no hay ninguno de los tres, se repite todos los días) cuya fecha no esté en except; data, una condición de datos de tarjeta; interaction, mientras alguien usa la pantalla.
Una entrada define al menos un miembro de regla. data, interaction, covers y un bloqueo displays que deja salidas fuera los respeta un Player que resuelve su propia pila; la resolución del servidor para otros Players omite esa entrada (stack_only).
ScreenSchedulePreviewRequest— obligatorios: entriesScreenScheduleRevision— obligatorios: revision, created_at, change, current, entriesUna revisión almacenada de la programación de lista de reproducción de una pantalla: su lista entries completa después de una escritura (sin entries: la pantalla no tenía programación). revision es la revisión de la pantalla en el momento de la escritura. change es edited, restored (una copia de una revisión anterior, nombrada por restored_from) o baseline (la programación que tenía la pantalla cuando comenzó su historial).
ScreenScheduleRevisionList— obligatorios: itemsScreenScheduleWindow— obligatorios: daysUna ventana screenrig.schedule/v1 en la zona horaria de la pantalla. Los días se almacenan de lunes a domingo. Omitir inicio y fin para todo el día. end <= start cruza la medianoche y el día de inicio es el propietario (vie 22:00-02:00 se extiende hasta la mañana del sábado); bordes iguales cubren 24 horas completas.
ScreenScope— obligatorios: folder_ids, screen_idsSobre qué puede actuar un miembro o agente con alcance (docs/screen-scope.md): las pantallas de las carpetas de pantallas listadas y de cada carpeta que hay dentro, y las pantallas listadas. Al menos un id en total. Un id que no nombra ninguna carpeta ni pantalla viva del proyecto cuando se escribe es invalid_request en su posición; una eliminación posterior deja un id muerto, que no concede nada.
El alcance se lee en cada solicitud, así que un cambio se aplica a la siguiente. Las etiquetas nunca son alcance.
ScreenScreenshotAccepted— obligatorios: capture_id, expires_atScreenScreenshotFailedDetails— obligatorios: capture_id, reasonobjeto de detalles en un evento durable screen.screenshot_failed.
ScreenScreenshotReadyDetails— obligatorios: capture_id, bytes, width, height, sha256objeto de detalles en un evento durable screen.screenshot_ready. No están presentes píxeles ni claves de objeto.
ScreenScreenshotRequestedDetails— obligatorios: capture_id, expires_at, max_width_divisor, max_height_divisor, format, quality, max_bytesobjeto de detalles en un evento durable screen.screenshot_requested. No están presentes bytes de imagen ni claves de objeto.
ScreenScreenshotStatus— obligatorios: stateScreenStackStatus— obligatorios: manifest_revision, levels, playing, reported_atLo que el Player de la pantalla informó por última vez sobre su pila (docs/player-compatibility.md §6.11): la disponibilidad de cada nivel y el nivel que muestra cada monitor en cada región (la página y cualquier franja). Presente solo para un Player que resuelve su propia pila, mientras esa pila está vigente.
ScreenStatus— obligatorios: chip, observed_at, received_atLa ficha de estado que el Player de la pantalla informó por última vez con PUT /screen/status (docs/player-compatibility.md §9.5): la condición de screenrig.overlay/v1 que gana su rango, o null cuando el Player no muestra ninguna ficha. Ausente hasta el primer informe aceptado. Se borra al restablecer la identidad, desvincular y archivar.
Es el último informe del Player, por lo que los consumidores lo tratan como obsoleto cuando la pantalla no está en línea (Screen.online), como todo informe del Player. level e icon provienen del catálogo del backend para chip, nunca del Player, y están ausentes cuando chip es null. Solo lectura en la API del proyecto. Nunca autorización ni admisión. ScreenPatch no puede escribirlo.
ScreenStatusChangedDetails— obligatorios: chipobjeto de detalles en un evento durable screen.status_changed solo del proyecto, agregado cuando PUT /screen/status cambia el chip, level o icon almacenado. level e icon están ausentes cuando chip es null. Este tipo no es un comando de audiencia en tiempo de ejecución y no se entrega en GET /screen/events.
ScreenStorage— obligatorios: observed_at, received_at, volume, cache, durability, plan, transfer_24hInforme de almacenamiento del reproductor saneado. Ausente hasta el primer PUT /screen/storage. aceptado. Borrado en restablecimiento de identidad, desvinculación y archivo. Los consumidores tratan received_at con más de 24 horas como obsoletos. Solo lectura en la API del proyecto. Nunca autorización ni admisión. ScreenPatch no puede escribirlo.
ScreenStorageCache— obligatorios: house_used_bytes, capacity_bytes, reserve_bytes, protected_bytes, fallback_bytes, warm_bytes, ad_headroom_bytesScreenStorageExcludedPage— obligatorios: page_id, reasonScreenStorageForecast— obligatorios: manifest_revision, fit, excluded_page_count, basis, received_atSelección aproximada de objetivo en estado estable (solo plan A.3, sin transición) desde la última capacidad reportada y el manifiesto deseado de la pantalla. Ausente sin un informe de almacenamiento, que los consumidores leen como desconocido. La base es reported_capacity. Se recalcula cuando llega un informe de almacenamiento y cuando cambia la revisión del manifiesto de la pantalla. Nunca autorización o admisión.
ScreenStorageForecastDryRun— obligatorios: fit, excluded_page_count, required_bytes, capacity_bytes, basis, received_atPrueba de ajuste previa a la asignación para una lista de reproducción. fit, excluded_page_count y required_bytes provienen del plan A.3 de selección de objetivo contra la última capacidad reportada de la pantalla (base reported_capacity); no hay predicción de transición y nada se trata como local. required_bytes es el costo retenido de cada página de la lista de reproducción. fit desconocido significa que la pantalla no tiene informe de almacenamiento, o las referencias de contenido de la lista de reproducción no están listas; required_bytes, capacity_bytes y received_at son nulos entonces. received_at es la hora de recepción del informe de almacenamiento, y un informe con más de 24 horas está obsoleto pero aún se usa para pronóstico, igual que Screen.storage_forecast.
Es metadato de solo lectura y nunca autorización o admisión.
ScreenStorageForecastRequest— obligatorios: playlist_idCuerpo de la prueba en seco de preasignación. playlist_id debe ser una lista de reproducción del proyecto autenticado; la de otro proyecto o un id desconocido es not_found.
ScreenStoragePlan— obligatorios: manifest_revision, fit, transition, required_bytes, target_bytes, excluded_pagesScreenStorageShortfall— obligatorios: at, fit, required_bytes, capacity_bytes, excluded_page_countPresente mientras el ajuste reportado del reproductor es parcial, transition_blocked o none_fit, excepto un plan transition_blocked cuyo único motivo de bloqueo es anchor_unavailable: eso es una descarga fallida en un dispositivo con espacio, no una insuficiencia. at es cuando comenzó la condición.
Se establece una vez cuando comienza la condición y se elimina cuando termina, cada transición agrega un evento solo de proyecto, screen.storage_shortfall o screen.storage_shortfall_cleared. Esos eventos no se entregan en GET /screen/events. Se limpia con Screen.storage al restablecer identidad, desemparejar y archivar.
Metadatos de salud del proyecto solo lectura; no cambia revisión de pantalla ni autoridad de manifiesto y nunca es autorización.
ScreenStorageTransfer— obligatorios: new, refetch, repair, failedScreenStorageVolume— obligatorios: total_bytes, available_bytesScreenSurfaceChangedDetails— obligatorios: observed_at, surfacesobjeto de detalles en un evento durable screen.surface_changed project. No están presentes píxeles. Este tipo no es un comando de audiencia en tiempo de ejecución y no se entrega en GET /screen/events.
ScreenSuspendWrite— obligatorios: messageScreenSuspension— obligatorios: message, sincePresente mientras la pantalla está suspendida (docs/player-compatibility.md §6.9). El manifiesto de tiempo de ejecución lleva el mismo objeto como su miembro suspension.
ScreenTags— obligatorios: noneEtiquetas de selector de flota, de 0 a 16 etiquetas únicas exactas, cada una que coincide con la gramática de etiquetas de medios. En ScreenPatch el arreglo reemplaza todo el conjunto y un arreglo vacío lo borra; una etiqueta duplicada o malformada es invalid_request. Cambiar etiquetas aumenta la revisión de pantalla (If-Match la protege) y añade screen.updated con details.tags; nunca cambia la revisión del manifiesto.
Las etiquetas nunca están en el manifiesto en tiempo de ejecución ni en la autorización.
ScreenTagsPatch— obligatorios: tagsUn conjunto completo nuevo de etiquetas de pantalla (patchScreenTags). El arreglo reemplaza todas las etiquetas que la pantalla lleva y un arreglo vacío las borra. El cuerpo no tiene otro miembro.
ScreenTakeover— obligatorios: playlist_id, until, set_atLa lista de reproducción que prevalece sobre las campañas, la programación y la asignación hasta until, o hasta que se borre cuando until es null.
ScreenTakeoverWrite— obligatorios: playlist_idScreenTimelineSegment— obligatorios: from, to, sourceScreenToastAccepted— obligatorios: expires_atScreenToastDetails— obligatorios: level, text, duration_ms, expires_atobjeto de detalles en un evento durable screen.toast. No están presentes colores.
ScreenToastWrite— obligatorios: level, textScreenUptime— obligatorios: itemsScreenVerbosityPatch— obligatorios: noneUn cambio del nivel de registro y del nivel de toast de una pantalla (patchScreenVerbosity). El cuerpo nombra al menos uno de los dos miembros y ningún otro.
ScreenVerdict— obligatorios: kind, playlist_id, verdictUn candidato en el instante explicado. won: el resolutor lo elige (en una pantalla cuyo Player resuelve su propia pila: ocupa su región en una pantalla de destino). outranked: rige, y by es el candidato que ganó. not_started: antes de su from. ended: en su until o después (una toma de control: su fin). outside_hours: entre from y until, fuera de sus ventanas. conditional: en una pantalla cuyo Player resuelve su propia pila, está vigente por horario y se reproduce mientras también se cumple la condición que solo observa el Player (reason interaction o data). off: no se aplica, y reason dice por qué.
ScreenWall— obligatorios: outputs, arrangementEl muro de video que despliega el Player de una pantalla: de dos a doce salidas que muestran un lienzo. Configurarlo requiere un Player que haya declarado la capacidad display.wall del host (docs/player-compatibility.md §6.5, §6.8). Una lista de reproducción con un formato lo abarca.
ScreenshotCaptureID— obligatorios: nonePrefijo opcional stage_, qa_ o development_, luego shot_ y un sufijo aleatorio. Los sufijos nuevos usan 16 caracteres alfanuméricos excluyendo oOlL; se aceptan sufijos heredados retenidos.
SelectorPreview— obligatorios: primitive, selector, matched_count, candidatesSelectorPreviewInput— obligatorios: primitive, selectorSelectorPreviewMedia— obligatorios: media_id, filename, tagsServiceClient— obligatorios: id, project_id, name, capabilities, access, state, created_by, keys, secrets, created_at, updated_at, authenticated_requests, tokens_issuedServiceClientChange— obligatorios: noneServiceClientKey— obligatorios: kid, alg, thumbprint, jwk, added_atServiceClientList— obligatorios: itemsServiceClientResult— obligatorios: clientServiceClientSecret— obligatorios: id, hint, added_atSessionDescription— obligatorios: type, sdpSessionSSOStartRequest— obligatorios: intentSignInPolicy— obligatorios: password, passkey, passkey_enrollment_required, policy_revision, federatedPolítica de inicio de sesión de persona verificada. Los valores predeterminados pasivos preservan el inicio de sesión local. Una política organizacional aplicada dirige el inicio de sesión a través de su proveedor de identidad.
SignInResetAccepted— obligatorios: statusIdéntico para direcciones conocidas y desconocidas; no se devuelve dirección, credencial, proyecto ni estado de entrega.
SignInResetRequest— obligatorios: emailSignupCreated— obligatorios: user_id, project_id, organization_idSignupHeardDetail— obligatorios: noneEl seguimiento de heard. kind nombra una opción de una lista corta, y text es texto libre.
SignupPasskeyOptionsRequest— obligatorios: email, display_nameSignupProfile— obligatorios: noneLas respuestas que una persona da después de registrarse. Cada miembro es opcional y puede ser null, lo que significa sin responder u omitido.
SignupRequest— obligatorios: email, display_name, marketing_email, credentialLa dirección de correo electrónico y el nombre para mostrar son con los que se inició la ceremonia.
Source— obligatorios: id, name, kind, target, enabled, config, preset, settings, secrets, refresh_seconds, stale_after_seconds, revision, status, created_at, updated_atSourceArea— obligatorios: key, name, rooms, status, screensSourceCreate— obligatorios: name, targetLa configuración de JSON, CSV y Sheets puede establecer key_template, una clave de datos de tarjeta con tokens {screen.field.NAME}. La asignación produce entonces {documents:[{fields:{NAME:VALUE},document:{...}}]} en lugar de un documento. Cada salida se valida según la tarjeta de destino.
Las claves son únicas y están fuera de los espacios de nombres de instancias de tarjeta y feeds; source test muestra una vista previa del sobre y valida cada salida. Cada clave usa el período de caducidad de la fuente. Las claves ausentes conservan sus datos y su vencimiento; los errores de almacenamiento pueden dejar escrituras parciales y la siguiente ejecución vuelve a intentarlo.
SourceError— obligatorios: code, message, atSourceKind— obligatorios: noneDe dónde vienen los datos. ics lee direcciones iCalendar y webcal:// (los demás tipos se describen en /docs/sources). Un tipo que no está disponible responde invalid_request en kind.
SourceList— obligatorios: items, next_cursorSourcePreset— obligatorios: name, title, category, description, kind, cards, fields, secrets, refresh_seconds, min_refresh_seconds, stale_after_seconds, attribution, docsUna configuración lista para usar y probada de la fuente de datos json.
SourcePresetAttribution— obligatorios: textSourcePresetCard— obligatorios: type, defaultSourcePresetField— obligatorios: name, label, type, required, helpUn dato que una persona indica a una opción predefinida. Un texto se comprueba con pattern y max_length, una elección es una de options, y una lista contiene de min_items a max_items objetos rellenados con fields.
SourcePresetList— obligatorios: itemsSourcePresetOption— obligatorios: value, labelSourcePresetSecret— obligatorios: name, label, help, how_to_get, requiredUna credencial que necesita una opción predefinida, introducida bajo name en secrets.
SourceRoom— obligatorios: key, status, screensSourceRoomRef— obligatorios: id, nameSourceRoomScreen— obligatorios: id, name, kind, field, value, statusSourceRooms— obligatorios: source_id, room_field, room_key_prefix, area_field, area_key_prefix, rooms_as_of, summary, rooms, areas, screens, warningsLa asignación de salas de una fuente de datos que escribe un documento por cada sala o área: las salas que la fuente ofrecía en su última actualización correcta frente a las pantallas que las leen.
Una pantalla pertenece al informe de un campo cuando tiene un valor para él, o cuando su propia lista de reproducción coloca una tarjeta cuya clave de datos es el prefijo de clave seguido de {screen.field.NAME}; no se sigue una lista de reproducción a la que se llega por una carpeta, una campaña o un nivel de programación.
SourceRoomsSummary— obligatorios: rooms, unmapped_rooms, areas, unmapped_areas, screens, missing_screens, unknown_screensSourceSecretView— obligatorios: set, hint, updated_atSourceStaleAfter— obligatorios: noneCuánto tiempo conserva la tarjeta los últimos datos buenos de la fuente cuando no puede actualizarse, en segundos.
La fuente escribe sus documentos para que caduquen tanto tiempo después de la última actualización correcta: si sigue fallando, se vacían en todas las pantallas (también las que están sin conexión) y las páginas cuya visibilidad depende de los datos pasan a las páginas siguientes; una fuente que no falla renueva el plazo a medida que se actualiza.
Al menos el doble de refresh_seconds. null conserva los últimos datos buenos hasta que la fuente vuelva a actualizarse (el valor por defecto de todos los tipos salvo momentus, cuyo valor por defecto es 1800 cuando se omite el miembro al crear). Una fuente con fallos que supera el periodo queda caducada (status.stale) y añade source.stale.
SourceStatus— obligatorios: state, last_attempt_at, last_success_at, last_change_at, next_run_at, failures, stale, data_expires_at, error, warnings, statsLo que hicieron las últimas ejecuciones. state es pending (aún sin ejecutar), ok (la última obtención se completó y la tarjeta aceptó el documento), error (la última ejecución falló y la tarjeta conservó su último documento válido) o disabled. ok no juzga si los datos de origen son correctos o actuales, ni si alguna pantalla muestra la tarjeta.
SourceTarget— obligatorios: card_idSourceTestRequest— obligatorios: noneSourceTestResult— obligatorios: document, valid, warnings, stats, fetched_atSourceUpdate— obligatorios: noneStackLevel— obligatorios: id, source, playlist_idUn nivel de la pila de una pantalla (packages/schedule-contract SEMANTICS.md, Levels and the stack). id es takeover, campaign:ID, schedule:ENTRY_ID, default o folder:FOLDER_ID; record_id nombra la campaña, la entrada o la carpeta, y name el nombre de la campaña o de la carpeta. Si rule está ausente, siempre rige.
StackLevelRule— obligatorios: noneStreamSource— obligatorios: noneStreamSourceWrite— obligatorios: noneUna fuente de transmisión. Una fuente puede dar solo su url y dejar que el esquema indique el protocolo: https es hls, rtsp y rtsps son rtsp.
SupportConversation— obligatorios: id, subject, created_at, updated_at, last_sequence, human_requested, unread_staff, closedSupportConversationList— obligatorios: items, next, unread_staff_totalSupportHours— obligatorios: timezone, start, end, weekdays, excludes_bc_holidaysSupportMessage— obligatorios: id, conversation_id, sequence, role, author, body, created_atSupportMessageList— obligatorios: itemsSupportRead— obligatorios: sequenceSupportStatus— obligatorios: chat_allowed, available, staffed, human_available, hours, human_wait_seconds, docs_urlSupportSubmission— obligatorios: conversation, messageSupportWrite— obligatorios: bodyTrigger— obligatorios: id, kind, label, target, default_for_seconds, url, username, revision, created_at, updated_atUn activador CAP o un activador de superposición. Su contraseña solo la devuelven la creación y rotate-secret.
TriggerAlert— obligatorios: id, revision, state, status, msg_type, sender, identifier, until, screens, started_at, updated_atLa última alerta del trigger, de los campos del mensaje CAP.
TriggerAlertScreens— obligatorios: targeted, taken_over, cleared, skipped, failed, pendingLo que hizo el último cambio de toma. omitió pantallas sin lista de reproducción predeterminada, archivadas o desaparecidas, y, al limpiar, pantallas que otra toma ha reemplazado desde entonces.
Una pantalla de una carpeta de pantallas protegida se deja como está y se cuenta en protected, no se omite; terminar una alerta (cancelar, fin de alerta, un borrado por el operador) sigue borrando lo que el activador definió en esa pantalla.
TriggerClear— obligatorios: noneTriggerDelivery— obligatorios: at, outcome, status, bytes, request_idTriggerDeliveryList— obligatorios: itemsTriggerList— obligatorios: itemsTriggerOverlay— requeridos: show, style, enabled, signing, alerts, screens, pendingConfiguración y estado de un activador de superposición.
TriggerOverlayAlert— requeridos: id, until, started_at, updated_at, revisionTriggerOverlayReceipt— requeridos: outcome, trigger_id, until, activeTriggerOverlayRequest— obligatorios: noneUn envío a un activador de superposición, tal como se lee tras el mapping del activador (si lo hay). Una finalización ignora todos los miembros salvo alert_id, clear y state.
TriggerOverlayScreens— requeridos: targeted, holding, taken_over, removed, edge_taken, skipped, failedLo que hizo la última difusión en las pantallas de destino. Una pantalla de una carpeta de pantallas protegida se deja como está y se cuenta en protected, no se omite; terminar la alerta sigue borrando lo que el activador definió en ella.
TriggerOverlayStyle— obligatorios: noneLos parámetros estáticos de la tarjeta de texto con los que se dibuja una superposición. El activador elige la disposición.
TriggerOverlayWrite— requeridos: showTriggerPatch— obligatorios: noneTriggerReceipt— obligatorios: outcome, trigger_idTriggerSecretRotate— obligatorios: noneTriggerTarget— obligatorios: noneExactamente uno de tag y screen_ids.
TriggerWithPassword— obligatorios: noneTriggerWithSecrets— obligatorios: noneTriggerWrite— obligatorios: label, targetUDPStreamSource— obligatorios: protocol, group, portURLStreamSource— obligatorios: urlUploadScope— obligatorios: playlist_ids, folder_idsLo que un usuario de carga puede usar (docs/uploaders.md): las listas de reproducción cuyas páginas cambia y las carpetas de medios en las que sube. Las carpetas son exactamente las listadas, nunca sus subcarpetas. Un id que al escribirse no nombra ningún objeto activo del proyecto es invalid_request en su posición; una eliminación posterior deja un id muerto, que no concede nada.
El alcance se lee en cada solicitud, así que un cambio se aplica a la siguiente.
UptimeDay— obligatorios: day, online_s, offline_s, availability, coverageUn día UTC. La disponibilidad es online_s sobre online_s más offline_s, nulo cuando no se registró nada. La cobertura es la proporción del día (de cada día de pantalla reportado en una fila de proyecto) con un estado registrado, de 0 a 1: un hueco reduce la cobertura y nunca es tiempo offline. Los intervalos (filas de pantalla) son cuántos intervalos registrados tocaron el día; las pantallas (filas de proyecto) cuántas pantallas tuvieron un estado registrado; live marca un día de pantalla que incluye el intervalo abierto hasta ahora.
UsageFrame— obligatorios: page_id, primitive_id, rectUna primitiva de imagen o video que nombra el archivo multimedia, con su marco y la forma en que el archivo lo llena.
UsageScreen— obligatorios: id, label, screen, playlist_ids, howUna pantalla activa que usa al menos una de las listas de reproducción indicadas.
UsageScreenHow— obligatorios: playlist_id, usesUsageTagFilter— obligatorios: all, any, noneEl filtro de un selector de etiqueta. Un archivo coincide cuando tiene todas las etiquetas de all, al menos una etiqueta de any cuando se nombra alguna, y ninguna etiqueta de none; el selector de etiqueta abreviado es all con una etiqueta.
UsageTrack— obligatorios: index, idUserEmailChangeAccepted— obligatorios: noneUserEmailChangeRequest— obligatorios: email, proofSolicita un cambio de correo electrónico verificado usando prueba reciente. El correo actual sigue vigente mientras la verificación está pendiente. La dirección antigua recibe solo una advertencia, sin enlace para deshacer.
VerifiedOrganizationDomain— obligatorios: domain, organization_id, state, verified_atVersionResponse— obligatorios: version, commit, api_version, protocol_versionWebhook— obligatorios: id, url, event_types, enabled, revision, status, created_at, updated_atUn webhook del proyecto. Los registros del log del Player (runtime.reported) no se entregan.
Cada evento de proyecto coincidente se envía por POST a url como el mismo objeto JSON que devuelve GET /api/events, con encabezados ScreenRig-Webhook-Id, ScreenRig-Event-Id (el cursor del evento, estable en reintentos), User-Agent y ScreenRig-Signature t=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<raw body>" con la cadena secreta como clave>.
Una respuesta 2xx dentro de 10 segundos tiene éxito; cualquier otro estado, una redirección (nunca seguida), un tiempo de espera o una falla de conexión o TLS se reintenta con retroceso exponencial (30 segundos que se duplican hasta una hora, con variación) durante 24 horas y luego falla. Después de tres tiempos de espera consecutivos, el tiempo de espera del intento se reduce a 5 segundos hasta que llega una respuesta.
Un webhook tiene como máximo un intento en vuelo y un proyecto como máximo dos, en todos los servidores. La entrega es al menos una vez y sin orden; deduplica en ScreenRig-Event-Id.
Cada intento se mide como un evento del flujo de escucha (1 crédito después de la asignación mensual de 10,000 API/SSE), y los mismos eventos que son gratuitos en el flujo de escucha también lo son aquí: screen.*, runtime.*, alert_mute.*, application.event, playback.page_failed y agent.command.
Un intento rechazado antes de enviar nada (url_rejected, dns_failed) no se cobra. payment_required y secret_unavailable esperan antes de reintentar, pero nunca cuentan para failing ni para la deshabilitación automática. status es failing mientras ninguna entrega haya tenido éxito desde failing_since; tras 72 horas de fallo continuo, el webhook se deshabilita (disabled_reason delivery_failures) y se agrega notification.disabled.
WebhookDelivery— obligatorios: id, webhook_id, event_id, event_type, state, attempts, created_atWebhookDeliveryAttempt— obligatorios: attempt, at, status, error, duration_msWebhookDeliveryAttemptList— obligatorios: itemsWebhookDeliveryList— obligatorios: items, next_cursorWebhookEventTypes— obligatorios: noneTipos de evento exactos, como screen.online, o prefijos que terminan en .*, como screen.* (todos los tipos que empiezan con screen.). notification.test nunca se distribuye mediante una suscripción; solo lo envía POST /api/webhooks/{id}/test.
WebhookHandshake— obligatorios: noneUn handshake de proveedor al que responde la URL, para un proveedor sin esquema de firma aquí. microsoft_graph responde a un POST que lleva un parámetro de consulta validationToken devolviendo el token decodificado como text/plain. monday responde a un POST JSON de {"challenge": "..."} con el mismo JSON. trello responde con 200 a su comprobación HEAD. azure_event_grid responde a un SubscriptionValidationEvent (aeg-event-type: SubscriptionValidation) con {"validationResponse": "<validationCode>"}. verify.vendor slack responde al desafío url_verification firmado de Slack, y verify.vendor asana responde al handshake X-Hook-Secret de Asana y conserva ese secreto para verificar sus eventos.
Un handshake solo se responde para un webhook configurado para ese proveedor, no escribe nada, nunca se factura y no gasta presupuesto de velocidad, y se registra en el registro de entregas con el resultado handshake. Un webhook desactivado no responde a ninguno.
WebhookList— obligatorios: itemsWebhookPatch— obligatorios: noneWebhookVerify— obligatorios: vendor, secretLa verificación de proveedor de un webhook o activador, tal como la muestra una lectura. El secreto solo es una pista.
WebhookVerifyVendor— obligatorios: noneWebhookVerifyWrite— obligatorios: vendorUn proveedor cuya propia firma autentica un envío en lugar del secreto, porque estos proveedores no pueden enviar el nuestro.
El encabezado y el esquema de cada uno son los del proveedor y fijos: github envía X-Hub-Signature-256, sha256= y el HMAC-SHA256 hexadecimal del cuerpo; stripe envía Stripe-Signature, t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>"> (varios v1 mientras se rota un secreto, t dentro de cinco minutos); shopify envía X-Shopify-Hmac-Sha256, el HMAC-SHA256 del cuerpo en base64; slack envía X-Slack-Signature, v0= y el HMAC-SHA256 hexadecimal de "v0:<X-Slack-Request-Timestamp>:<body>" (dentro de cinco minutos); linear envía Linear-Signature, el HMAC-SHA256 hexadecimal del cuerpo, y el miembro webhookTimestamp del cuerpo (milisegundos Unix) debe estar a menos de un minuto; vercel envía x-vercel-signature, el HMAC-SHA1 hexadecimal del cuerpo; asana envía X-Hook-Signature, el HMAC-SHA256 hexadecimal del cuerpo con el X-Hook-Secret del handshake de Asana como clave; generic_hmac es cualquier remitente que firma con HMAC-SHA256 en el encabezado que usted nombra.
Un envío que lleva una firma válida se acepta sin el secreto, y el secreto sigue funcionando a su lado. verify no puede combinarse con signing. Un envío se juzga sobre el cuerpo tal como llegó, antes de que consuma presupuesto de velocidad. Slack y Asana también responden a sus handshakes (vea WebhookHandshake).
WebhookWithSecret— obligatorios: id, url, event_types, enabled, revision, status, created_at, updated_at, secretUn Webhook más su secreto de firma. Devuelto solo al crear y rotar el secreto.
WebhookWrite— obligatorios: url, event_typesWebsiteSetupCode— obligatorios: code, expires_at