API e IntegracionesFunción del plan Growth

Endpoints de la API

Referencia completa de todos los endpoints de la API REST de Screenzzie

Acceso a la API REST

Integra con la API de Screenzzie para automatizar tu senalizacion digital. Disponible en el plan Growth.

Referencia de Endpoints de la API

Documentación completa de todos los endpoints disponibles de la API REST.

Organización e Introspección

Obtén información sobre tu contexto actual de API y organización.

Obtener Contexto Actual

GET /api/v1/me

Devuelve información sobre tu clave API, organización, límites de tasa y funciones disponibles. Este endpoint no cuenta para tu límite de tasa.

Ejemplo de Solicitud:

curl -X GET "https://www.screenzzie.com/api/v1/me" \
  -H "Authorization: Bearer sk_live_xxx"

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "apiKey": {
      "id": "uuid",
      "name": "Mi Clave API",
      "keyPrefix": "sk_live_abc123",
      "scopes": ["screens:read", "screens:write", "playlists:read"],
      "expiresAt": null,
      "lastUsedAt": "2024-01-15T10:30:00Z"
    },
    "organization": {
      "id": "uuid",
      "name": "Mi Empresa",
      "planId": "growth",
      "subscriptionStatus": "active",
      "trialEndsAt": null,
      "maxScreensAllowed": 50,
      "activeScreensCount": 12
    },
    "rateLimits": {
      "limit": 100000,
      "used": 45,
      "remaining": 99955,
      "resetAtMs": 1704153600000
    },
    "features": {
      "sequences": true,
      "schedules": true,
      "api": true
    }
  }
}

Listar Organizaciones

GET /api/v1/organizations

Devuelve las organizaciones accesibles con tu clave API. Actualmente, cada clave API pertenece a exactamente una organización.

Parámetros de Consulta:

ParámetroTipoDescripción
pagenúmeroNúmero de página (por defecto: 1)
limitnúmeroItems por página (por defecto: 20, max: 100)

Ejemplo de Solicitud:

curl -X GET "https://www.screenzzie.com/api/v1/organizations" \
  -H "Authorization: Bearer sk_live_xxx"

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Mi Empresa",
        "planId": "growth",
        "subscriptionStatus": "active",
        "maxScreensAllowed": 50,
        "activeScreensCount": 12,
        "createdAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1,
      "hasMore": false
    }
  }
}

Pantallas

Gestiona tus pantallas de señalización digital.

Listar Pantallas

GET /api/v1/screens

Parámetros de Consulta:

ParámetroTipoDescripción
pagenúmeroNúmero de página (por defecto: 1)
limitnúmeroItems por página (por defecto: 20, max: 100)
isActivebooleanoFiltrar por estado activo
isOnlinebooleanoFiltrar por estado en línea
screenGroupIduuidFiltrar por grupo de pantallas
workspaceIduuidFiltrar por workspace

Ejemplo de Solicitud:

curl -X GET "https://www.screenzzie.com/api/v1/screens?isOnline=true&limit=10" \
  -H "Authorization: Bearer sk_live_xxx"

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Pantalla del Lobby",
        "description": "Pantalla de entrada principal",
        "isActive": true,
        "isOnline": true,
        "lastSeenAt": "2024-01-01T12:00:00Z",
        "orientation": "landscape",
        "rotation": "0",
        "timezone": "Europe/Madrid",
        "location": "Edificio A, Planta 1",
        "cityName": "Madrid",
        "latitude": 40.4168,
        "longitude": -3.7038,
        "workspaceId": "uuid",
        "screenGroupId": null,
        "currentPlaylistId": "uuid",
        "currentSequenceId": null,
        "defaultPlaylistId": "uuid",
        "defaultSequenceId": null,
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T12:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 25,
      "totalPages": 3,
      "hasMore": true
    }
  }
}

Obtener Pantalla

GET /api/v1/screens/:screenId

Parámetros de Ruta:

ParámetroTipoDescripción
screenIduuidEl ID de la pantalla

Ejemplo de Respuesta:

Devuelve un objeto de pantalla único con la misma estructura que la respuesta de lista.

Crear Pantalla

POST /api/v1/screens

Cuerpo de la Solicitud:

CampoTipoRequeridoDescripción
namestringNombre de la pantalla (max 100 caracteres)
descriptionstringNoDescripción de la pantalla (max 500 caracteres)
orientationstringNolandscape o portrait (por defecto: landscape)
rotationstringNo0, 90, 180, o 270 (por defecto: 0)
timezonestringNoZona horaria IANA (ej., Europe/Madrid)
locationstringNoDescripción de ubicación física (max 200 caracteres)
screenGroupIduuidNoMembresía de grupo de pantallas
workspaceIduuidNoAsignación de workspace

Las asignaciones de lista y secuencia no se pueden establecer durante la creación. Usa el endpoint Actualizar Pantalla para asignar contenido después de la creación.

Ejemplo de Solicitud:

