API pour connecter votre système
Présentation et repères
Gérez les médias, campagnes et rapports directement depuis votre propre système, sans vous connecter à l’administration.
À quoi sert l’API ?
L’API relie directement le système du client, par exemple une boutique en ligne, un planificateur de campagnes publicitaires ou un catalogue interne, à la gestion des contenus des appareils. Votre système peut téléverser des médias, créer et lancer des campagnes et récupérer leurs résultats sans intervention manuelle dans l’administration.
L’interface est celle qu’utilise l’administration web. L’API permet donc les mêmes opérations, dans les limites des autorisations de l’utilisateur connecté.
Quand utiliser l’API ?
Pour téléverser occasionnellement quelques médias et lancer une campagne manuellement, préférez l’administration : l’assistant de campagne affiche un aperçu et vérifie les formats ainsi que la capacité des appareils. L’API devient utile lorsque le travail manuel vous ralentit.
| Votre besoin | Solution recommandée |
|---|---|
| Téléverser quelques médias et lancer une campagne | Administration |
| Mettre à jour régulièrement les contenus, manuellement | Administration |
| Téléverser des médias en masse depuis votre système | API |
| Créer automatiquement des campagnes depuis votre planificateur | API |
| Récupérer les résultats des campagnes dans vos rapports | API |
L’interface n’est pas versionnée et peut évoluer avec la plateforme. Prévenez votre fournisseur de logiciel avant de déployer une intégration et vérifiez son fonctionnement après les mises à jour du système.
Public visé et responsabilités
- Le fournisseur de la plateforme exploite l’interface, fournit l’adresse de l’administration et définit le mode de lecture de l’entreprise.
- Le client définit le périmètre de l’intégration et crée dans son entreprise un utilisateur dédié doté des autorisations nécessaires ; voir Créer un utilisateur et effectuer la première connexion.
- Le développeur de l’intégration connecte le système du client à l’interface. Les instructions techniques et exemples de code de ce guide s’adressent à ce développeur. Si vous développez vous-même l’intégration, vous assumez aussi ce rôle.
Référence technique
Guide technique pour les développeurs d’intégrations
Commencez par les conventions d’appel communes et la connexion. Suivez ensuite le parcours du téléversement d’un média au lancement d’une campagne, puis consultez les points de terminaison disponibles.
Conventions d’appel communes
- Adresse : l’interface utilise la même adresse que votre administration ; tous les chemins commencent par
/api/. Dans les exemples, l’adresse est remplacée parhttps://admin.example.org. Si un environnement de test est disponible, votre fournisseur vous en communiquera l’adresse. - Connexion : chaque requête transmet les identifiants via HTTP Basic Auth. Aucune session ni aucun jeton n’est utilisé.
- Format des données : les corps de requête et les réponses sont en JSON. Exception : lors du téléversement d’un fichier, le corps contient les données binaires brutes.
- Identifiants et valeurs : les identifiants sont des entiers. La date et l’heure utilisent le format
YYYY-MM-DDTHH:MM:SS, les durées d’affichage sont en millisecondes (10000= 10 s). - Résultat : la réussite est confirmée par le statut
200. Cela signifie que la requête a été acceptée, pas que le contenu est déjà diffusé sur les appareils.
Connexion
L’identifiant de connexion n’est pas une adresse e-mail, mais un code de huit caractères généré lors de la création de l’utilisateur, par exemple A1B2C3D4. Créez un utilisateur dédié avec les autorisations minimales nécessaires ; son accès pourra être révoqué à tout moment sans affecter les autres utilisateurs.
curl -u "A1B2C3D4:your-password" https://admin.example.org/api/public/loginLe mot de passe est transmis à chaque requête. Conservez-le comme un secret, par exemple dans une variable d’environnement ou un coffre-fort de mots de passe, jamais dans le code source, un dépôt ou les journaux.
Les exemples suivants supposent que ces variables sont définies :
export API="https://admin.example.org"
export AUTH="A1B2C3D4:votre-mot-de-passe"Les exemples utilisent curl car cet outil ne dépend d’aucun langage de programmation. L’interface repose sur HTTP et peut être appelée depuis tout langage ou outil prenant en charge Basic Auth, comme Python, JavaScript, PHP, Postman ou Make.
Parcours : du fichier à la campagne diffusée
- Obtenir l’identifiant de l’entreprise. Il sera utilisé dans tous les appels suivants.
- Téléverser un média. La réponse renvoie son identifiant.
- Charger un modèle de campagne. Le serveur le préremplit avec les paramètres de l’entreprise et la liste des sites et appareils.
- Modifier le modèle : nom, période, appareils ciblés et visuel.
- Créer la campagne. Elle est créée comme brouillon et n’est pas encore diffusée.
- Activer la campagne. Le système prépare un nouveau plan de lecture et l’envoie aux appareils.
- Suivre les résultats dans le rapport de campagne.
1. Identifiant de l’entreprise
curl -u "$AUTH" "$API/api/public/login"Réponse abrégée :
{
"id": 1715714421868,
"name": "Intégration – boutique en ligne",
"login": "A1B2C3D4",
"company": { "id": 1698234512001, "name": "Agence publicitaire SARL" },
"permission": {
"resource": 12,
"device_layer_top": 12,
"report_layer_top": 4
}
}Conservez la valeur de company.id; les exemples l’utilisent dans la variable COMPANY. La section permission énumère les autorisations de l’utilisateur ; leur signification est décrite dans Droits d’accès.
2. Téléversement d’un média
Le fichier est envoyé comme corps binaire de la requête avec PUT; ses propriétés sont indiquées dans les en-têtes.
curl -u "$AUTH" -X PUT \
"$API/api/resource/single/$COMPANY" \
-H "file-type: IMAGE" \
-H "file-mime: image/jpeg" \
-H "file-name: offre-ete.jpg" \
-H "file-suffix: jpg" \
--data-binary @offre-ete.jpg| En-tête | Contenu |
|---|---|
file-type | Type de média selon le tableau Types de médias, par exemple IMAGE. |
file-mime | Type MIME du fichier, par exemple image/jpeg, video/mp4 ou application/pdf. |
file-name | Nom du média affiché dans l’administration ; le serveur retire l’extension. Encodez en URL les noms contenant des caractères non ASCII (encodeURIComponent). |
file-suffix | Extension du fichier sans le point. |
Le même appel en Python :
import requests
with open("offre-ete.jpg", "rb") as f:
r = requests.put(
f"{API}/api/resource/single/{COMPANY}",
auth=("A1B2C3D4", "votre-mot-de-passe"),
headers={
"file-type": "IMAGE",
"file-mime": "image/jpeg",
"file-name": "offre-ete.jpg",
"file-suffix": "jpg",
},
data=f,
)
r.raise_for_status()
resource_id = r.json()["id"]La réponse contient l’identifiant du média (id) et son type (type) ; ces deux valeurs seront utilisées dans le visuel de campagne.
{
"id": 1724832015443,
"type": 2,
"name": "offre-ete",
"width": 1920,
"height": 1080,
"duration": 0,
"aspectRatio": 32
}- Taille : fichiers ordinaires jusqu’à environ 1,1 Go, vidéos avec transparence jusqu’à environ 2,1 Go. Le serveur rejette les fichiers plus volumineux avec
413. - Préparation vidéo : la vidéo est convertie en arrière-plan après le téléversement. Elle est prête dès que la fiche du média (
GET /api/resource/single/{companyId}/{id}) contient une valeur dansdt_ready. Les images sont prêtes presque immédiatement. - En-tête manquant : sans
file-mime,file-nameoufile-suffixle serveur renvoie204et ne crée pas le média. Vérifiez toujours que la réponse contientidavant de continuer.
3. Modèle de campagne
Ne construisez pas la campagne à la main. Demandez un modèle que le serveur préremplit avec une période par défaut d’un mois à partir d’aujourd’hui, les paramètres de l’entreprise et tous les sites et appareils. Chaque appareil y est marqué isActive: false.
curl -u "$AUTH" "$API/api/campaign/company/$COMPANY" > campaign.jsonExemple de modèle abrégé :
{
"id": -1,
"groupId": -1,
"state": 2,
"name": "",
"start": "2026-11-01T10:00:00",
"end": "2026-12-01T10:00:00",
"isCommercial": true,
"isNonCommercial": false,
"settings": {
"type": 2,
"companyCount": 10,
"companyDuration": 10000,
"campaignCount": 1,
"campaignDuration": 10000
},
"locations": [
{
"id": 1698234512100,
"name": "Centre commercial du centre-ville",
"days": [ { "day": 1, "start": "09:00", "end": "21:00" } ],
"devices": [
{
"id": 1698234512201,
"name": "Entrée A",
"screenRatio": 32,
"isHorizontal": true,
"isActive": false
}
]
}
],
"visuals": []
}La valeur de settings.type détermine le mode de lecture de l’entreprise: 2 = SLOT, 4 = IMPRESSION. Le fournisseur définit ce mode ; il ne peut pas être modifié via l’API.
4. Modification du modèle
name: nom de la campagne affiché dans l’administration et les rapports.start,end: début et fin de la campagne.isActive: définir surtruepour les appareils devant diffuser la campagne.visuals: ajouter un visuel contenant le média téléversé.
"visuals": [
{
"id": 1,
"name": "Visuel principal",
"isPrimary": true,
"isCustom": true,
"res": [
{
"id": 1,
"conditionId": 0,
"resourceId": 1724832015443,
"name": "offre-ete",
"duration": 10000,
"type": 2
}
]
}
]| Champ | Signification |
|---|---|
id | Nombre quelconque unique dans la campagne ; le serveur le renumérote à la création. |
isPrimary | true pour le visuel principal, false pour les autres. |
isCustom | true – le visuel appartient à cette campagne. |
resourceId | Identifiant du média obtenu à l’étape 2. |
duration | Durée d’affichage en millisecondes. |
type | Type de média ; même valeur que celle renvoyée par le téléversement dans type. |
Le modèle peut être modifié par un script, par exemple avec jq:
jq --argjson res "$RESOURCE" '
.name = "Offre estivale 2026"
| .start = "2026-11-02T00:00:00"
| .end = "2026-11-09T00:00:00"
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Visuel principal", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: "offre-ete", duration: 10000, type: 2 }]
}]
' campaign.json > campaign-edited.jsonSi la campagne cible des écrans en paysage et en portrait (isHorizontal), ajoutez un visuel par orientation. Sinon, le contenu sera recadré ou réduit sur certains écrans. Voir Visuels des campagnes pour en savoir plus.
5. Création de la campagne
curl -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @campaign-edited.json \
-o response.json
export CAMPAIGN=$(jq -r '.id' response.json)
export GROUP=$(jq -r '.groupId' response.json)La campagne est créée comme brouillon et n’est diffusée nulle part. La réponse contient la campagne enregistrée avec les valeurs attribuées de id et groupId. Le modèle contient déjà state: 2 (brouillon) ; le serveur rejette toute autre valeur avec 409.
6. Activation de la campagne
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"+01:00: fuseau horaire de la campagne sous forme de décalage UTC. Pour l’Europe centrale, utilisez+01:00en hiver et+02:00à l’heure d’été.0: nombre d’impressions attendu pour toute la campagne. S’applique en mode IMPRESSION ; en mode SLOT, utilisez0.
Une campagne commençant aujourd’hui ou avant devient active ; son début est fixé à l’instant d’activation. Une campagne commençant dans le futur devient publiée et démarre le jour prévu.
Le système recalcule ensuite le plan de lecture et l’envoie aux appareils concernés. Cela prend généralement quelques dizaines de secondes pour les appareils connectés ; un appareil déconnecté reçoit le plan au rétablissement de la connexion. Vérifiez la capacité dans l’administration ; voir Capacité des campagnes.
7. Résultats de la campagne
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP"
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP/impression"Les rapports utilisent groupId, et non l’identifiant de campagne id. Le premier point de terminaison renvoie le récapitulatif de la campagne, le second le nombre d’impressions enregistrées. Les appareils transmettent les données par lots en continu ; les chiffres ne sont donc pas disponibles en temps réel. Consultez Rapport de campagne pour comprendre les chiffres.
Mise en pause, arrêt et suppression
# Mettre en pause une campagne active ; un nouvel appel la reprend
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"
# Arrêter définitivement
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00"
# Supprimer
curl -u "$AUTH" -X DELETE \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN"Le point de terminaison de l’étape 6 fonctionne comme une bascule : il met en pause une campagne active ou publiée et reprend une campagne en pause. Vérifiez l’état actuel (state dans la fiche) avant l’appel. Une campagne arrêtée ne peut plus être relancée, mais reste dans la liste avec ses rapports. Une campagne supprimée disparaît de la liste.
Vue d’ensemble des points de terminaison
Les chemins sont relatifs à l’adresse de l’administration. {c} représente l’identifiant de l’entreprise.
Compte
| Méthode | Chemin | Objectif |
|---|---|---|
GET | /api/public/login | Vérifie les identifiants et renvoie le profil utilisateur, notamment company.id. |
GET | /api/user/info | Informations sur l’utilisateur connecté. |
GET | /api/user/check | Vérification rapide de la validité des identifiants. |
Médias
| Méthode | Chemin | Objectif |
|---|---|---|
PUT | /api/resource/single/{c} | Téléverse un fichier (file-* en-têtes, corps = données binaires). |
GET | /api/resource/listing/{c}/1 | Liste des médias ; 1 = aucune restriction de type. |
GET | /api/resource/single/{c}/{id} | Fiche du média. |
DELETE | /api/resource/single/{c}/{id} | Supprime un média. |
Campagnes
| Méthode | Chemin | Objectif |
|---|---|---|
GET | /api/campaign/company/{c} | Modèle d’une nouvelle campagne. |
POST | /api/campaign/company/{c} | Crée une campagne comme brouillon. |
PATCH | /api/campaign/company/{c} | Enregistre les modifications d’une campagne existante. |
POST | /api/campaign/listing/company/{c} | Liste des campagnes ; le corps de la requête contient un filtre. |
GET | /api/campaign/company/{c}/{id} | Fiche de la campagne. |
GET | /api/campaign/company/{c}/group/{groupId} | Fiche de la campagne par groupId. |
PATCH | /api/campaign/company/{c}/{id}/{tz}/{impressions} | Active, met en pause ou reprend une campagne. |
PATCH | /api/campaign/company/{c}/{id}/{tz} | Arrête définitivement une campagne. |
DELETE | /api/campaign/company/{c}/{id} | Supprime une campagne. |
Sites et appareils
| Méthode | Chemin | Objectif |
|---|---|---|
GET | /api/location/listing/{c} | Liste des sites. |
GET | /api/location/single/{id} | Fiche du site avec les horaires d’ouverture. |
GET | /api/device/listing/{c}/{locationId} | Liste des appareils d’un site. |
GET | /api/device/single/{id}/{lang} | Fiche de l’appareil ; lang est un code de langue, par exemple en. |
Rapports
| Méthode | Chemin | Objectif |
|---|---|---|
GET | /api/report/{c}/campaign/{groupId} | Récapitulatif de la campagne. |
GET | /api/report/{c}/campaign/{groupId}/impression | Nombre d’impressions enregistrées. |
Listes de valeurs
Les valeurs des listes sont représentées par des nombres en JSON.
État de la campagne (state)
| Valeur | État | Signification |
|---|---|---|
2 | Brouillon | Campagne enregistrée qui n’est pas diffusée. |
4 | Publiée | Campagne activée en attente de son jour de début. |
8 | Actives | La campagne est diffusée. |
16 | Terminée | La date de fin est passée. |
32 | Arrêtée | La campagne a été arrêtée définitivement. |
64 | Supprimée | La campagne a été supprimée. |
128 | En pause | La lecture est temporairement interrompue. |
Types de médias
type valeur | file-type en-tête | Médias |
|---|---|---|
2 | IMAGE | Image (JPG, PNG, WebP) |
4 | VIDEO | Vidéo |
8 | PDF | Document PDF |
16 | WWW_APP | Application web |
32 | TEXT | Texte long |
128 | VIDEO_ALPHA | Vidéo avec fond transparent |
256 | AUDIO | Audio |
Pour les documents, l’en-tête file-type utilise la valeur PDF, et non DOCUMENT.
Droits d’accès
L’interface applique les mêmes autorisations que l’administration et les vérifie à chaque requête. Dans la réponse de connexion, chaque domaine est exprimé par un nombre égal à la somme des droits individuels :
| Valeur | Droit dans votre entreprise |
|---|---|
4 | Consulter |
8 | Ajouter |
16 | Modifier |
32 | Supprimer |
Par exemple, resource: 28 (4 + 8 + 16) signifie que l’utilisateur peut consulter, ajouter et modifier des médias, mais pas les supprimer. Les valeurs plus élevées (128 sur 1024) représentent les mêmes droits en dehors de l’entreprise de l’utilisateur ; l’intégration n’en a pas besoin.
| Domaine | Minimum requis pour le parcours décrit |
|---|---|
resource – médias | 12 (consulter, ajouter) |
device_layer_top – campagnes | 12 (consulter, ajouter) |
report_layer_top – rapports de campagne | 4 (consulter) |
location – sites | 4 (consulter) |
device_info – appareils | 4 (consulter) |
L’activation, la mise en pause et l’arrêt d’une campagne nécessitent le droit Ajouter. Supprimer une campagne activée ou un média nécessite le droit Supprimer ; un brouillon peut être supprimé sans ce droit. Un bon point de départ est le rôle Gestionnaire publicitaire de l’entreprise, en retirant les droits inutiles.
Codes d’erreur
| Code | Signification | Action à effectuer |
|---|---|---|
400 | Requête incorrecte | Vérifiez les identifiants du chemin, le fuseau horaire et les données requises. |
401 | Autorisation manquante | L’utilisateur ne possède pas le droit requis ou l’accès à l’entreprise. Pour les campagnes, il s’agit le plus souvent du droit Ajouter. |
404 | Introuvable | L’enregistrement n’existe pas ou n’appartient pas à l’entreprise indiquée. |
406 | Non acceptable | Identifiants invalides, ou état de campagne ne permettant pas la transition demandée, par exemple une campagne arrêtée. |
409 | Conflit d’état | La campagne en cours de création n’est pas un brouillon. |
413 | Fichier trop volumineux | Réduisez la taille du fichier ; les limites figurent à l’étape 2. |
500 | Erreur du serveur | Réessayez plus tard ; si l’erreur persiste, contactez votre fournisseur. |
Testez d’abord l’intégration dans un environnement de test ou sur un appareil non visible du public : une campagne activée est réellement diffusée sur les appareils de production. Aucun contenu n’est diffusé hors des horaires d’ouverture, même pour une campagne prévue 24 h/24.
Conservez les identifiants des médias et campagnes (id, groupId) dans votre système ; l’interface ne permet pas de rechercher les campagnes par nom. Téléversez les médias un par un et ne demandez pas de rapports plus d’une fois toutes les quelques minutes. Utilisez uniquement les points de terminaison de ce guide.
Exemple complet
Le script exécute tout le parcours, du téléversement d’une image à l’activation d’une campagne sur tous les appareils de l’entreprise. Il nécessite curl et jq.
#!/usr/bin/env bash
set -euo pipefail
API="https://admin.example.org"
AUTH="${INTEGRATION_AUTH:?definir INTEGRATION_AUTH=identifiant:mot-de-passe}"
FILE="offre-ete.jpg"
NAME="Offre estivale 2026"
FROM="2026-11-02T00:00:00"
TO="2026-11-09T00:00:00"
TZ_OFFSET="+01:00"
# 1) Identifiant de l’entreprise
COMPANY=$(curl -sf -u "$AUTH" "$API/api/public/login" | jq -r '.company.id')
# 2) Téléverser le média
RESOURCE=$(curl -sf -u "$AUTH" -X PUT \
"$API/api/resource/single/$COMPANY" \
-H "file-type: IMAGE" \
-H "file-mime: image/jpeg" \
-H "file-name: $FILE" \
-H "file-suffix: jpg" \
--data-binary "@$FILE" | jq -r '.id')
# 3) Modèle de campagne
curl -sf -u "$AUTH" "$API/api/campaign/company/$COMPANY" > template.json
# 4) Modifier le modèle
jq --argjson res "$RESOURCE" --arg n "$NAME" --arg from "$FROM" --arg to "$TO" '
.name = $n
| .start = $from
| .end = $to
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Visuel principal", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: $n, duration: 10000, type: 2 }]
}]
' template.json > campaign.json
# 5) Créer un brouillon
RESPONSE=$(curl -sf -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @campaign.json)
CAMPAIGN=$(echo "$RESPONSE" | jq -r '.id')
GROUP=$(echo "$RESPONSE" | jq -r '.groupId')
# 6) Activer
curl -sf -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/$TZ_OFFSET/0" > /dev/null
echo "Campagne $CAMPAIGN activée, rapport : $API/api/report/$COMPANY/campaign/$GROUP"Rubriques associées et prochaines étapes
← Retour à la vue d’ensemble – Intégrations et création de contenus
Contactez votre fournisseur de logiciel.
