Endpoints API
Reference complete pour tous les endpoints de l'API REST Screenzzie
docs.apiCtaBanner.title
docs.apiCtaBanner.description
Reference des endpoints API
Documentation complete pour tous les endpoints de l'API REST disponibles.
Organisation et introspection
Obtenez des informations sur votre contexte API actuel et votre organisation.
Obtenir le contexte actuel
GET /api/v1/me
Retourne des informations sur votre cle API, organisation, limites de debit et fonctionnalites disponibles. Cet endpoint ne compte pas dans votre limite de debit.
Exemple de requete :
curl -X GET "https://www.screenzzie.com/api/v1/me" \
-H "Authorization: Bearer sk_live_xxx"
Exemple de reponse :
{
"success": true,
"data": {
"apiKey": {
"id": "uuid",
"name": "Ma cle API",
"keyPrefix": "sk_live_abc123",
"scopes": ["screens:read", "screens:write", "playlists:read"],
"expiresAt": null,
"lastUsedAt": "2024-01-15T10:30:00Z"
},
"organization": {
"id": "uuid",
"name": "Mon Entreprise",
"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
}
}
}
Lister les organisations
GET /api/v1/organizations
Retourne les organisations accessibles avec votre cle API. Actuellement, chaque cle API appartient a exactement une organisation.
Parametres de requete :
| Parametre | Type | Description |
|---|---|---|
page | number | Numero de page (defaut : 1) |
limit | number | Elements par page (defaut : 20, max : 100) |
Exemple de requete :
curl -X GET "https://www.screenzzie.com/api/v1/organizations" \
-H "Authorization: Bearer sk_live_xxx"
Exemple de reponse :
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Mon Entreprise",
"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
}
}
}
Ecrans
Gerez vos ecrans d'affichage numerique.
Lister les ecrans
GET /api/v1/screens
Parametres de requete :
| Parametre | Type | Description |
|---|---|---|
page | number | Numero de page (defaut : 1) |
limit | number | Elements par page (defaut : 20, max : 100) |
isActive | boolean | Filtrer par statut actif |
isOnline | boolean | Filtrer par statut en ligne |
screenGroupId | uuid | Filtrer par groupe d'ecrans |
workspaceId | uuid | Filtrer par espace de travail |
Exemple de requete :
curl -X GET "https://www.screenzzie.com/api/v1/screens?isOnline=true&limit=10" \
-H "Authorization: Bearer sk_live_xxx"
Exemple de reponse :
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Affichage Hall",
"description": "Ecran de l'entree principale",
"isActive": true,
"isOnline": true,
"lastSeenAt": "2024-01-01T12:00:00Z",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Batiment A, Etage 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
}
}
}
Obtenir un ecran
GET /api/v1/screens/:screenId
Parametres de chemin :
| Parametre | Type | Description |
|---|---|---|
screenId | uuid | L'ID de l'ecran |
Exemple de reponse :
Retourne un objet ecran unique avec la meme structure que la reponse de liste.
Creer un ecran
POST /api/v1/screens
Corps de la requete :
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom de l'ecran (max 100 caracteres) |
description | string | Non | Description de l'ecran (max 500 caracteres) |
orientation | string | Non | landscape ou portrait (defaut : landscape) |
rotation | string | Non | 0, 90, 180, ou 270 (defaut : 0) |
timezone | string | Non | Fuseau horaire IANA (ex : Europe/Madrid) |
location | string | Non | Description de l'emplacement physique (max 200 caracteres) |
screenGroupId | uuid | Non | Appartenance a un groupe d'ecrans |
workspaceId | uuid | Non | Assignation a un espace de travail |
Les assignations de playlist et sequence ne peuvent pas etre definies lors de la creation. Utilisez l'endpoint Mettre a jour un ecran pour assigner du contenu apres la creation.
Exemple de requete :
curl -X POST "https://www.screenzzie.com/api/v1/screens" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Salle de conference A",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Batiment B, Salle 101"
}'
Exemple de reponse :
{
"success": true,
"data": {
"id": "uuid",
"name": "Salle de conference A",
"description": null,
"isActive": true,
"isOnline": false,
"lastSeenAt": null,
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Madrid",
"location": "Batiment B, Salle 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"
}
}
Mettre a jour un ecran
PATCH /api/v1/screens/:screenId
Tous les champs sont optionnels. Incluez uniquement les champs que vous souhaitez mettre a jour.
Corps de la requete :
| Champ | Type | Description |
|---|---|---|
name | string | Nouveau nom de l'ecran (max 100 caracteres) |
description | string | Nouvelle description (null pour effacer) |
orientation | string | landscape ou portrait |
rotation | string | 0, 90, 180, ou 270 |
timezone | string | Fuseau horaire IANA |
location | string | Emplacement physique (null pour effacer) |
workspaceId | uuid | ID espace de travail (null pour retirer) |
screenGroupId | uuid | ID groupe d'ecrans (null pour retirer) |
currentPlaylistId | uuid | Playlist actuelle (null pour retirer) |
currentSequenceId | uuid | Sequence actuelle (null pour retirer) |
defaultPlaylistId | uuid | Playlist par defaut (null pour retirer) |
defaultSequenceId | uuid | Sequence par defaut (null pour retirer) |
Exemple de requete :
curl -X PATCH "https://www.screenzzie.com/api/v1/screens/abc123" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Nom d affichage mis a jour",
"currentPlaylistId": "playlist-uuid"
}'
Playlists
Gerez les playlists de contenu pour vos ecrans.
Lister les playlists
GET /api/v1/playlists
Parametres de requete :
| Parametre | Type | Description |
|---|---|---|
page | number | Numero de page (defaut : 1) |
limit | number | Elements par page (defaut : 20, max : 100) |
workspaceId | uuid | Filtrer par espace de travail |
Exemple de reponse :
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Contenu principal",
"description": "Playlist principale pour les ecrans du hall",
"itemCount": 5,
"totalDuration": 120,
"workspaceId": null,
"createdBy": "user-uuid",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
],
"pagination": { ... }
}
}
Obtenir une playlist
GET /api/v1/playlists/:playlistId
Retourne la playlist avec ses elements. Les elements sont toujours inclus dans la reponse.
Parametres de chemin :
| Parametre | Type | Description |
|---|---|---|
playlistId | uuid | L'ID de la playlist |
Exemple de reponse :
{
"success": true,
"data": {
"id": "uuid",
"name": "Contenu principal",
"description": "Playlist principale pour les ecrans du hall",
"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"
}
]
}
}
Creer une playlist
POST /api/v1/playlists
Corps de la requete :
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom de la playlist (max 100 caracteres) |
description | string | Non | Description de la playlist (max 500 caracteres) |
workspaceId | uuid | Non | Assignation a un espace de travail |
Exemple de requete :
curl -X POST "https://www.screenzzie.com/api/v1/playlists" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Promotions de fetes",
"description": "Contenu saisonnier pour decembre"
}'
Mettre a jour une playlist
PATCH /api/v1/playlists/:playlistId
Corps de la requete :
| Champ | Type | Description |
|---|---|---|
name | string | Nouveau nom de la playlist |
description | string | Nouvelle description (null pour effacer) |
workspaceId | uuid | ID espace de travail (null pour retirer) |
Supprimer une playlist
DELETE /api/v1/playlists/:playlistId
Retourne 204 No Content en cas de succes.
Medias
Accedez et enregistrez des fichiers medias dans votre bibliotheque.
Lister les medias
GET /api/v1/media
Parametres de requete :
| Parametre | Type | Description |
|---|---|---|
page | number | Numero de page (defaut : 1) |
limit | number | Elements par page (defaut : 20, max : 100) |
type | string | Filtrer par type : image ou video |
folderId | uuid | Filtrer par dossier |
workspaceId | uuid | Filtrer par espace de travail |
Exemple de reponse :
{
"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": { ... }
}
}
Obtenir un media
GET /api/v1/media/:mediaId
Retourne un objet media unique avec la meme structure que la reponse de liste.
Enregistrer un media
POST /api/v1/media
Enregistre un fichier media qui a deja ete televerse vers le stockage. Cet endpoint ne gere pas les televersements de fichiers directement - utilisez le tableau de bord web pour les televersements de fichiers.
Corps de la requete :
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom du media (max 200 caracteres) |
type | string | Oui | image ou video |
fileUrl | string | Oui | URL du fichier televerse |
thumbnailUrl | string | Non | URL de la vignette |
fileSize | number | Non | Taille du fichier en octets |
duration | number | Non | Duree en secondes (pour les videos) |
folderId | uuid | Non | Assignation a un dossier |
workspaceId | uuid | Non | Assignation a un espace de travail |
Exemple de requete :
curl -X POST "https://www.screenzzie.com/api/v1/media" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Logo entreprise",
"type": "image",
"fileUrl": "https://votre-stockage.com/logo.png",
"thumbnailUrl": "https://votre-stockage.com/logo-thumb.png",
"fileSize": 102400
}'
Le televersement direct de fichiers n'est pas disponible via l'API REST. Televersez les fichiers via le tableau de bord web, ou televersez vers votre propre stockage et enregistrez l'URL en utilisant cet endpoint.
Supprimer un media
DELETE /api/v1/media/:mediaId
Retourne 204 No Content en cas de succes.
Planifications
Les planifications sont uniquement disponibles sur le plan Growth et superieur.
Planifiez du contenu a diffuser a des moments specifiques.
Lister les planifications
GET /api/v1/schedules
Parametres de requete :
| Parametre | Type | Description |
|---|---|---|
page | number | Numero de page (defaut : 1) |
limit | number | Elements par page (defaut : 20, max : 100) |
workspaceId | uuid | Filtrer par espace de travail |
screenId | uuid | Filtrer par ecran |
isActive | boolean | Filtrer par statut actif |
Exemple de reponse :
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Promotions du week-end",
"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": { ... }
}
}
Obtenir une planification
GET /api/v1/schedules/:scheduleId
Retourne un objet planification unique avec la meme structure que la reponse de liste.
Creer une planification
POST /api/v1/schedules
Corps de la requete :
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Non | Nom de la planification (max 100 caracteres) |
playlistId | uuid | Non* | Playlist a planifier |
sequenceId | uuid | Non* | Sequence a planifier |
targetType | string | Oui | screen, screen_group, all_screens, ou multiple_screens |
screenId | uuid | Conditionnel | Requis si targetType est screen |
screenGroupId | uuid | Conditionnel | Requis si targetType est screen_group |
dayOfWeek | number[] | Non | Jours de la semaine (0=Dim, 6=Sam) |
startTime | string | Non | Heure de debut au format HH:MM |
endTime | string | Non | Heure de fin au format HH:MM |
startDate | string | Non | Date de debut au format ISO |
endDate | string | Non | Date de fin au format ISO |
priority | number | Non | Priorite 0-100 (defaut : 0) |
isActive | boolean | Non | Si active (defaut : true) |
color | string | Non | Couleur d'affichage (ex : #3B82F6) |
workspaceId | uuid | Non | Assignation a un espace de travail |
*Soit playlistId soit sequenceId doit etre fourni pour planifier du contenu.
Exigences conditionnelles par type de cible :
| targetType | Champs requis |
|---|---|
screen | screenId |
screen_group | screenGroupId |
all_screens | Aucun |
multiple_screens | Aucun (utilisez un endpoint separe pour ajouter des ecrans) |
Exemple de requete :
curl -X POST "https://www.screenzzie.com/api/v1/schedules" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Promotions du week-end",
"playlistId": "abc123",
"targetType": "all_screens",
"dayOfWeek": [0, 6],
"startTime": "09:00",
"endTime": "21:00",
"priority": 10,
"color": "#3B82F6"
}'
Mettre a jour une planification
PATCH /api/v1/schedules/:scheduleId
Tous les champs sont optionnels. Utilise les memes definitions de champs que Creer une planification.
Supprimer une planification
DELETE /api/v1/schedules/:scheduleId
Retourne 204 No Content en cas de succes.
Codes de statut HTTP
| Code | Description |
|---|---|
200 | Succes |
201 | Cree |
204 | Pas de contenu (suppression reussie) |
400 | Mauvaise requete (erreur de validation) |
401 | Non autorise (cle API invalide) |
403 | Interdit (permissions insuffisantes ou plan) |
404 | Non trouve |
429 | Trop de requetes (limite de debit) |
500 | Erreur serveur interne |