curl -X POST "https://www.screenzzie.com/api/v1/screens" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sala de Conferencias A",
    "orientation": "landscape",
    "rotation": "0",
    "timezone": "Europe/Madrid",
    "location": "Edificio B, Sala 101"
  }'

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Sala de Conferencias A",
    "description": null,
    "isActive": true,
    "isOnline": false,
    "lastSeenAt": null,
    "orientation": "landscape",
    "rotation": "0",
    "timezone": "Europe/Madrid",
    "location": "Edificio B, Sala 101",
    "cityName": null,
    "latitude": null,
    "longitude": null,
    "workspaceId": null,
    "screenGroupId": null,
    "currentPlaylistId": null,
    "currentSequenceId": null,
    "defaultPlaylistId": null,
    "defaultSequenceId": null,
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T00:00:00Z"
  }
}

Actualizar Pantalla

PATCH /api/v1/screens/:screenId

Todos los campos son opcionales. Solo incluye los campos que deseas actualizar.

Cuerpo de la Solicitud:

CampoTipoDescripción
namestringNuevo nombre de pantalla (max 100 caracteres)
descriptionstringNueva descripción (null para limpiar)
orientationstringlandscape o portrait
rotationstring0, 90, 180, o 270
timezonestringZona horaria IANA
locationstringUbicación física (null para limpiar)
workspaceIduuidID de workspace (null para eliminar)
screenGroupIduuidID de grupo (null para eliminar)
currentPlaylistIduuidLista actual (null para eliminar)
currentSequenceIduuidSecuencia actual (null para eliminar)
defaultPlaylistIduuidLista por defecto (null para eliminar)
defaultSequenceIduuidSecuencia por defecto (null para eliminar)

Ejemplo de Solicitud:

curl -X PATCH "https://www.screenzzie.com/api/v1/screens/abc123" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Nombre de Pantalla Actualizado",
    "currentPlaylistId": "playlist-uuid"
  }'

Listas de Reproducción

Gestiona listas de contenido para tus pantallas.

Listar Listas de Reproducción

GET /api/v1/playlists

Parámetros de Consulta:

ParámetroTipoDescripción
pagenúmeroNúmero de página (por defecto: 1)
limitnúmeroItems por página (por defecto: 20, max: 100)
workspaceIduuidFiltrar por workspace

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Contenido Principal",
        "description": "Lista principal para pantallas del lobby",
        "itemCount": 5,
        "totalDuration": 120,
        "workspaceId": null,
        "createdBy": "user-uuid",
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T12:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Obtener Lista de Reproducción

GET /api/v1/playlists/:playlistId

Devuelve la lista con sus items. Los items siempre se incluyen en la respuesta.

Parámetros de Ruta:

ParámetroTipoDescripción
playlistIduuidEl ID de la lista

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "Contenido Principal",
    "description": "Lista principal para pantallas del lobby",
    "itemCount": 2,
    "totalDuration": 45,
    "workspaceId": null,
    "createdBy": "user-uuid",
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T12:00:00Z",
    "items": [
      {
        "id": "item-uuid-1",
        "position": 0,
        "duration": 15,
        "itemType": "media",
        "mediaId": "media-uuid",
        "config": null,
        "createdAt": "2024-01-01T00:00:00Z"
      },
      {
        "id": "item-uuid-2",
        "position": 1,
        "duration": 30,
        "itemType": "website",
        "mediaId": null,
        "config": { "url": "https://example.com" },
        "createdAt": "2024-01-01T00:00:00Z"
      }
    ]
  }
}

Crear Lista de Reproducción

POST /api/v1/playlists

Cuerpo de la Solicitud:

CampoTipoRequeridoDescripción
namestringNombre de la lista (max 100 caracteres)
descriptionstringNoDescripción de la lista (max 500 caracteres)
workspaceIduuidNoAsignación de workspace

Ejemplo de Solicitud:

curl -X POST "https://www.screenzzie.com/api/v1/playlists" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Promociones Navideñas",
    "description": "Contenido de temporada para diciembre"
  }'

Actualizar Lista de Reproducción

PATCH /api/v1/playlists/:playlistId

Cuerpo de la Solicitud:

CampoTipoDescripción
namestringNuevo nombre de lista
descriptionstringNueva descripción (null para limpiar)
workspaceIduuidID de workspace (null para eliminar)

Eliminar Lista de Reproducción

DELETE /api/v1/playlists/:playlistId

Devuelve 204 No Content en caso de éxito.


Medios

Accede y registra archivos de medios en tu biblioteca.

Listar Medios

GET /api/v1/media

Parámetros de Consulta:

ParámetroTipoDescripción
pagenúmeroNúmero de página (por defecto: 1)
limitnúmeroItems por página (por defecto: 20, max: 100)
typestringFiltrar por tipo: image o video
folderIduuidFiltrar por carpeta
workspaceIduuidFiltrar por workspace

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "video-promo.mp4",
        "type": "video",
        "fileUrl": "https://...",
        "thumbnailUrl": "https://...",
        "fileSize": 15728640,
        "duration": 30,
        "folderId": null,
        "workspaceId": null,
        "uploadedBy": "user-uuid",
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Obtener Medio

