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.
Les domaines
Section intitulée « Les domaines »| Domaine | Chemins | Scope |
|---|---|---|
| Médias | /media, /media/{id}, /media/websites, /media/folders | media:* |
| Téléversement | /media/uploads, …/{id}/parts, …/{id}/complete | media: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/activate | devices:* |
| Groupes d’appareils | /device-groups, /device-groups/{id} | devices:* |
| Rapports | /reports/device-log/{deviceId}, /reports/media/{id}/… | reports:read |
| OAuth | /oauth/token | – |
Requêtes et réponses
Section intitulée « Requêtes et réponses »- Corps JSON avec
Content-Type: application/json. Les champs inconnus sont refusés avec400 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.
PATCHne modifie que les champs que tu envoies.nullsupprime 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.
Pagination
Section intitulée « Pagination »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 :
| Statut | Code | Signification |
|---|---|---|
| 400 | VALIDATION_ERROR, INVALID_INPUT | Un paramètre ou un champ manque ou n’est pas valide |
| 401 | UNAUTHORIZED, TOKEN_INVALID | Le jeton manque, est inconnu, révoqué ou expiré |
| 403 | FORBIDDEN | Le scope manque – ou, pour les rapports de médias, le plug-in Reports |
| 403 | SUBSCRIPTION_REQUIRED | le plug-in API n’est pas réservé |
| 404 | NOT_FOUND | n’existe pas dans ton compte |
| 409 | LICENSE_LIMIT_REACHED, PLAYER_LIMIT_REACHED | pas de licence libre pour un lecteur supplémentaire |
| 429 | QUOTA_EXCEEDED | limite atteinte, voir ci-dessous |
| 502 / 503 | UPSTREAM_ERROR, SERVICE_UNAVAILABLE | temporaire – 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.
Rapports
Section intitulée « Rapports »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).