Ejemplos
Los ejemplos usan curl y la variable $API_TOKEN. La URL base es https://cloud.viewneo.com/api/public/v1.
Subir un archivo
Sección titulada «Subir un archivo»Los archivos no pasan por la propia API, sino que van directamente al almacenamiento, a través de una dirección prefirmada. Así, incluso los vídeos grandes se suben rápido.
# 1. iniciar la subidacurl https://cloud.viewneo.com/api/public/v1/media/uploads -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"filename":"speisekarte.jpg","mimeType":"image/jpeg","fileSize":'"$(wc -c < speisekarte.jpg)"'}'
# 2. enviar el archivo a upload.url de la respuestacurl -X PUT "$UPLOAD_URL" -H "Content-Type: image/jpeg" --data-binary @speisekarte.jpg
# 3. finalizar, con la suma de comprobación MD5curl https://cloud.viewneo.com/api/public/v1/media/uploads/$MEDIA_ID/complete -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"md5":"'"$(openssl md5 -r speisekarte.jpg | cut -d' ' -f1)"'"}'Los archivos grandes llegan como multipart: la respuesta del paso 1 indica entonces el tamaño de las partes; las direcciones de las partes las obtienes con POST /media/uploads/{id}/parts.
Después, el contenido está listo. Los vídeos se preparan en segundo plano para la reproducción. Algunos formatos se convierten y, al hacerlo, sustituyen al contenido subido: TIFF, BMP y HEIC pasan a JPEG (o PNG si hay transparencia), y documentos como PDF o PowerPoint, a una imagen por página en una carpeta nueva. Los ID nuevos los encuentras con GET /media?folderId=….
Llevar un contenido a la pantalla
Sección titulada «Llevar un contenido a la pantalla»# añadir el contenido a una playlist, los días laborables al mediodíacurl https://cloud.viewneo.com/api/public/v1/playlists/$PLAYLIST_ID/entries \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"type":"media","mediaId":"'"$MEDIA_ID"'","durationSeconds":15, "schedule":{"rule":"scheduled","weekdays":["mon","tue","wed","thu","fri"],"startTime":"11:30","endTime":"14:30"}}'
# asignar la playlist a un dispositivo (un grupo funciona igual con /device-groups)curl -X PATCH https://cloud.viewneo.com/api/public/v1/devices/$DEVICE_ID \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"playlistId":"'"$PLAYLIST_ID"'"}'Mostrar datos de tu sistema
Sección titulada «Mostrar datos de tu sistema»Diseña una vez en el Designer una plantilla con marcadores de posición. Tu sistema crea a partir de ella un contenido y lo actualiza cada vez que cambian los datos:
# ¿qué marcadores de posición tiene la plantilla?curl https://cloud.viewneo.com/api/public/v1/templates/$TEMPLATE_ID -H "Authorization: Bearer $API_TOKEN"
# crear un contenido a partir de ella; su ID lo añades a una playlist como cualquier archivo multimediacurl https://cloud.viewneo.com/api/public/v1/templates/$TEMPLATE_ID/contents \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"name":"Mittagstisch","values":{"gericht":"Labskaus","preis":"12,50 €"}}'
# al día siguiente, cambiar los valores; los dispositivos se actualizan soloscurl -X PATCH https://cloud.viewneo.com/api/public/v1/template-contents/$CONTENT_ID \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"values":{"gericht":"Fischfrikadelle","preis":"11,90 €"}}'Los nombres de los marcadores de posición (aquí gericht y preis) proceden de tu plantilla.
Sincronizar una playlist
Sección titulada «Sincronizar una playlist»Envía el contenido completo en una sola llamada. Las entradas que envíes con su id se conservan, las nuevas se crean y todas las demás se eliminan:
curl -X PUT https://cloud.viewneo.com/api/public/v1/playlists/$PLAYLIST_ID/entries \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"entries":[{"type":"media","mediaId":"'"$ANGEBOT_1"'"},{"type":"media","mediaId":"'"$ANGEBOT_2"'"}]}'Poner en marcha un reproductor nuevo
Sección titulada «Poner en marcha un reproductor nuevo»Inicia el reproductor; muestra un código de activación de seis caracteres. Actívalo en un grupo de dispositivos (cada dispositivo pertenece a uno) y reproducirá de inmediato sus contenidos:
curl https://cloud.viewneo.com/api/public/v1/devices/activate \ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \ -d '{"activationCode":"AB3XZ7","name":"Lobby Empfang","groupId":"'"$GROUP_ID"'"}'Cada reproductor necesita una licencia; las licencias nunca se contratan automáticamente. Sin licencia libre, la API responde con 409 LICENSE_LIMIT_REACHED.
Encontrar dispositivos sin conexión
Sección titulada «Encontrar dispositivos sin conexión»curl "https://cloud.viewneo.com/api/public/v1/devices?limit=100" -H "Authorization: Bearer $API_TOKEN" \ | jq '.data[] | select(.online == false) | {name, lastSeenAt}'Obtener la prueba de reproducción de un día
Sección titulada «Obtener la prueba de reproducción de un día»curl "https://cloud.viewneo.com/api/public/v1/reports/device-log/$DEVICE_ID?filter=playouts&from=2026-10-06T00:00:00Z&to=2026-10-07T00:00:00Z&limit=200" \ -H "Authorization: Bearer $API_TOKEN"Repite la llamada con &cursor=<nextCursor> hasta que nextCursor sea null. Para un mes completo de un contenido de una sola vez existe la exportación CSV GET /reports/media/{id}/playout-details/export.