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ámetro | Tipo | Descripción |
|---|---|---|
page | número | Número de página (por defecto: 1) |
limit | número | Items 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ámetro | Tipo | Descripción |
|---|---|---|
page | número | Número de página (por defecto: 1) |
limit | número | Items por página (por defecto: 20, max: 100) |
isActive | booleano | Filtrar por estado activo |
isOnline | booleano | Filtrar por estado en línea |
screenGroupId | uuid | Filtrar por grupo de pantallas |
workspaceId | uuid | Filtrar 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ámetro | Tipo | Descripción |
|---|---|---|
screenId | uuid | El 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:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre de la pantalla (max 100 caracteres) |
description | string | No | Descripción de la pantalla (max 500 caracteres) |
orientation | string | No | landscape o portrait (por defecto: landscape) |
rotation | string | No | 0, 90, 180, o 270 (por defecto: 0) |
timezone | string | No | Zona horaria IANA (ej., Europe/Madrid) |
location | string | No | Descripción de ubicación física (max 200 caracteres) |
screenGroupId | uuid | No | Membresía de grupo de pantallas |
workspaceId | uuid | No | Asignació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:
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nuevo nombre de pantalla (max 100 caracteres) |
description | string | Nueva descripción (null para limpiar) |
orientation | string | landscape o portrait |
rotation | string | 0, 90, 180, o 270 |
timezone | string | Zona horaria IANA |
location | string | Ubicación física (null para limpiar) |
workspaceId | uuid | ID de workspace (null para eliminar) |
screenGroupId | uuid | ID de grupo (null para eliminar) |
currentPlaylistId | uuid | Lista actual (null para eliminar) |
currentSequenceId | uuid | Secuencia actual (null para eliminar) |
defaultPlaylistId | uuid | Lista por defecto (null para eliminar) |
defaultSequenceId | uuid | Secuencia 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ámetro | Tipo | Descripción |
|---|---|---|
page | número | Número de página (por defecto: 1) |
limit | número | Items por página (por defecto: 20, max: 100) |
workspaceId | uuid | Filtrar 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ámetro | Tipo | Descripción |
|---|---|---|
playlistId | uuid | El 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:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre de la lista (max 100 caracteres) |
description | string | No | Descripción de la lista (max 500 caracteres) |
workspaceId | uuid | No | Asignació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:
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nuevo nombre de lista |
description | string | Nueva descripción (null para limpiar) |
workspaceId | uuid | ID 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ámetro | Tipo | Descripción |
|---|---|---|
page | número | Número de página (por defecto: 1) |
limit | número | Items por página (por defecto: 20, max: 100) |
type | string | Filtrar por tipo: image o video |
folderId | uuid | Filtrar por carpeta |
workspaceId | uuid | Filtrar 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:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del medio (max 200 caracteres) |
type | string | Sí | image o video |
fileUrl | string | Sí | URL del archivo subido |
thumbnailUrl | string | No | URL de la miniatura |
fileSize | number | No | Tamaño del archivo en bytes |
duration | number | No | Duración en segundos (para videos) |
folderId | uuid | No | Asignación de carpeta |
workspaceId | uuid | No | Asignació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ámetro | Tipo | Descripción |
|---|---|---|
page | número | Número de página (por defecto: 1) |
limit | número | Items por página (por defecto: 20, max: 100) |
workspaceId | uuid | Filtrar por workspace |
screenId | uuid | Filtrar por pantalla |
isActive | booleano | Filtrar 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:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nombre del horario (max 100 caracteres) |
playlistId | uuid | No* | Lista a programar |
sequenceId | uuid | No* | Secuencia a programar |
targetType | string | Sí | screen, screen_group, all_screens, o multiple_screens |
screenId | uuid | Condicional | Requerido si targetType es screen |
screenGroupId | uuid | Condicional | Requerido si targetType es screen_group |
dayOfWeek | number[] | No | Días de la semana (0=Dom, 6=Sáb) |
startTime | string | No | Hora de inicio en formato HH:MM |
endTime | string | No | Hora de fin en formato HH:MM |
startDate | string | No | Fecha de inicio en formato ISO |
endDate | string | No | Fecha de fin en formato ISO |
priority | number | No | Prioridad 0-100 (por defecto: 0) |
isActive | boolean | No | Si está activo (por defecto: true) |
color | string | No | Color de visualización (ej., #3B82F6) |
workspaceId | uuid | No | Asignación de workspace |
*Se debe proporcionar playlistId o sequenceId para programar contenido.
Requisitos Condicionales por Tipo de Objetivo:
| targetType | Campos Requeridos |
|---|---|
screen | screenId |
screen_group | screenGroupId |
all_screens | Ninguno |
multiple_screens | Ninguno (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ódigo | Descripción |
|---|---|
200 | Éxito |
201 | Creado |
204 | Sin Contenido (eliminación exitosa) |
400 | Solicitud Incorrecta (error de validación) |
401 | No Autorizado (clave API inválida) |
403 | Prohibido (permisos insuficientes o plan) |
404 | No Encontrado |
429 | Demasiadas Solicitudes (límite de tasa) |
500 | Error Interno del Servidor |