GET /api/v1/media/:mediaId

Devuelve un objeto de medio único con la misma estructura que la respuesta de lista.

Registrar Medio

POST /api/v1/media

Registra un archivo de medio que ya ha sido subido al almacenamiento. Este endpoint no maneja subidas de archivos directamente - usa el panel web para subir archivos.

Cuerpo de la Solicitud:

CampoTipoRequeridoDescripción
namestringNombre del medio (max 200 caracteres)
typestringimage o video
fileUrlstringURL del archivo subido
thumbnailUrlstringNoURL de la miniatura
fileSizenumberNoTamaño del archivo en bytes
durationnumberNoDuración en segundos (para videos)
folderIduuidNoAsignación de carpeta
workspaceIduuidNoAsignación de workspace

Ejemplo de Solicitud:

curl -X POST "https://www.screenzzie.com/api/v1/media" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Logo Empresa",
    "type": "image",
    "fileUrl": "https://tu-almacenamiento.com/logo.png",
    "thumbnailUrl": "https://tu-almacenamiento.com/logo-thumb.png",
    "fileSize": 102400
  }'

La subida directa de archivos no está disponible vía la API REST. Sube archivos a través del panel web, o sube a tu propio almacenamiento y registra la URL usando este endpoint.

Eliminar Medio

DELETE /api/v1/media/:mediaId

Devuelve 204 No Content en caso de éxito.


Horarios

Los horarios solo están disponibles en el plan Growth y superiores.

Programa contenido para reproducir en horarios específicos.

Listar Horarios

GET /api/v1/schedules

Parámetros de Consulta:

ParámetroTipoDescripción
pagenúmeroNúmero de página (por defecto: 1)
limitnúmeroItems por página (por defecto: 20, max: 100)
workspaceIduuidFiltrar por workspace
screenIduuidFiltrar por pantalla
isActivebooleanoFiltrar por estado activo

Ejemplo de Respuesta:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "uuid",
        "name": "Promociones de Fin de Semana",
        "playlistId": "playlist-uuid",
        "sequenceId": null,
        "screenId": null,
        "screenGroupId": null,
        "targetType": "all_screens",
        "dayOfWeek": [0, 6],
        "startTime": "09:00",
        "endTime": "21:00",
        "startDate": null,
        "endDate": null,
        "priority": 10,
        "isActive": true,
        "color": "#3B82F6",
        "workspaceId": null,
        "createdAt": "2024-01-01T00:00:00Z",
        "updatedAt": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": { ... }
  }
}

Obtener Horario

GET /api/v1/schedules/:scheduleId

Devuelve un objeto de horario único con la misma estructura que la respuesta de lista.

Crear Horario

POST /api/v1/schedules

Cuerpo de la Solicitud:

CampoTipoRequeridoDescripción
namestringNoNombre del horario (max 100 caracteres)
playlistIduuidNo*Lista a programar
sequenceIduuidNo*Secuencia a programar
targetTypestringscreen, screen_group, all_screens, o multiple_screens
screenIduuidCondicionalRequerido si targetType es screen
screenGroupIduuidCondicionalRequerido si targetType es screen_group
dayOfWeeknumber[]NoDías de la semana (0=Dom, 6=Sáb)
startTimestringNoHora de inicio en formato HH:MM
endTimestringNoHora de fin en formato HH:MM
startDatestringNoFecha de inicio en formato ISO
endDatestringNoFecha de fin en formato ISO
prioritynumberNoPrioridad 0-100 (por defecto: 0)
isActivebooleanNoSi está activo (por defecto: true)
colorstringNoColor de visualización (ej., #3B82F6)
workspaceIduuidNoAsignación de workspace

*Se debe proporcionar playlistId o sequenceId para programar contenido.

Requisitos Condicionales por Tipo de Objetivo:

targetTypeCampos Requeridos
screenscreenId
screen_groupscreenGroupId
all_screensNinguno
multiple_screensNinguno (usa endpoint separado para agregar pantallas)

Ejemplo de Solicitud:

curl -X POST "https://www.screenzzie.com/api/v1/schedules" \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Promociones de Fin de Semana",
    "playlistId": "abc123",
    "targetType": "all_screens",
    "dayOfWeek": [0, 6],
    "startTime": "09:00",
    "endTime": "21:00",
    "priority": 10,
    "color": "#3B82F6"
  }'

Actualizar Horario

PATCH /api/v1/schedules/:scheduleId

Todos los campos son opcionales. Usa las mismas definiciones de campo que Crear Horario.

Eliminar Horario

DELETE /api/v1/schedules/:scheduleId

Devuelve 204 No Content en caso de éxito.


Códigos de Estado HTTP

CódigoDescripción
200Éxito
201Creado
204Sin Contenido (eliminación exitosa)
400Solicitud Incorrecta (error de validación)
401No Autorizado (clave API inválida)
403Prohibido (permisos insuficientes o plan)
404No Encontrado
429Demasiadas Solicitudes (límite de tasa)
500Error Interno del Servidor