API na prepojenie s vaším systémom
Úvod a orientácia
Ako spravovať médiá, kampane a reporty priamo z vášho systému bez prihlasovania do administrácie.
Na čo API slúži
API umožňuje prepojiť systém zákazníka — napríklad e-shop, plánovač reklamných kampaní alebo interný katalóg — priamo so správou obsahu zariadení. Vlastný systém môže nahrávať médiá, zakladať a spúšťať kampane a načítavať ich výsledky bez toho, aby sa ktokoľvek musel prihlasovať do administrácie a vykonávať operácie ručne.
Rozhranie je rovnaké, aké používa webová administrácia. Cez API preto možno vykonávať rovnaké operácie ako v administrácii, v rovnakom rozsahu oprávnení prihláseného používateľa.
Kedy API použiť
Na občasné nahranie niekoľkých médií a ručné spustenie kampane je vhodnejšia administrácia: sprievodca kampaňou zobrazí náhľad, skontroluje formát médií a kapacitu zariadení. API má zmysel vo chvíli, keď ručná práca začne zdržiavať.
| Potrebujete | Odporúčaný spôsob |
|---|---|
| Nahrať niekoľko médií a spustiť kampaň | Administrácia |
| Pravidelne, ale ručne obmieňať obsah | Administrácia |
| Hromadne nahrávať médiá z vlastného systému | API |
| Zakladať kampane automaticky podľa vlastného plánovača | API |
| Preberať výsledky kampaní do vlastného reportingu | API |
Rozhranie nie je verzované a jeho podoba sa môže s vývojom platformy meniť. Pred nasadením integráciu ohláste svojmu poskytovateľovi softvéru a po aktualizáciách systému overte jej funkčnosť.
Komu je návod určený a kto čo zabezpečuje
- Poskytovateľ platformy prevádzkuje rozhranie, oznamuje adresu administrácie a nastavuje režim prehrávania Spoločnosti.
- Zákazník rozhoduje o rozsahu integrácie a vo svojej Spoločnosti zakladá pre integráciu samostatného používateľa s potrebnými oprávneniami — pozri Vytvorenie používateľa a prvé prihlásenie.
- Vývojár integrácie napája systém zákazníka na rozhranie. Technické pokyny a ukážky kódu v tomto návode sú určené práve jemu. Ak integráciu vyvíjate sami, túto rolu zastávate vy.
Technická dokumentácia
Technická časť pre vývojárov integrácie
Najprv sa oboznámte so spoločnými pravidlami volania a prihlásením. Potom prejdite postup od nahrania média po spustenie kampane a prehľad dostupných adries.
Spoločné pravidlá volania
- Adresa: rozhranie beží na rovnakej adrese ako vaša administrácia; všetky cesty začínajú
/api/. V ukážkach je adresa nahradenáhttps://admin.example.org. Testovacie prostredie, ak je k dispozícii, vám oznámi poskytovateľ. - Prihlásenie: každá požiadavka nesie prihlasovacie údaje metódou HTTP Basic Auth. Relácie ani tokeny sa nepoužívajú.
- Formát dát: telá požiadaviek aj odpovede sú vo formáte JSON. Výnimkou je nahrávanie súboru, ktorého telo tvoria samotné binárne dáta.
- Identifikátory a hodnoty: identifikátory sú celé čísla. Dátum a čas sa zapisujú v tvare
RRRR-MM-DDTHH:MM:SS, dĺžky zobrazenia v milisekundách (10000= 10 s). - Výsledok: úspech potvrdzuje kód
200. Znamená prijatie požiadavky, nie okamžité prehrávanie na zariadeniach.
Prihlásenie
Prihlasovacím menom nie je e-mail, ale osemznakový kód, ktorý systém vygeneroval pri založení používateľa, napríklad A1B2C3D4. Pre integráciu založte samostatného používateľa s minimálnymi nevyhnutnými oprávneniami; jeho prístup potom možno kedykoľvek odobrať bez vplyvu na ostatných používateľov.
curl -u "A1B2C3D4:vase-heslo" https://admin.example.org/api/public/loginHeslo sa odosiela s každou požiadavkou. Uložte ho ako tajný údaj, napríklad v premennej prostredia alebo v trezore hesiel, nikdy nie do zdrojového kódu, repozitára alebo logov.
Ukážky ďalej predpokladajú nastavené premenné:
export API="https://admin.example.org"
export AUTH="A1B2C3D4:vase-heslo"Ukážky používajú nástroj curl, pretože nezávisí od programovacieho jazyka. Rozhranie je bežné HTTP, preto ho možno volať z ľubovoľného jazyka alebo nástroja s podporou Basic Auth, napríklad Python, JavaScript, PHP, Postman alebo Make.
Postup: od súboru k spustenej kampani
- Zistite identifikátor Spoločnosti. Použijete ho vo všetkých ďalších volaniach.
- Nahrajte médium. Odpoveď vráti jeho identifikátor.
- Načítajte šablónu kampane. Server ju predvyplní nastavením Spoločnosti a zoznamom lokalít a zariadení.
- Upravte šablónu — názov, termín, cieľové zariadenia a vizuál.
- Založte kampaň. Vznikne ako koncept a zatiaľ sa neprehráva.
- Aktivujte kampaň. Systém pripraví nový plán prehrávania a odošle ho do zariadení.
- Sledujte výsledky v reporte kampane.
1. Identifikátor Spoločnosti
curl -u "$AUTH" "$API/api/public/login"Odpoveď (skrátené):
{
"id": 1715714421868,
"name": "Integrácia – e-shop",
"login": "A1B2C3D4",
"company": { "id": 1698234512001, "name": "Reklamná agentúra s.r.o." },
"permission": {
"resource": 12,
"device_layer_top": 12,
"report_layer_top": 4
}
}Hodnotu company.id si uložte, v ukážkach ako premennú COMPANY. Sekcia permission uvádza oprávnenia používateľa; ich význam opisuje časť Oprávnenia.
2. Nahranie média
Súbor sa odosiela ako binárne telo požiadavky metódou 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: letny-vypredaj.jpg" \
-H "file-suffix: jpg" \
--data-binary @letny-vypredaj.jpg| Hlavička | Obsah |
|---|---|
file-type | Druh média podľa tabuľky Typy médií, napríklad IMAGE. |
file-mime | MIME typ súboru, napríklad image/jpeg, video/mp4 alebo application/pdf. |
file-name | Názov média v administrácii; prípadnú príponu server odstráni. Názov s diakritikou zakódujte ako URL (encodeURIComponent). |
file-suffix | Prípona súboru bez bodky. |
Rovnaké volanie v jazyku Python:
import requests
with open("letny-vypredaj.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": "letny-vypredaj.jpg",
"file-suffix": "jpg",
},
data=f,
)
r.raise_for_status()
resource_id = r.json()["id"]Odpoveď obsahuje identifikátor média (id) a jeho typ (type); obe hodnoty použijete vo vizuáli kampane.
{
"id": 1724832015443,
"type": 2,
"name": "letny-vypredaj",
"width": 1920,
"height": 1080,
"duration": 0,
"aspectRatio": 32
}- Veľkosť: bežné súbory najviac približne 1,1 GB, video s priehľadnosťou približne 2,1 GB. Väčší súbor server odmietne kódom
413. - Príprava videa: video sa po nahraní konvertuje na pozadí. Pripravené je, keď detail média (
GET /api/resource/single/{companyId}/{id}) obsahuje vyplnenú hodnotudt_ready. Pri obrázkoch je príprava prakticky okamžitá. - Chýbajúca hlavička: bez
file-mime,file-namealebofile-suffixserver vráti204a médium nevytvorí. Pred ďalším krokom preto vždy overte, že odpoveď obsahujeid.
3. Šablóna kampane
Kampaň neskladajte ručne. Vyžiadajte si šablónu, ktorú server predvyplní predvoleným termínom (od dnešného dňa na jeden mesiac), nastavením Spoločnosti a zoznamom všetkých lokalít a zariadení. Každé zariadenie je v nej označené isActive: false.
curl -u "$AUTH" "$API/api/campaign/company/$COMPANY" > kampan.jsonUkážka šablóny (skrátené):
{
"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 prehrávania Spoločnosti: 2 = SLOT, 4 = IMPRESSION. Režim nastavuje poskytovateľ a cez API ho zmeniť nemožno.
4. Úprava šablóny
name: názov kampane zobrazený v administrácii a reportoch.start,end: začiatok a koniec kampane.isActive: nastavte natruepri zariadeniach, na ktorých sa má kampaň prehrávať.visuals: doplňte vizuál s nahraným médiom.
"visuals": [
{
"id": 1,
"name": "Hlavný vizuál",
"isPrimary": true,
"isCustom": true,
"res": [
{
"id": 1,
"conditionId": 0,
"resourceId": 1724832015443,
"name": "letny-vypredaj",
"duration": 10000,
"type": 2
}
]
}
]| Pole | Význam |
|---|---|
id | Ľubovoľné číslo jedinečné v rámci kampane; server ho pri založení prečísluje. |
isPrimary | true pri hlavnom vizuáli, pri ostatných false. |
isCustom | true – vizuál patrí tejto kampani. |
resourceId | Identifikátor média z kroku 2. |
duration | Dĺžka zobrazenia v milisekundách. |
type | Typ média; rovnaká hodnota, akú vrátilo nahranie v poli type. |
Úpravu možno vykonať skriptom, napríklad nástrojom jq:
jq --argjson res "$RESOURCE" '
.name = "Letný výpredaj 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: "letny-vypredaj", duration: 10000, type: 2 }]
}]
' kampan.json > kampan-upravena.jsonAk kampaň cieli na obrazovky na šírku aj na výšku (isHorizontal), pridajte vizuál pre každú orientáciu. Inak sa obsah na časti obrazoviek oreže alebo zmenší. Podrobnosti opisuje návod Vizuály kampane.
5. Založenie kampane
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 v stave koncept a nikde sa neprehráva. Odpoveď obsahuje uloženú kampaň s pridelenými hodnotami id a groupId. Šablóna má stav state: 2 (koncept) nastavený správne; inú hodnotu server odmietne kódom 409.
6. Aktivácia kampane
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"+01:00: časové pásmo ako posun voči UTC, podľa ktorého sa kampaň riadi. Pre Slovensko+01:00v zimnom a+02:00v letnom čase.0: očakávaný počet zobrazení za celú kampaň. Uplatní sa v režime IMPRESSION; v režime SLOT uveďte0.
Kampaň s dnešným alebo skorším začiatkom prejde do stavu aktívna a jej začiatok sa nastaví na okamih aktivácie. Kampaň s budúcim začiatkom prejde do stavu publikovaná a spustí sa v naplánovaný deň.
Systém potom prepočíta plán prehrávania a odošle ho do dotknutých zariadení. Pri pripojených zariadeniach to zvyčajne trvá desiatky sekúnd; nepripojené zariadenie plán prevezme po obnovení spojenia. Kapacitu zariadení overíte v administrácii, pozri Kapacita kampane.
7. Výsledky kampane
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP"
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP/impression"Reporty používajú groupId, nie id kampane. Prvá adresa vracia súhrn kampane, druhá počty zaznamenaných zobrazení. Zariadenia odosielajú záznamy priebežne v dávkach, údaje preto nie sú k dispozícii v reálnom čase. Význam údajov opisuje Report kampane.
Pozastavenie, ukončenie a vymazanie
# pozastavenie aktívnej kampane, opakované volanie ju znova spustí
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"
# trvalé ukončenie
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00"
# vymazanie
curl -u "$AUTH" -X DELETE \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN"Adresa z kroku 6 funguje ako prepínač: aktívnu alebo publikovanú kampaň pozastaví, pozastavenú znova spustí. Pred volaním preto overte aktuálny stav kampane (state v detaile). Ukončenú kampaň už znova spustiť nemožno; zostáva však v zozname aj s reportmi. Vymazaná kampaň zo zoznamu zmizne.
Prehľad adries
Adresy sú relatívne k adrese administrácie. {c} označuje identifikátor Spoločnosti.
Účet
| Metóda | Adresa | Čo robí |
|---|---|---|
GET | /api/public/login | Overí prihlásenie a vráti profil používateľa vrátane company.id. |
GET | /api/user/info | Informácie o prihlásenom používateľovi. |
GET | /api/user/check | Rýchle overenie platnosti prihlásenia. |
Médiá
| Metóda | Adresa | Čo robí |
|---|---|---|
PUT | /api/resource/single/{c} | Nahrá súbor (hlavičky file-*, telo = binárne dáta). |
GET | /api/resource/listing/{c}/1 | Zoznam médií; 1 = bez obmedzenia typu. |
GET | /api/resource/single/{c}/{id} | Detail média. |
DELETE | /api/resource/single/{c}/{id} | Vymaže médium. |
Kampane
| Metóda | Adresa | Čo robí |
|---|---|---|
GET | /api/campaign/company/{c} | Šablóna novej kampane. |
POST | /api/campaign/company/{c} | Založí kampaň ako koncept. |
PATCH | /api/campaign/company/{c} | Uloží zmeny existujúcej kampane. |
POST | /api/campaign/listing/company/{c} | Zoznam kampaní; telo požiadavky obsahuje filter. |
GET | /api/campaign/company/{c}/{id} | Detail kampane. |
GET | /api/campaign/company/{c}/group/{groupId} | Detail kampane podľa groupId. |
PATCH | /api/campaign/company/{c}/{id}/{tz}/{impressions} | Aktivuje, pozastaví alebo obnoví kampaň. |
PATCH | /api/campaign/company/{c}/{id}/{tz} | Natrvalo ukončí kampaň. |
DELETE | /api/campaign/company/{c}/{id} | Vymaže kampaň. |
Lokality a zariadenia
| Metóda | Adresa | Čo robí |
|---|---|---|
GET | /api/location/listing/{c} | Zoznam lokalít. |
GET | /api/location/single/{id} | Detail lokality vrátane otváracích hodín. |
GET | /api/device/listing/{c}/{locationId} | Zoznam zariadení v lokalite. |
GET | /api/device/single/{id}/{lang} | Detail zariadenia; lang je kód jazyka, napríklad sk. |
Reporty
| Metóda | Adresa | Čo robí |
|---|---|---|
GET | /api/report/{c}/campaign/{groupId} | Súhrn kampane. |
GET | /api/report/{c}/campaign/{groupId}/impression | Počty zaznamenaných zobrazení. |
Číselníky
Hodnoty číselníkov sa v JSON zapisujú ako čísla.
Stav kampane (state)
| Hodnota | Stav | Význam |
|---|---|---|
2 | Koncept | Uložená kampaň, ktorá sa neprehráva. |
4 | Publikovaná | Aktivovaná kampaň čakajúca na deň začiatku. |
8 | Aktívna | Kampaň sa prehráva. |
16 | Dokončená | Uplynul koniec kampane. |
32 | Ukončená | Kampaň bola natrvalo ukončená. |
64 | Vymazaná | Kampaň bola vymazaná. |
128 | Pozastavená | Prehrávanie je dočasne prerušené. |
Typy médií
Hodnota type | Hlavička file-type | Médium |
|---|---|---|
2 | IMAGE | Obrázok (JPG, PNG, WebP) |
4 | VIDEO | Video |
8 | PDF | Dokument PDF |
16 | WWW_APP | Webová aplikácia |
32 | TEXT | Dlhý text |
128 | VIDEO_ALPHA | Video s priehľadným pozadím |
256 | AUDIO | Zvuk |
Pre dokument sa v hlavičke file-type používa hodnota PDF, nie DOCUMENT.
Oprávnenia
Rozhranie uplatňuje rovnaké oprávnenia ako administrácia a kontroluje ich pri každej požiadavke. V odpovedi prihlásenia je každá oblasť vyjadrená číslom, ktoré je súčtom čiastkových práv:
| Hodnota | Právo vo vlastnej Spoločnosti |
|---|---|
4 | Zobraziť |
8 | Pridať |
16 | Upraviť |
32 | Vymazať |
Napríklad resource: 28 (4 + 8 + 16) znamená, že používateľ smie médiá zobraziť, pridať a upraviť, ale nie vymazať. Vyššie hodnoty (128 až 1024) označujú rovnaké práva mimo vlastnej Spoločnosti; integrácia ich nepotrebuje.
| Oblasť | Minimum pre opísaný postup |
|---|---|
resource – médiá | 12 (zobraziť, pridať) |
device_layer_top – kampane | 12 (zobraziť, pridať) |
report_layer_top – reporty kampaní | 4 (zobraziť) |
location – lokality | 4 (zobraziť) |
device_info – zariadenia | 4 (zobraziť) |
Aktiváciu, pozastavenie aj ukončenie kampane umožňuje právo Pridať. Na vymazanie aktivovanej kampane alebo média je potrebné právo Vymazať; koncept kampane možno vymazať aj bez neho. Východiskom môže byť rola Správca firemnej reklamy, z ktorej odoberiete nepotrebné práva.
Chybové kódy
| Kód | Význam | Odporúčaný postup |
|---|---|---|
400 | Chybná požiadavka | Skontrolujte identifikátory v adrese, časové pásmo a povinné údaje. |
401 | Chýba oprávnenie | Používateľ nemá potrebné právo alebo prístup k danej Spoločnosti. Pri kampaniach ide najčastejšie o chýbajúce právo Pridať. |
404 | Nenájdené | Záznam neexistuje alebo nepatrí do uvedenej Spoločnosti. |
406 | Nemožno vykonať | Chybné prihlasovacie údaje alebo je kampaň v stave, z ktorého požadovaný prechod nie je povolený (napr. ukončená). |
409 | Konflikt stavu | Zakladaná kampaň nemá stav koncept. |
413 | Súbor je príliš veľký | Zmenšite súbor; limity uvádza krok 2. |
500 | Chyba servera | Zopakujte požiadavku neskôr; pri opakovanom výskyte kontaktujte poskytovateľa. |
Integráciu najprv vyskúšajte na testovacom prostredí alebo na zariadení, ktoré nevidí verejnosť — aktivovaná kampaň sa na produkčných zariadeniach skutočne prehráva. Mimo otváracích hodín lokality sa neprehráva žiadny obsah, ani pri kampani s nepretržitým termínom.
Identifikátory médií a kampaní (id, groupId) si ukladajte vo vlastnom systéme; vyhľadávanie kampane podľa názvu rozhranie neponúka. Médiá nahrávajte postupne a reporty nenačítavajte častejšie ako raz za niekoľko minút. Opierajte sa len o adresy uvedené v tomto návode.
Kompletný príklad
Skript vykoná celý postup od nahrania obrázka po aktiváciu kampane na všetkých zariadeniach Spoloč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}"
SUBOR="letny-vypredaj.jpg"
NAZOV="Letný výpredaj 2026"
OD="2026-11-02T00:00:00"
DO="2026-11-09T00:00:00"
TZ_OFFSET="+01:00"
# 1) identifikátor Spoločnosti
COMPANY=$(curl -sf -u "$AUTH" "$API/api/public/login" | jq -r '.company.id')
# 2) nahranie 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: $SUBOR" \
-H "file-suffix: jpg" \
--data-binary "@$SUBOR" | jq -r '.id')
# 3) šablóna kampane
curl -sf -u "$AUTH" "$API/api/campaign/company/$COMPANY" > sablona.json
# 4) úprava šablóny
jq --argjson res "$RESOURCE" --arg n "$NAZOV" --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ženie 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) aktivácia
curl -sf -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/$TZ_OFFSET/0" > /dev/null
echo "Kampaň $CAMPAIGN aktivovaná, report: $API/api/report/$COMPANY/campaign/$GROUP"Súvisiace témy a ďalšie kroky
← Späť na prehľad – Integrácie a tvorba obsahu
Obráťte sa na svojho poskytovateľa softvéru.
