Aller au contenu
CtrlK

Endpoints

Tous les chemins commencent par https://cloud.viewneo.com/api/public/v1. Les paramètres et les réponses de chaque endpoint sont décrits dans la référence interactive.

DomaineCheminsScope
Médias/media, /media/{id}, /media/websites, /media/foldersmedia:*
Téléversement/media/uploads, …/{id}/parts, …/{id}/completemedia:write
Modèles/templates, /templates/{id}, /templates/{id}/contents, /template-contents/{id}media:*
Playlists/playlists, /playlists/{id}playlists:*
Éléments de playlist/playlists/{id}/entries, …/entries/order, …/entries/{entryId}playlists:*
Appareils/devices, /devices/{id}, /devices/activatedevices:*
Groupes d’appareils/device-groups, /device-groups/{id}devices:*
Rapports/reports/device-log/{deviceId}, /reports/media/{id}/…reports:read
OAuth/oauth/token–
  • Corps JSON avec Content-Type: application/json. Les champs inconnus sont refusés avec 400 VALIDATION_ERROR – les fautes de frappe sont ainsi détectées immédiatement.
  • Les dates et heures sont au format ISO 8601 en UTC, p. ex. 2026-10-05T14:30:00.000Z.
  • Les ID sont des UUID ; ne les interprète pas.
  • PATCH ne modifie que les champs que tu envoies. null supprime une référence facultative – par exemple la playlist propre d’un appareil, qui diffuse alors la playlist de son groupe.
  • Les appareils reprennent d’eux-mêmes les modifications ; tu n’as rien à publier.

Les listes de médias, de playlists et d’appareils sont paginées : ?page=2&limit=50 (limit 1–100, 50 par défaut). La réponse contient pagination avec page, limit, total et totalPages.

Les rapports fonctionnent avec un curseur : transmets le nextCursor renvoyé comme ?cursor=. nextCursor: null signifie que tu as tout récupéré.

Les erreurs ont toujours la même forme :

{
"success": false,
"error": { "code": "VALIDATION_ERROR", "message": "Request validation failed",
"details": [{ "field": "limit", "errors": ["limit must not be greater than 100"] }] },
"correlationId": "7986ab46-9ccb-43c1-86b3-1abefa3bab98"
}

Évalue error.code, pas le texte. Les codes les plus importants :

StatutCodeSignification
400VALIDATION_ERROR, INVALID_INPUTUn paramètre ou un champ manque ou n’est pas valide
401UNAUTHORIZED, TOKEN_INVALIDLe jeton manque, est inconnu, révoqué ou expiré
403FORBIDDENLe scope manque – ou, pour les rapports de médias, le plug-in Reports
403SUBSCRIPTION_REQUIREDle plug-in API n’est pas réservé
404NOT_FOUNDn’existe pas dans ton compte
409LICENSE_LIMIT_REACHED, PLAYER_LIMIT_REACHEDpas de licence libre pour un lecteur supplémentaire
429QUOTA_EXCEEDEDlimite atteinte, voir ci-dessous
502 / 503UPSTREAM_ERROR, SERVICE_UNAVAILABLEtemporaire – réessaie plus tard

Chaque réponse porte l’en-tête X-Correlation-Id. Indique-le lorsque tu contactes le support.

Chaque jeton peut effectuer 60 requêtes par minute. Les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset indiquent l’état. Au-delà, l’API répond 429 QUOTA_EXCEEDED avec l’en-tête Retry-After (secondes). Répartis les gros traitements dans le temps au lieu de les envoyer en parallèle.

Les rapports ne contiennent que les données des appareils sur lesquels Rapports est activé (désactivé par défaut). Le journal d’appareil remonte à 7 jours ; les rapports de médias nécessitent le plug-in Reports et remontent à 90 jours, 365 jours avec l’option Extended. Sans from/to, c’est la journée en cours qui s’applique (à partir de 00:00 UTC).