Introduction à l'API
L'API REST publique de Digital Signage RDS vous permet d'intégrer des tiers à votre compte, d'automatiser des tâches ou de construire votre propre tableau de bord.
- Base URL :
https://rds.digitalsignagerds.com/api/v1 - Version :
v1(stable) - Format : JSON sur HTTPS
1. Démarrer en 3 étapes
- Ouvrez votre Profil et allez sur l'onglet API.
- Créez une nouvelle clé en lui donnant un nom (p. ex.
Zapier), choisissez l'expiration et les permissions (lecture seule ou lecture + écriture). - Copiez le jeton (
rds_live_…). Il ne sera plus affiché. Si vous le perdez, vous devrez en créer un autre.
2. Authentification
Passez le jeton dans l'en-tête Authorization comme Bearer token :
curl -H "Authorization: Bearer rds_live_xxxxx" \
https://rds.digitalsignagerds.com/api/v1/me
Un bon premier test est GET /me : il vous renvoie la clé et le compte
associé.
Permissions (scopes)
Chaque clé porte un ensemble de permissions :
| Permission | Ce qu'elle permet |
|---|---|
read |
Lister et lire les ressources (GET) |
write |
Téléverser du contenu et modifier des ressources (POST) |
Les clés en lecture seule ne peuvent pas téléverser
d'images/vidéos ni rien modifier. Elles renverront
403 insufficient_scope.
Expiration et révocation
Les clés peuvent expirer automatiquement (30 jours, 90 jours, 1 an ou
"Pas d'expiration"). Vous pouvez aussi les révoquer manuellement
depuis votre profil. Une clé expirée ou révoquée renvoie
401 Token has expired ou 401 Token has been revoked.
3. Limite de débit
60 requêtes par minute par jeton. Au-delà, vous obtenez un
429 Too Many Requests avec un en-tête Retry-After: <secondes> qui
indique combien de temps attendre.
4. Réponses
Ressource unique
{
"object": "device",
"id": 1138,
"code": "RDSDF25",
"...": "..."
}
Listes (pagination par curseur)
{
"object": "list",
"url": "/api/v1/devices",
"data": [ { ... }, { ... } ],
"has_more": true,
"next_cursor": "1142"
}
Pour obtenir la page suivante, passez next_cursor comme
starting_after :
GET /api/v1/devices?starting_after=1142&limit=20
Paramètres acceptés dans les listes :
| Paramètre | Valeur | Par défaut |
|---|---|---|
limit |
1–100 | 20 |
starting_after |
id entier | 0 (premier résultat) |
Erreurs
{
"error": {
"type": "unauthorized",
"message": "Invalid token"
}
}
Types d'erreur fréquents :
| Code | Type | Quand |
|---|---|---|
| 401 | unauthorized |
Jeton absent, mal formé, inconnu, révoqué ou expiré |
| 403 | insufficient_scope |
La clé n'a pas la permission requise |
| 403 | quota_exceeded |
Quota de l'entreprise atteint (devices, images, videos) |
| 404 | not_found |
La ressource n'existe pas ou n'est pas visible pour votre compte |
| 405 | method_not_allowed |
Méthode HTTP non autorisée sur ce chemin |
| 413 | file_too_large |
Le fichier dépasse la limite |
| 415 | unsupported_media_type |
Extension ou contenu non pris en charge |
| 429 | rate_limited |
Plus de 60 requêtes par minute |
| 500 | server_error |
Erreur inattendue du serveur |
5. Endpoints disponibles
Compte
| Méthode | Chemin | Description |
|---|---|---|
| GET | /me |
Données de la clé (test rapide d'auth) |
| GET | /account |
Compte : adresse, contact, limites, usage et abonnement |
| GET | /subscription |
Abonnement : cycle en cours, compteurs et prochain paiement |
| GET | /invoices |
Factures (Stripe), plus récentes en premier |
Appareils
| Méthode | Chemin | Description |
|---|---|---|
| GET | /devices |
Liste des appareils (les retirés sont exclus) |
| GET | /devices/{id_ou_code} |
Un appareil (accepte id entier ou code RDSxxx) |
| GET | /devices?code=RDSF8B8 |
Filtrer la liste par code exact |
Chaque appareil expose is_online, last_seen_at, playlist_id +
playlist_name, workspace_id + workspace_name (+ parent si
sous-siège), kiosk_mode, kiosk_whitelist, branch_*, dates de
contrat et plus.
Sièges (workspaces)
| Méthode | Chemin | Description |
|---|---|---|
| GET | /workspaces |
Liste (sièges et sous-sièges) |
| GET | /workspaces/{id} |
Un siège avec étiquettes, contenu par défaut et carte |
Playlists
| Méthode | Chemin | Description |
|---|---|---|
| GET | /playlists |
Liste des playlists |
| GET | /playlists/{id} |
Playlist avec compteurs d'appareils / images / vidéos |
Images
| Méthode | Chemin | Description |
|---|---|---|
| GET | /images |
Liste |
| GET | /images/{id} |
Une image (inclut url pour télécharger le binaire) |
| POST | /images |
Téléverser (requiert le scope write) |
Vidéos
| Méthode | Chemin | Description |
|---|---|---|
| GET | /videos |
Liste |
| GET | /videos/{id} |
Une vidéo (inclut url pour télécharger le binaire) |
| POST | /videos |
Téléverser (requiert le scope write) |
6. Téléverser du contenu
Les endpoints POST /images et POST /videos acceptent
multipart/form-data avec deux parties : file (binaire,
obligatoire) et name (texte optionnel, le titre visible côté client).
curl -X POST https://rds.digitalsignagerds.com/api/v1/images \
-H "Authorization: Bearer rds_live_xxxxx" \
-F "name=Affiche Noël" \
-F "file=@/chemin/vers/affiche.png"
Contraintes images :
- Extensions autorisées :
jpg,jpeg,png,gif,webp,avif,bmp - Taille maximale : 256 MB
- Validé par contenu (magic bytes), pas par l'en-tête MIME client
- Quota par compte : voir
account.limits.max_images
Contraintes vidéos :
- Extensions autorisées :
mp4,mkv,webm,mov,avi - Taille maximale :
account.limits.max_video_size_mb(par défaut 200 MB) - Quota par compte : voir
account.limits.max_videos
La réponse d'un POST réussi est 201 Created avec la ressource
nouvellement créée (incluant id, filename, url et crc).
7. Référence interactive
Pour tester chaque endpoint en direct, voir les schémas exacts de réponse et télécharger l'OpenAPI YAML, allez sur la page Référence (Swagger).