API pro propojení s vaším systémem
Úvod a orientace
Jak spravovat média, kampaně a reporty přímo z vašeho systému bez přihlašování do administrace.
K čemu API slouží
API umožňuje propojit systém zákazníka — například e-shop, plánovač reklamních kampaní nebo interní katalog — přímo se správou obsahu zařízení. Vlastní systém může nahrávat média, zakládat a spouštět kampaně a načítat jejich výsledky, aniž by se kdokoli musel přihlašovat do administrace a operace provádět ručně.
Rozhraní je stejné, jaké používá webová administrace. Přes API proto lze provádět stejné operace jako v administraci, ve stejném rozsahu oprávnění přihlášeného uživatele.
Kdy API použít
Pro občasné nahrání několika médií a ruční spuštění kampaně je vhodnější administrace: průvodce kampaní zobrazí náhled, zkontroluje formát médií a kapacitu zařízení. API má smysl ve chvíli, kdy ruční práce začne zdržovat.
| Potřebujete | Doporučený způsob |
|---|---|
| Nahrát několik médií a spustit kampaň | Administrace |
| Pravidelně, ale ručně obměňovat obsah | Administrace |
| Hromadně nahrávat média z vlastního systému | API |
| Zakládat kampaně automaticky podle vlastního plánovače | API |
| Přebírat výsledky kampaní do vlastního reportingu | API |
Rozhraní není verzované a jeho podoba se může s vývojem platformy měnit. Před nasazením integraci ohlaste svému poskytovateli softwaru a po aktualizacích systému ověřte její funkčnost.
Komu je návod určen a kdo co zajišťuje
- Poskytovatel platformy provozuje rozhraní, sděluje adresu administrace a nastavuje režim přehrávání Společnosti.
- Zákazník rozhoduje o rozsahu integrace a ve své Společnosti zakládá pro integraci samostatného uživatele s potřebnými oprávněními — viz Vytvoření uživatele.
- Vývojář integrace napojuje systém zákazníka na rozhraní. Technické pokyny a ukázky kódu v tomto návodu jsou určeny právě jemu. Pokud integraci vyvíjíte sami, tuto roli zastáváte vy.
Technická dokumentace
Technická část pro vývojáře integrace
Nejprve se seznamte se společnými pravidly volání a přihlášením. Poté projděte postup od nahrání média po spuštění kampaně a přehled dostupných adres.
Společná pravidla volání
- Adresa: rozhraní běží na stejné adrese jako vaše administrace; všechny cesty začínají
/api/. V ukázkách je adresa nahrazenahttps://admin.example.org. Testovací prostředí, pokud je k dispozici, vám sdělí poskytovatel. - Přihlášení: každý požadavek nese přihlašovací údaje metodou HTTP Basic Auth. Relace ani tokeny se nepoužívají.
- Formát dat: těla požadavků i odpovědi jsou ve formátu JSON. Výjimkou je nahrávání souboru, jehož tělo tvoří samotná binární data.
- Identifikátory a hodnoty: identifikátory jsou celá čísla. Datum a čas se zapisují ve tvaru
RRRR-MM-DDTHH:MM:SS, délky zobrazení v milisekundách (10000= 10 s). - Výsledek: úspěch potvrzuje kód
200. Ten znamená přijetí požadavku, nikoli okamžité přehrávání na zařízeních.
Přihlášení
Přihlašovacím jménem není e-mail, ale osmiznakový kód, který systém vygeneroval při založení uživatele, například A1B2C3D4. Pro integraci založte samostatného uživatele s minimálními nutnými oprávněními; jeho přístup pak lze kdykoli odebrat, aniž by se to dotklo ostatních uživatelů.
curl -u "A1B2C3D4:vase-heslo" https://admin.example.org/api/public/loginHeslo se odesílá s každým požadavkem. Uložte je jako tajný údaj, například v proměnné prostředí nebo trezoru hesel, nikdy ne do zdrojového kódu, repozitáře nebo logů.
Ukázky dále předpokládají nastavené proměnné:
export API="https://admin.example.org"
export AUTH="A1B2C3D4:vase-heslo"Ukázky používají nástroj curl, protože nezávisí na programovacím jazyce. Rozhraní je běžné HTTP, lze jej proto volat z libovolného jazyka nebo nástroje s podporou Basic Auth, například Python, JavaScript, PHP, Postman nebo Make.
Postup: od souboru ke spuštěné kampani
- Zjistěte identifikátor Společnosti. Použijete jej ve všech dalších voláních.
- Nahrajte médium. Odpověď vrátí jeho identifikátor.
- Načtěte šablonu kampaně. Server ji předvyplní nastavením Společnosti a seznamem lokalit a zařízení.
- Upravte šablonu — název, termín, cílová zařízení a vizuál.
- Založte kampaň. Vznikne jako koncept a zatím se nepřehrává.
- Aktivujte kampaň. Systém připraví nový plán přehrávání a odešle jej na zařízení.
- Sledujte výsledky v reportu kampaně.
1. Identifikátor Společnosti
curl -u "$AUTH" "$API/api/public/login"Odpověď (zkráceno):
{
"id": 1715714421868,
"name": "Integrace – e-shop",
"login": "A1B2C3D4",
"company": { "id": 1698234512001, "name": "Reklamní agentura s.r.o." },
"permission": {
"resource": 12,
"device_layer_top": 12,
"report_layer_top": 4
}
}Hodnotu company.id si uložte, v ukázkách jako proměnnou COMPANY. Sekce permission uvádí oprávnění uživatele; jejich význam popisuje část Oprávnění.
2. Nahrání média
Soubor se odesílá jako binární tělo požadavku metodou PUT; jeho vlastnosti určují hlavičky.
curl -u "$AUTH" -X PUT \
"$API/api/resource/single/$COMPANY" \
-H "file-type: IMAGE" \
-H "file-mime: image/jpeg" \
-H "file-name: letni-vyprodej.jpg" \
-H "file-suffix: jpg" \
--data-binary @letni-vyprodej.jpg| Hlavička | Obsah |
|---|---|
file-type | Druh média podle tabulky Typy médií, například IMAGE. |
file-mime | MIME typ souboru, například image/jpeg, video/mp4 nebo application/pdf. |
file-name | Název média v administraci; případnou příponu server odstraní. Název s diakritikou zakódujte jako URL (encodeURIComponent). |
file-suffix | Přípona souboru bez tečky. |
Stejné volání v jazyce Python:
import requests
with open("letni-vyprodej.jpg", "rb") as f:
r = requests.put(
f"{API}/api/resource/single/{COMPANY}",
auth=("A1B2C3D4", "vase-heslo"),
headers={
"file-type": "IMAGE",
"file-mime": "image/jpeg",
"file-name": "letni-vyprodej.jpg",
"file-suffix": "jpg",
},
data=f,
)
r.raise_for_status()
resource_id = r.json()["id"]Odpověď obsahuje identifikátor média (id) a jeho typ (type); obě hodnoty použijete ve vizuálu kampaně.
{
"id": 1724832015443,
"type": 2,
"name": "letni-vyprodej",
"width": 1920,
"height": 1080,
"duration": 0,
"aspectRatio": 32
}- Velikost: běžné soubory nejvýše přibližně 1,1 GB, video s průhledností přibližně 2,1 GB. Větší soubor server odmítne kódem
413. - Příprava videa: video se po nahrání konvertuje na pozadí. Připravené je, jakmile detail média (
GET /api/resource/single/{companyId}/{id}) obsahuje vyplněnou hodnotudt_ready. U obrázků je příprava prakticky okamžitá. - Chybějící hlavička: bez
file-mime,file-namenebofile-suffixserver vrátí204a médium nevytvoří. Před dalším krokem proto vždy ověřte, že odpověď obsahujeid.
3. Šablona kampaně
Kampaň neskládejte ručně. Vyžádejte si šablonu, kterou server předvyplní výchozím termínem (od dnešního dne na jeden měsíc), nastavením Společnosti a seznamem všech lokalit a zařízení. Každé zařízení je v ní označeno isActive: false.
curl -u "$AUTH" "$API/api/campaign/company/$COMPANY" > kampan.jsonUkázka šablony (zkráceno):
{
"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": "OC Centrum",
"days": [ { "day": 1, "start": "09:00", "end": "21:00" } ],
"devices": [
{
"id": 1698234512201,
"name": "Vchod A",
"screenRatio": 32,
"isHorizontal": true,
"isActive": false
}
]
}
],
"visuals": []
}Hodnota settings.type určuje režim přehrávání Společnosti: 2 = SLOT, 4 = IMPRESSION. Režim nastavuje poskytovatel a přes API jej změnit nelze.
4. Úprava šablony
name: název kampaně zobrazený v administraci a reportech.start,end: začátek a konec kampaně.isActive: nastavte natrueu zařízení, na kterých se má kampaň přehrávat.visuals: doplňte vizuál s nahraným médiem.
"visuals": [
{
"id": 1,
"name": "Hlavní vizuál",
"isPrimary": true,
"isCustom": true,
"res": [
{
"id": 1,
"conditionId": 0,
"resourceId": 1724832015443,
"name": "letni-vyprodej",
"duration": 10000,
"type": 2
}
]
}
]| Pole | Význam |
|---|---|
id | Libovolné číslo jedinečné v rámci kampaně; server jej při založení přečísluje. |
isPrimary | true u hlavního vizuálu, u ostatních false. |
isCustom | true – vizuál patří této kampani. |
resourceId | Identifikátor média z kroku 2. |
duration | Délka zobrazení v milisekundách. |
type | Typ média; stejná hodnota, jakou vrátilo nahrání v poli type. |
Úpravu lze provést skriptem, například nástrojem jq:
jq --argjson res "$RESOURCE" '
.name = "Letní výprodej 2026"
| .start = "2026-11-02T00:00:00"
| .end = "2026-11-09T00:00:00"
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Hlavní vizuál", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: "letni-vyprodej", duration: 10000, type: 2 }]
}]
' kampan.json > kampan-upravena.jsonPokud kampaň cílí na obrazovky na šířku i na výšku (isHorizontal), přidejte vizuál pro každou orientaci. Jinak se obsah na části obrazovek ořízne nebo zmenší. Podrobnosti popisuje návod Vizuály kampaně.
5. Založení kampaně
curl -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @kampan-upravena.json \
-o odpoved.json
export CAMPAIGN=$(jq -r '.id' odpoved.json)
export GROUP=$(jq -r '.groupId' odpoved.json)Kampaň vznikne ve stavu koncept a nikde se nepřehrává. Odpověď obsahuje uloženou kampaň s přidělenými hodnotami id a groupId. Šablona má stav state: 2 (koncept) nastaven správně; jinou hodnotu server odmítne kódem 409.
6. Aktivace kampaně
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"+01:00: časové pásmo jako posun proti UTC, podle kterého se kampaň řídí. Pro Českou republiku+01:00v zimním a+02:00v letním čase.0: očekávaný počet zobrazení za celou kampaň. Uplatní se v režimu IMPRESSION; v režimu SLOT uveďte0.
Kampaň s dnešním nebo dřívějším začátkem přejde do stavu aktivní a její začátek se nastaví na okamžik aktivace. Kampaň s budoucím začátkem přejde do stavu publikovaná a spustí se v naplánovaný den.
Systém poté přepočítá plán přehrávání a odešle jej na dotčená zařízení. U připojených zařízení to obvykle trvá desítky sekund; nepřipojené zařízení plán převezme po obnovení spojení. Kapacitu zařízení ověříte v administraci, viz Kapacita kampaní.
7. Výsledky kampaně
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP"
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP/impression"Reporty používají groupId, nikoli id kampaně. První adresa vrací souhrn kampaně, druhá počty zaznamenaných zobrazení. Zařízení odesílají záznamy průběžně v dávkách, údaje proto nejsou k dispozici v reálném čase. Význam údajů popisuje Report kampaně.
Pozastavení, ukončení a smazání
# pozastavení aktivní kampaně, opakované volání ji znovu spustí
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"
# trvalé ukončení
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00"
# smazání
curl -u "$AUTH" -X DELETE \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN"Adresa z kroku 6 funguje jako přepínač: aktivní nebo publikovanou kampaň pozastaví, pozastavenou znovu spustí. Před voláním proto ověřte aktuální stav kampaně (state v detailu). Ukončenou kampaň již znovu spustit nelze; zůstává však v seznamu i s reporty. Smazaná kampaň ze seznamu zmizí.
Přehled adres
Adresy jsou relativní k adrese administrace. {c} označuje identifikátor Společnosti.
Účet
| Metoda | Adresa | Co dělá |
|---|---|---|
GET | /api/public/login | Ověří přihlášení a vrátí profil uživatele včetně company.id. |
GET | /api/user/info | Informace o přihlášeném uživateli. |
GET | /api/user/check | Rychlé ověření platnosti přihlášení. |
Média
| Metoda | Adresa | Co dělá |
|---|---|---|
PUT | /api/resource/single/{c} | Nahraje soubor (hlavičky file-*, tělo = binární data). |
GET | /api/resource/listing/{c}/1 | Seznam médií; 1 = bez omezení typu. |
GET | /api/resource/single/{c}/{id} | Detail média. |
DELETE | /api/resource/single/{c}/{id} | Smaže médium. |
Kampaně
| Metoda | Adresa | Co dělá |
|---|---|---|
GET | /api/campaign/company/{c} | Šablona nové kampaně. |
POST | /api/campaign/company/{c} | Založí kampaň jako koncept. |
PATCH | /api/campaign/company/{c} | Uloží změny existující kampaně. |
POST | /api/campaign/listing/company/{c} | Seznam kampaní; tělo požadavku obsahuje filtr. |
GET | /api/campaign/company/{c}/{id} | Detail kampaně. |
GET | /api/campaign/company/{c}/group/{groupId} | Detail kampaně podle groupId. |
PATCH | /api/campaign/company/{c}/{id}/{tz}/{impressions} | Aktivuje, pozastaví nebo obnoví kampaň. |
PATCH | /api/campaign/company/{c}/{id}/{tz} | Trvale ukončí kampaň. |
DELETE | /api/campaign/company/{c}/{id} | Smaže kampaň. |
Lokality a zařízení
| Metoda | Adresa | Co dělá |
|---|---|---|
GET | /api/location/listing/{c} | Seznam lokalit. |
GET | /api/location/single/{id} | Detail lokality včetně otevírací doby. |
GET | /api/device/listing/{c}/{locationId} | Seznam zařízení v lokalitě. |
GET | /api/device/single/{id}/{lang} | Detail zařízení; lang je kód jazyka, například cs. |
Reporty
| Metoda | Adresa | Co dělá |
|---|---|---|
GET | /api/report/{c}/campaign/{groupId} | Souhrn kampaně. |
GET | /api/report/{c}/campaign/{groupId}/impression | Počty zaznamenaných zobrazení. |
Číselníky
Hodnoty číselníků se v JSON zapisují jako čísla.
Stav kampaně (state)
| Hodnota | Stav | Význam |
|---|---|---|
2 | Koncept | Uložená kampaň, která se nepřehrává. |
4 | Publikovaná | Aktivovaná kampaň čekající na den začátku. |
8 | Aktivní | Kampaň se přehrává. |
16 | Dokončená | Uplynul konec kampaně. |
32 | Ukončená | Kampaň byla trvale ukončena. |
64 | Smazaná | Kampaň byla smazána. |
128 | Pozastavená | Přehrávání je dočasně přerušeno. |
Typy médií
Hodnota type | Hlavička file-type | Médium |
|---|---|---|
2 | IMAGE | Obrázek (JPG, PNG, WebP) |
4 | VIDEO | Video |
8 | PDF | Dokument PDF |
16 | WWW_APP | Webová aplikace |
32 | TEXT | Dlouhý text |
128 | VIDEO_ALPHA | Video s průhledným pozadím |
256 | AUDIO | Zvuk |
Pro dokument se v hlavičce file-type používá hodnota PDF, nikoli DOCUMENT.
Oprávnění
Rozhraní uplatňuje stejná oprávnění jako administrace a kontroluje je u každého požadavku. V odpovědi přihlášení je každá oblast vyjádřena číslem, které je součtem dílčích práv:
| Hodnota | Právo ve vlastní Společnosti |
|---|---|
4 | Zobrazit |
8 | Přidat |
16 | Upravit |
32 | Vymazat |
Například resource: 28 (4 + 8 + 16) znamená, že uživatel smí média zobrazit, přidat a upravit, ale ne vymazat. Vyšší hodnoty (128 až 1024) označují stejná práva mimo vlastní Společnost; integrace je nepotřebuje.
| Oblast | Minimum pro popsaný postup |
|---|---|
resource – média | 12 (zobrazit, přidat) |
device_layer_top – kampaně | 12 (zobrazit, přidat) |
report_layer_top – reporty kampaní | 4 (zobrazit) |
location – lokality | 4 (zobrazit) |
device_info – zařízení | 4 (zobrazit) |
Aktivaci, pozastavení i ukončení kampaně umožňuje právo Přidat. Ke smazání aktivované kampaně nebo média je potřeba právo Vymazat; koncept kampaně lze smazat i bez něj. Výchozím bodem může být role Správce firemní reklamy, ze které odeberete nepotřebná práva.
Chybové kódy
| Kód | Význam | Doporučený postup |
|---|---|---|
400 | Chybný požadavek | Zkontrolujte identifikátory v adrese, časové pásmo a povinné údaje. |
401 | Chybí oprávnění | Uživatel nemá potřebné právo nebo přístup k dané Společnosti. U kampaní jde nejčastěji o chybějící právo Přidat. |
404 | Nenalezeno | Záznam neexistuje nebo nepatří do uvedené Společnosti. |
406 | Nelze provést | Chybné přihlašovací údaje, nebo kampaň je ve stavu, ze kterého požadovaný přechod není povolen (např. ukončená). |
409 | Konflikt stavu | Zakládaná kampaň nemá stav koncept. |
413 | Soubor je příliš velký | Zmenšete soubor; limity uvádí krok 2. |
500 | Chyba serveru | Opakujte požadavek později; při opakovaném výskytu kontaktujte poskytovatele. |
Integraci nejprve vyzkoušejte na testovacím prostředí nebo na zařízení, které nevidí veřejnost — aktivovaná kampaň se na produkčních zařízeních skutečně přehrává. Mimo otevírací dobu lokality se nepřehrává žádný obsah, ani u kampaně s nepřetržitým termínem.
Identifikátory médií a kampaní (id, groupId) si ukládejte ve vlastním systému; vyhledávání kampaně podle názvu rozhraní nenabízí. Média nahrávejte postupně a reporty nenačítejte častěji než jednou za několik minut. Opírejte se pouze o adresy uvedené v tomto návodu.
Kompletní příklad
Skript provede celý postup od nahrání obrázku po aktivaci kampaně na všech zařízeních Společnosti. Vyžaduje nástroje curl a jq.
#!/usr/bin/env bash
set -euo pipefail
API="https://admin.example.org"
AUTH="${INTEGRATION_AUTH:?nastavte INTEGRATION_AUTH=login:heslo}"
SOUBOR="letni-vyprodej.jpg"
NAZEV="Letní výprodej 2026"
OD="2026-11-02T00:00:00"
DO="2026-11-09T00:00:00"
TZ_OFFSET="+01:00"
# 1) identifikátor Společnosti
COMPANY=$(curl -sf -u "$AUTH" "$API/api/public/login" | jq -r '.company.id')
# 2) nahrání 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: $SOUBOR" \
-H "file-suffix: jpg" \
--data-binary "@$SOUBOR" | jq -r '.id')
# 3) šablona kampaně
curl -sf -u "$AUTH" "$API/api/campaign/company/$COMPANY" > sablona.json
# 4) úprava šablony
jq --argjson res "$RESOURCE" --arg n "$NAZEV" --arg from "$OD" --arg to "$DO" '
.name = $n
| .start = $from
| .end = $to
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Hlavní vizuál", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: $n, duration: 10000, type: 2 }]
}]
' sablona.json > kampan.json
# 5) založení konceptu
ODPOVED=$(curl -sf -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @kampan.json)
CAMPAIGN=$(echo "$ODPOVED" | jq -r '.id')
GROUP=$(echo "$ODPOVED" | jq -r '.groupId')
# 6) aktivace
curl -sf -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/$TZ_OFFSET/0" > /dev/null
echo "Kampaň $CAMPAIGN aktivována, report: $API/api/report/$COMPANY/campaign/$GROUP"Související témata a další kroky
← Zpět na přehled – Integrace a tvorba obsahu
Obraťte se na svého poskytovatele softwaru.
