REST API
EOS Hub má REST API pre integrácie -- automatizačné nástroje ako n8n alebo Zapier, skripty na reporty, tabuľky alebo vlastné aplikácie. Vracia tie isté dáta, aké vidíte vo webovej aplikácii, vo formáte JSON.
Rozsah
Všetko, čo môžete robiť vo webovej aplikácii, je dostupné aj cez API:
- Dáta tímu -- čítanie aj zápis úloh, problémov, Rocks s ich míľnikmi, ukazovateľov Scorecardu s ich týždennými hodnotami, stretnutí s hodnoteniami, segue, novinkami (headlines) a kaskádovými správami, V/TO, hodnotení ľudí a odkazov v dokumentoch (organizačná štruktúra je len na čítanie) -- pozri Endpointy a Zápis dát.
- Správa organizácie a tímov -- nastavenia organizácie, jej členovia, tímy a členovia tímov -- pozri Správa organizácie.
- Správa platformy -- organizácie, kontá, API kľúče používateľov a nastavenia AI pre prevádzkovateľa platformy -- pozri Správa platformy.
Jedinou výnimkou je správa vašich vlastných API kľúčov: tie vytvárate a odvolávate len v prihlásenej webovej aplikácii (pozri API kľúče).
| Základná URL | https://<vas-server>/api/v1 |
| Interaktívna referencia | https://<vas-server>/api/v1/docs -- prehľad všetkých endpointov s možnosťou vyskúšať volania s vlastným kľúčom |
| OpenAPI špecifikácia | https://<vas-server>/api/v1/openapi.json (OpenAPI 3.1) -- pre generátory kódu a API klientov |
| Autentifikácia | Authorization: Bearer ak_… (osobný API kľúč) |
| Formát | JSON, názvy polí v tvare camelCase |
<vas-server> je adresa vašej inštalácie EOS Hub -- tá istá, ktorú otvárate v prehliadači.
Autentifikácia a API kľúče
Každá požiadavka potrebuje osobný API kľúč v hlavičke Authorization:
Authorization: Bearer ak_k3m7q2xa_Vq0…Kľúče vytvoríte vo webovej aplikácii v Nastavenia > API kľúče -- podrobný postup nájdete na stránke API kľúče. Stručne:
- Celý kľúč sa zobrazí iba raz, hneď po vytvorení. EOS Hub si ukladá len jeho odtlačok (hash), takže stratený kľúč sa nedá obnoviť -- odvolajte ho a vytvorte nový.
- Prijímajú sa iba API kľúče. Prihlásenie v prehliadači pre
/api/v1nefunguje a kľúče sa dajú vytvoriť alebo odvolať len v prihlásenej webovej aplikácii, nikdy cez API. - Na chýbajúci, chybný, expirovaný alebo odvolaný kľúč API odpovie
401 unauthenticated. - AI asistenti sa namiesto toho pripájajú cez MCP server. Ich OAuth tokeny fungujú len tam, nikdy na
/api/v1.
Kľúč koná vo vašom mene
Kľúč nemá vlastné oprávnenia. Koná v mene svojho vlastníka s jeho aktuálnymi rolami v organizáciách a tímoch, ktoré sa overujú pri každej požiadavke:
- API vráti presne to, čo by ste videli vo webovej aplikácii -- Člen organizácie len svoje tímy, Vlastníci, Administrátori a Implementátori všetky tímy organizácie.
- Ak vás odoberú z organizácie alebo tímu, vaše kľúče k nim okamžite stratia prístup.
- V pozastavenej organizácii môžu kľúče naďalej čítať, ale každú zmenu API odmietne s
409 orgSuspended. - Ani kľúče prevádzkovateľa platformy nemajú automatický prístup k údajom zákazníkov -- rovnako ako vo webovej aplikácii vidí organizáciu len vtedy, ak je jej členom.
Rozsahy (scopes)
Rozsahy kľúča obmedzujú, čo smie robiť, nad rámec vašich rolí:
| Rozsah | Povoľuje | Kto ho môže vytvoriť |
|---|---|---|
read | Čítanie všetkého, čo vaše roly dovoľujú | Každý (Len čítanie v dialógu vytvorenia) |
write | Vytváranie a úpravu dát podľa vašich rolí; zahŕňa aj read | Každý (Čítanie a zápis) |
platform | Správu platformy | Len prevádzkovatelia platformy (SUPERADMIN); platnosť najviac 90 dní |
Ak kľúču chýba potrebný rozsah, API odpovie 403 insufficientScope. Kľúč s rozsahom platform prestane pre správu platformy fungovať, keď jeho vlastník prestane byť prevádzkovateľom platformy. Čítanie potrebuje read; vytváranie, zmeny a mazanie dát potrebujú write (kľúč Čítanie a zápis).
Prvé volania
Kľúč si uložte do premennej prostredia namiesto toho, aby ste ho písali do každého príkazu. read -s kľúč nezobrazí a neuloží ho do histórie príkazov:
read -rsp "API kľúč: " EOSHUB_KEY && export EOSHUB_KEY # vložte kľúč a stlačte Enter
export BASE="https://<vas-server>/api/v1"1. Kto som? GET /me vráti vaše konto, vaše organizácie s vašou rolou v každej z nich a rozsahy použitého kľúča:
curl -s -H "Authorization: Bearer $EOSHUB_KEY" "$BASE/me"{
"user": { "id": "cmg4x…", "email": "jana@acme.com", "name": "Jana Nováková", "timezone": null },
"orgs": [{ "id": "cmg1a…", "name": "Acme Corp", "status": "ACTIVE", "role": "OWNER" }],
"scopes": ["read"],
"key": { "id": "cmg9k…", "name": "n8n reporty", "expiresAt": "2027-01-04T09:12:44.000Z" }
}2. Tímy organizácie. Z odpovede si vezmite id organizácie:
curl -s -H "Authorization: Bearer $EOSHUB_KEY" "$BASE/orgs/cmg1a…/teams"{
"data": [
{ "id": "cmg2b…", "name": "Vedenie", "slug": "vedenie", "isLeadership": true },
{ "id": "cmg2c…", "name": "Marketing", "slug": "marketing", "isLeadership": false }
],
"nextCursor": null
}3. Otvorené úlohy tímu. Úlohy (To-Dos) sa v API volajú tasks:
curl -s -H "Authorization: Bearer $EOSHUB_KEY" "$BASE/teams/cmg2b…/tasks?completed=false"{
"data": [
{
"id": "cmg7t…",
"teamId": "cmg2b…",
"title": "Poslať cenovú ponuku na Q3",
"ownerId": "cmg4x…",
"dueDate": "2026-10-13",
"completed": false,
"completedAt": null,
"meetingId": "cmg6m…",
"createdAt": "2026-10-06T08:41:02.000Z"
}
],
"nextCursor": null
}TIP
Interaktívna referencia ukazuje úplnú schému odpovede každého endpointu. Keď v nej zadáte svoj kľúč, môžete volania skúšať priamo v prehliadači.
Stránkovanie
Zoznamy sa vracajú po stránkach:
{ "data": [ … ], "nextCursor": "eyJrIjoiMjAyNi0xMC0wNlQwODo0MTowMi4wMDBaIiwiaWQiOiJjbWc3dCJ9" }| Parameter | Popis |
|---|---|
limit | Veľkosť stránky, 1--200 (predvolene 50) |
cursor | Hodnota nextCursor z predchádzajúcej stránky; pri prvej stránke ho vynechajte |
Keď je nextCursor rovný null, ste na poslednej stránke.
API používa stránkovanie kurzorom: kurzor označuje poslednú položku, ktorú ste dostali, a ďalšia stránka pokračuje hneď za ňou. Na rozdiel od čísel stránok zostáva stabilné, aj keď počas prechádzania niekto položky pridáva alebo maže -- nedostanete duplicity ani nevynecháte položky. Na druhej strane nemôžete skočiť priamo na N-tú stránku; stránky prechádzate postupne. Kurzor berte ako nepriehľadný reťazec a pri všetkých stránkach používajte rovnaké filtre.
Niekoľko malých zoznamov -- organizácie, tímy organizácie, ukazovatele Scorecardu a na platforme API kľúče používateľa -- vždy vráti všetko naraz s nextCursor: null.
Načítanie všetkých stránok:
cursor=""
while :; do
page=$(curl -s -H "Authorization: Bearer $EOSHUB_KEY" \
"$BASE/teams/$TEAM_ID/tasks?limit=200${cursor:+&cursor=$cursor}")
echo "$page" | jq -r '.data[] | "\(.dueDate) \(.title)"'
cursor=$(echo "$page" | jq -r '.nextCursor // empty')
[ -z "$cursor" ] && break
doneconst BASE = "https://<vas-server>/api/v1"
async function* listAll(path, params = {}) {
let cursor = null
do {
const url = new URL(BASE + path)
for (const [k, v] of Object.entries({ ...params, limit: 200 })) url.searchParams.set(k, v)
if (cursor) url.searchParams.set("cursor", cursor)
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.EOSHUB_KEY}` } })
const body = await res.json()
if (!res.ok) throw new Error(`${res.status} ${body.error.code}: ${body.error.message}`)
yield* body.data
cursor = body.nextCursor
} while (cursor)
}
for await (const task of listAll(`/teams/${teamId}/tasks`, { completed: "false" })) {
console.log(task.dueDate, task.title)
}Chyby
Chyby používajú štandardné HTTP stavové kódy a JSON telo so strojovo čitateľným code. Texty message sú vždy v angličtine:
{
"error": {
"code": "invalid",
"message": "The request is invalid",
"issues": [
{
"origin": "number",
"code": "too_big",
"maximum": 200,
"inclusive": true,
"path": ["limit"],
"message": "Too big: expected number to be <=200"
}
]
}
}| HTTP | code | Význam |
|---|---|---|
| 401 | unauthenticated | Chýbajúci, chybný, expirovaný alebo odvolaný API kľúč |
| 403 | forbidden | Vaše roly nepovoľujú prístup k tejto organizácii alebo tímu, alebo túto zmenu |
| 403 | insufficientScope | Rozsahy kľúča túto operáciu nepovoľujú |
| 404 | notFound | Položka neexistuje alebo ju nevidíte |
| 409 | orgSuspended | Organizácia je pozastavená (len na čítanie) -- každá zmena sa odmietne |
| 409 | conflict | externalId už označuje položku iného tímu alebo stretnutia, alebo dve požiadavky naraz importujú to isté externalId (pozri Import histórie) |
| 409 | ratingClosed | Stretnutie sa teraz nedá hodnotiť: ešte nezačalo (SCHEDULED -- platí pre všetkých vrátane Administrátorov tímu), alebo sa pre vaše vlastné hodnotenie zatvorilo okno na hodnotenie (členovia tímu, ktorí nie sú jeho Administrátormi). Pozri Stretnutia |
| 422 | invalid | Neplatné parametre alebo telo; pri chybách formátu issues vypisuje problémy po jednotlivých poliach (pozri Validácia) |
| 429 | rateLimited | Priveľa požiadaviek -- pozri Limit požiadaviek |
| 500 | internal | Neočakávaná chyba servera (bez podrobností) |
Dôvody. Kde samotný kód nepovie, ktorá kontrola zlyhala, povie to error.details.reason:
{ "error": { "code": "invalid", "message": "A scorecard week is its Monday (YYYY-MM-DD)", "details": { "reason": "INVALID_WEEK" } } }reason | code | Význam |
|---|---|---|
INVALID_WEEK | invalid | Týždeň Scorecardu, ktorý nie je pondelok |
OWNER_NOT_MEMBER | invalid | Vlastník (alebo autor) nie je členom tímu |
INVALID_RATING | invalid | Hodnotenie stretnutia, ktoré nie je celé číslo od 1 do 10 |
NOT_TEAM_MEETING | invalid | meetingId je stretnutie iného tímu |
BACKFILL_FORBIDDEN | forbidden | Zápis histórie (dátum v minulosti, iný autor) potrebuje práva Administrátora tímu |
Môžu pribudnúť nové dôvody; neznámy dôvod berte ako chýbajúci.
Položky, ku ktorým nemáte prístup. Zoznamy pod tímom alebo organizáciou, ku ktorým nemáte prístup -- napríklad /teams/{teamId}/tasks -- vrátia 403 forbidden. Jednotlivé položky podľa id -- /tasks/{id}, /issues/{id}, /goals/{id}, /meetings/{id}, /metrics/{id}/values -- naopak vrátia 404 notFound, aby id z iných organizácií nič neprezradili.
Pri zmenách je to inak: PATCH, PUT alebo DELETE existujúcej položky, ktorú nesmiete meniť -- napríklad úlohy tímu, v ktorom ste Pozorovateľ -- vráti 403 forbidden. Id, ktoré neexistuje, vráti 404 notFound.
Každá odpoveď vrátane chýb obsahuje hlavičku X-Request-Id. Uveďte ju pri nahlasovaní problému -- prevádzkovateľ podľa nej nájde požiadavku v logoch servera.
Limit požiadaviek
Každý API kľúč smie poslať 120 požiadaviek za minútu. Nad tento limit API odpovie 429 rateLimited s hlavičkou Retry-After -- počtom sekúnd do začiatku ďalšej minúty. Toľko počkajte a pokračujte. Limit platí pre každý kľúč zvlášť, preto by rôzne integrácie mali používať rôzne kľúče.
TIP
Ak potrebujete celé zoznamy, použite limit=200 -- jedna požiadavka na 200 položiek namiesto štyroch.
Formáty dát
| Druh | Formát | Príklad |
|---|---|---|
| Názvy polí | camelCase | dueDate, isLeadership |
| Id | Nepriehľadné reťazce | "cmg7t…" |
| Časové okamihy (vytvorenie, dokončenie, začiatok …) | ISO 8601, UTC | "2026-10-06T14:30:00.000Z" |
| Kalendárne dni (termíny, deň stretnutia, týždeň ukazovateľa) | YYYY-MM-DD, bez časového pásma | "2026-10-07" |
| Kvartály | YYYY-Qn | "2026-Q3" |
| Hodnoty enumov | UPPER_CASE | OPEN, ON_TRACK, COMPLETED |
| Chýbajúce hodnoty | null (polia sú vždy prítomné) | "completedAt": null |
Kalendárne dni sa medzi časovými pásmami neposúvajú -- úloha s termínom 2026-10-07 má termín v ten deň všade. Filtre from, to a quarter používajú rovnaké formáty.
Niektoré polia sa vracajú tak, ako sú uložené v aplikácii:
- Cieľ ukazovateľa si zachováva operátor porovnania, napr.
">100000"alebo"<5", a hodnoty ukazovateľov sú reťazce. - Polia V/TO majú každé pevný tvar: zoznam textov, objekt alebo text -- 3-ročná vízia a 1-ročný plán sú text alebo objekt (pozri V/TO).
coreValues(hodnotenia"+","+/-","-") agwc(true,false,null) hodnotenia ľudí sú JSON objekty.
Verzia API je súčasťou URL (/v1). Do odpovedí môžu pribudnúť nové polia bez novej verzie, preto by vaša integrácia mala neznáme polia ignorovať.
EOS pojmy v API
Webová aplikácia používa EOS terminológiu. API používa neutrálne názvy, aby boli integrácie zrozumiteľné aj vývojárom, ktorí EOS nepoznajú:
| V EOS Hub | V API |
|---|---|
| Organizácia, tím | orgs, teams |
| Úloha (To-Do) | tasks |
| Problém (Issue) | issues |
| Rock, míľnik | goals (míľniky sú vnorené v každom cieli) |
| Ukazovateľ Scorecardu, týždenná hodnota | metrics, metrics/{id}/values |
| L10 stretnutie | meetings (s ratings, segues, headlines, messages) |
| V/TO | vision |
| Organizačná štruktúra (Accountability Chart) | org-chart (koncepty a verzie) |
| Hodnotenie ľudí (People Analyzer) | people-reviews |
| Dokumenty | documents |
Endpointy
Endpointy v tejto časti dáta čítajú: používajú GET a potrebujú rozsah read -- okrem endpointov platformy, ktoré potrebujú platform. Stránkované zoznamy okrem uvedených filtrov prijímajú aj limit a cursor. Endpointy, ktoré dáta menia, nájdete v častiach Zápis dát, Správa organizácie a Správa platformy.
Konto a organizácie
| Endpoint | Vracia | Filtre |
|---|---|---|
/me | Vaše konto, organizácie s vašou rolou a rozsahy kľúča | -- |
/orgs | Vaše organizácie s vašou rolou v každej z nich | -- |
/orgs/{orgId} | Jednu organizáciu | -- |
/orgs/{orgId}/members | Všetkých členov organizácie s ich rolou v organizácii (stránkované). Len pre Vlastníkov a Administrátorov organizácie -- ostatní členovia vidia členov svojich tímov cez /teams/{teamId}/members | -- |
/orgs/{orgId}/teams | Tímy organizácie, ktoré vidíte | -- |
/orgs/{orgId}/vision | Firemnú víziu, spoločnú pre všetky tímy organizácie (pozri V/TO) | -- |
Tímy
| Endpoint | Vracia | Filtre |
|---|---|---|
/teams/{teamId} | Jeden tím vrátane nastavení dĺžky stretnutí | -- |
/teams/{teamId}/members | Členov tímu s ich tímovou rolou (stránkované) | -- |
Dáta tímu
| Endpoint | Vracia | Filtre |
|---|---|---|
/teams/{teamId}/tasks | Úlohy (stránkované) | completed (true/false), ownerId, meetingId |
/tasks/{id} | Jednu úlohu | -- |
/teams/{teamId}/issues | Problémy (stránkované) | status (OPEN, SOLVING, SOLVED), priority (HIGH, MEDIUM, LOW), longTerm (true/false), meetingId |
/issues/{id} | Jeden problém | -- |
/teams/{teamId}/goals | Rocks s míľnikmi (stránkované) | quarter (2026-Q3), status (ON_TRACK, OFF_TRACK, DONE), level (COMPANY, DEPARTMENT) |
/orgs/{orgId}/goals | Firemné Rocks organizácie, viditeľné pre všetkých jej členov (stránkované) | quarter, status |
/goals/{id} | Jeden Rock s míľnikmi (firemné Rocks môže čítať každý člen organizácie) | -- |
/teams/{teamId}/metrics | Ukazovatele Scorecardu | -- |
/metrics/{id}/values | Týždenné hodnoty ukazovateľa, od najstaršej (stránkované) | from, to (dni, vrátane) |
/teams/{teamId}/meetings | Stretnutia od najnovšieho, každé so súhrnom hodnotenia (stránkované) | status (SCHEDULED, IN_PROGRESS, COMPLETED) |
/meetings/{id} | Jedno stretnutie s poznámkami, hodnoteniami (s komentármi), segue, novinkami (headlines), kaskádovými správami, hosťami, id úloh a problémov vytvorených na ňom a oknom na hodnotenie | -- |
/teams/{teamId}/vision | V/TO tímu: firemnú víziu, 1-ročný plán tímu, Rocks aktuálneho kvartálu a otvorené dlhodobé problémy (pozri V/TO) | -- |
/teams/{teamId}/org-chart | Organizačná štruktúra, ktorá platí pre tím; ?version=n pre zverejnenú verziu | -- |
/teams/{teamId}/people-reviews | Hodnotenia ľudí: vaše vlastné, adminom tímu hodnotenia všetkých (stránkované) | quarter (2026-Q3) |
/teams/{teamId}/documents | Dokumenty a odkazy (stránkované) | -- |
Hodnotenia stretnutí sa riadia rovnakými pravidlami ako v aplikácii: rating.average nezahŕňa neprítomných ani tých, ktorí nehodnotili (pozri L10 stretnutia), a ratingWindow hovorí, či členovia tímu ešte môžu hodnotiť.
Platforma
Pre prevádzkovateľa platformy, s kľúčom s rozsahom platform -- pozri Správa platformy. Tieto endpointy nevracajú žiadne dáta organizácií.
| Endpoint | Vracia | Filtre |
|---|---|---|
/platform/orgs | Všetky organizácie s ich stavom a počtom členov a tímov | -- |
/platform/users | Všetky kontá s počtom organizácií a aktívnych API kľúčov, od najstaršieho (stránkované) | -- |
/platform/users/{id}/api-keys | API kľúče jedného konta, od najnovšieho -- len údaje o kľúči, nikdy kľúč samotný | -- |
/platform/ai | AI poskytovateľov (API kľúče maskované) a vlastné systémové prompty | -- |
/platform/feedback | Spätnú väzbu od používateľov, od najnovšej (PATCH/DELETE /platform/feedback/{id} nastaví stav a internú poznámku, alebo zmaže) | kind (BUG, IDEA), status (NEW, IN_PROGRESS, DONE, DISMISSED) |
Spätnú väzbu prevádzkovateľom platformy pošle ktorýkoľvek používateľ cez POST /feedback (kind, message, expected, orgId; kľúč s write, najviac 20 za hodinu).
Zápis dát
Úlohy, problémy, Rocks s ich míľnikmi, ukazovatele Scorecardu s ich týždennými hodnotami, stretnutia, V/TO, hodnotenia ľudí a dokumenty môžete cez API zapisovať. Každá zmena potrebuje kľúč s rozsahom write (Čítanie a zápis v dialógu vytvorenia) -- kľúč Len čítanie dostane 403 insufficientScope. Nastavenia organizácie, jej členov a tímy meníte endpointmi v časti Správa organizácie.
Metódy
| Metóda | Použitie | Úspešná odpoveď |
|---|---|---|
POST | Vytvorenie položky | 201 Created s vytvorenou položkou (POST /messages/acknowledge: 204 No Content). S externalId, ktoré ste už poslali: 200 OK s položkou vytvorenou vtedy (pozri Import histórie) |
PATCH | Čiastočná úprava -- pošlite len polia, ktoré chcete zmeniť; vynechané polia si ponechajú svoje hodnoty | 200 OK s upravenou položkou |
PUT | Vytvorenie alebo nahradenie: hodnota ukazovateľa za jeden týždeň, hodnotenie stretnutia, vaše hodnotenie v People Analyzer -- idempotentné, opakovanie tej istej požiadavky nič nezmení | 200 OK s uloženou položkou |
DELETE | Zmazanie položky | 204 No Content, bez tela |
Telo posielajte ako JSON s hlavičkou Content-Type: application/json. Odpovede majú rovnaký tvar ako príslušný GET -- vytvorená úloha vyzerá presne ako úloha z GET /tasks/{id}.
Telo PATCH musí meniť aspoň jedno pole: prázdne telo {} API odmietne s 422 invalid („Nothing to update“). Polia, ktoré API nepozná, sa ignorujú -- telo len s neznámymi poliami sa považuje za prázdne. Výnimkou sú telá stretnutí (POST /teams/{teamId}/meetings, PATCH /meetings/{id}, PUT /meetings/{id}/ratings/{userId}): prijímajú len tvary uvedené v časti Stretnutia a neznáme alebo nadbytočné pole odmietnu s 422 invalid.
Oprávnenia
Pre zápis platia rovnaké pravidlá ako vo webovej aplikácii (pozri Roly a oprávnenia). Rozhoduje vaša rola v tíme, do ktorého položka patrí; Vlastníci, Administrátori a Implementátori organizácie vystupujú v každom tíme ako tímoví Administrátori.
| Operácia | Kto smie |
|---|---|
| Vytvárať, upravovať, dokončovať a znovu otvárať úlohy (akékoľvek, nielen svoje) | Členovia tímu a vyššie roly |
| Vytvárať a upravovať problémy, meniť ich stav, presúvať ich medzi krátkodobé a dlhodobé | Členovia tímu a vyššie roly |
| Zadávať týždenné hodnoty ukazovateľov | Členovia tímu a vyššie roly |
| Meniť stav Rocku; pridávať, upravovať, dokončovať a mazať jeho míľniky | Vlastník Rocku (Člen alebo vyššia rola) a Administrátori tímu |
| Vytvárať Rocks; meniť ich názov, popis, vlastníka, kvartál alebo úroveň | Administrátori a Vlastníci tímu |
| Pridávať, upravovať a presúvať ukazovatele | Administrátori a Vlastníci tímu |
| Plánovať a dodatočne zaznamenávať stretnutia, spúšťať a ukončovať ich, opravovať časy ukončeného stretnutia | Administrátori a Vlastníci tímu |
| Sám ohodnotiť stretnutie | Členovia tímu a vyššie roly, ktorí sú v tíme -- nie Implementátori a nie Vlastníci či Administrátori organizácie, ktorí nie sú členmi tímu. V rámci okna na hodnotenie, ak nie ste Administrátor tímu |
| Nastaviť alebo vymazať hodnotenie člena, označiť členov ako neprítomných | Administrátori a Vlastníci tímu |
| Pridávať segue, novinky (headlines) a kaskádové správy | Členovia tímu a vyššie roly |
| Potvrdiť prečítanie kaskádových správ | Ktorýkoľvek člen organizácie, do ktorej správa patrí |
| Upravovať V/TO tímu (1-ročný plán, vymazanie archívu) | Administrátori a Vlastníci tímu |
Upravovať firemnú víziu (PATCH /orgs/{orgId}/vision) | Vlastníci a Administrátori organizácie, Implementátori a Administrátori a Vlastníci leadership tímu |
| Zapisovať hodnotenia v People Analyzer (hodnotiteľom ste vždy vy) | Členovia tímu a vyššie roly |
| Pridávať odkazy do dokumentov | Členovia tímu a vyššie roly |
| Mazať úlohy, problémy, Rocks, ukazovatele, kaskádové správy a dokumenty | Administrátori a Vlastníci tímu |
Zapisovať históriu: createdAt, completedAt, resolvedAt, iný autor (userId, createdById) | Administrátori a Vlastníci tímu (inak 403 forbidden s dôvodom BACKFILL_FORBIDDEN) |
| Nastaviť hostí stretnutia | Administrátori a Vlastníci tímu |
Vrátiť import späť (DELETE /orgs/{orgId}/import-batches/{batchId}) | Vlastníci a Administrátori organizácie |
Napríklad: Pozorovateľ nemôže meniť nič; Člen môže dokončiť úlohu kolegu, ale nemôže ju zmazať; vlastník Rocku môže nastaviť jeho stav na OFF_TRACK a odškrtávať jeho míľniky, ale nemôže ho premenovať, odovzdať niekomu inému ani presunúť do iného kvartálu; Implementátor vedie stretnutia a zapisuje hodnotenia členov ako Administrátor tímu, sám však stretnutie nikdy nehodnotí. Odmietnutá zmena vráti 403 forbidden.
Ďalšie pravidlá:
- Vlastníci musia byť členmi tímu.
ownerId, ktoré pošlete pre úlohu, Rock alebo ukazovateľ, musí byť členom tímu, do ktorého položka patrí (id nájdete vGET /teams/{teamId}/members); inak API odpovie422 invalids dôvodomOWNER_NOT_MEMBER. Ostatné úpravy fungujú, aj keď súčasný vlastník z tímu odišiel. - Jedna požiadavka, jedna zmena.
PATCHs viacerými poľami (napríklad nový názov a stav) sa uplatní celý alebo vôbec. - Malé telá požiadaviek. Telo požiadavky môže mať najviac 64 KB (inak
413). - Stretnutia musia patriť tímu. Nepovinné
meetingIdnovej úlohy alebo problému musí byť stretnutím toho istého tímu (inak dôvodNOT_TEAM_MEETING). - Pozastavené organizácie sú len na čítanie. Každá zmena v pozastavenej organizácii vráti
409 orgSuspended. - Kalendárne dni (
dueDate, týždeň ukazovateľaweek, deň stretnutiadate) prijímajú len formátYYYY-MM-DD. Časový okamih ako2026-10-14T00:00:00Zalebo neexistujúci deň ako2026-02-30API odmietne s422 invalid. - Časové okamihy (
startedAtstretnutia, dodatočne zapísanécreatedAt,completedAt,resolvedAt) potrebujú ISO 8601 s časovým pásmom:2026-10-05T09:00:00+02:00alebo2026-10-05T07:00:00Z. Čas bez pásma, napríklad2026-10-05T09:00:00, API odmietne s422 invalid. - Text sa orezáva. Medzery na začiatku a na konci sa odstránia; názov, ktorý je po orezaní prázdny, je neplatný.
Validácia
Neplatný vstup vráti 422 invalid a nič nezmení. Rozlišujeme dva druhy:
- Chyby formátu -- chýbajúce povinné pole, nesprávny typ (napríklad číslo namiesto reťazca), neznáma hodnota enumu, chybný deň alebo kvartál, prázdne telo
PATCH. Odpoveď vypíše každý problém vissuess cestou k poľu (path). - Porušenia pravidiel -- text dlhší ako povolený limit (pozri tabuľky nižšie), vlastník, ktorý nie je členom tímu, stretnutie iného tímu, firemný Rock mimo leadership tímu, začiatok stretnutia v budúcnosti, krok stavu stretnutia späť, hodnotenie, ktoré nie je celé číslo od 1 do 10. Odpoveď má kód
invalid, ale bezissues.
Úlohy (tasks)
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/tasks | Vytvorenie úlohy | 201 Task |
PATCH /tasks/{id} | Úprava, dokončenie alebo znovuotvorenie úlohy | 200 Task |
DELETE /tasks/{id} | Zmazanie úlohy | 204 |
Telo pri vytvorení:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
title | reťazec | áno | 1--500 znakov |
ownerId | reťazec | áno | Člen tímu |
dueDate | deň | áno | YYYY-MM-DD |
meetingId | reťazec | nie | Stretnutie toho istého tímu, z ktorého úloha vzišla |
completed | boolean | nie | true ju vytvorí ako dokončenú (completedAt aktuálny čas, ak nie je zadaný) |
completedAt | časový okamih | nie | Kedy bola dokončená -- potrebuje completed: true; nie v budúcnosti. Len Administrátori tímu |
createdAt | časový okamih | nie | Kedy bola vytvorená; nie v budúcnosti. Len Administrátori tímu |
externalId, importBatchId | reťazec | nie | Pozri Import histórie |
GET /teams/{teamId}/tasks?meetingId=… vypíše úlohy vytvorené na jednom stretnutí.
Telo pri úprave -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
title | reťazec | 1--500 znakov |
ownerId | reťazec | Člen tímu |
dueDate | deň | YYYY-MM-DD |
completed | boolean | true úlohu dokončí a nastaví completedAt; false ju znovu otvorí a completedAt vymaže |
Problémy (issues)
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/issues | Vytvorenie problému | 201 Issue |
PATCH /issues/{id} | Úprava problému alebo zmena jeho stavu | 200 Issue |
DELETE /issues/{id} | Zmazanie problému | 204 |
Telo pri vytvorení:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
title | reťazec | áno | 1--500 znakov |
description | reťazec | nie | Najviac 5 000 znakov |
priority | HIGH | MEDIUM | LOW | nie | Predvolene MEDIUM |
longTerm | boolean | nie | true zaradí problém do dlhodobého zoznamu (do V/TO, na kvartálne plánovanie) namiesto krátkodobého zoznamu týždenného stretnutia. Predvolene false |
meetingId | reťazec | nie | Stretnutie toho istého tímu, z ktorého problém vzišiel |
status | OPEN | SOLVING | SOLVED | nie | Predvolene OPEN; SOLVED nastaví resolvedAt (aktuálny čas, ak nie je zadaný) |
createdById | reťazec | nie | Kto problém nahlásil, ak nie vy -- člen tímu. Len Administrátori tímu |
createdAt | časový okamih | nie | Kedy bol nahlásený; nie v budúcnosti. Len Administrátori tímu |
resolvedAt | časový okamih | nie | Kedy bol vyriešený -- potrebuje status: SOLVED; nie v budúcnosti. Len Administrátori tímu |
externalId, importBatchId | reťazec | nie | Pozri Import histórie |
Nové problémy majú stav OPEN, ak nepošlete iný; ako createdById sa zaznamenáte vy, ak Administrátor tímu neuvedie niekoho iného. GET /teams/{teamId}/issues?meetingId=… vypíše problémy nahlásené na jednom stretnutí. Každý Issue v odpovedi má pole longTerm; IDS na týždennom stretnutí pracuje len s problémami, kde je false.
Telo pri úprave -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
title | reťazec | 1--500 znakov |
description | reťazec | Najviac 5 000 znakov; "" popis vymaže |
priority | HIGH | MEDIUM | LOW | |
status | OPEN | SOLVING | SOLVED | SOLVED nastaví resolvedAt na aktuálny čas; OPEN a SOLVING ho vymažú |
longTerm | boolean | Presunie problém do dlhodobého (true) alebo krátkodobého (false) zoznamu |
Rocks (goals) a míľniky
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/goals | Vytvorenie Rocku | 201 Goal |
PATCH /goals/{id} | Úprava Rocku alebo nahlásenie jeho stavu | 200 Goal |
DELETE /goals/{id} | Zmazanie Rocku aj s míľnikmi | 204 |
GET /goals/{id}/reports | Týždenné hlásenia Rocku, od najstaršieho | 200 zoznam GoalReport |
PUT /goals/{id}/reports/{week} | Nahlásenie týždňa (jeho pondelok): status (ON_TRACK, OFF_TRACK, DONE, UNKNOWN), note | 200 GoalReport |
DELETE /goals/{id}/reports/{week} | Odstránenie hlásenia týždňa | 204 |
POST /goals/{id}/milestones | Pridanie míľnika k Rocku | 201 Milestone |
PATCH /milestones/{id} | Úprava, dokončenie alebo znovuotvorenie míľnika | 200 Milestone |
DELETE /milestones/{id} | Zmazanie míľnika | 204 |
Id míľnikov nájdete v poli milestones každého Rocku (GET /goals/{id}).
Týždenné hlásenia. Rock má jedno hlásenie na týždeň (week = pondelok). Týždeň musí patriť do kvartálu Rocku a byť najviac o týždeň dopredu (inak 422 s dôvodom INVALID_WEEK). status Rocku sa riadi jeho najnovším hlásením, ktoré nie je UNKNOWN (UNKNOWN = „?“, nikto nevedel). PATCH /goals/{id} so status (a voliteľne note) je hlásením týždňa hlásenia: tohto týždňa, alebo budúceho, ak je stretnutie tímu tohto týždňa už ukončené -- ak ten týždeň patrí do kvartálu Rocku. Hlásenia sú progres: vlastník alebo Admin tímu (reportedBy hovorí, kto ho zapísal).
Telo pri vytvorení Rocku:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
title | reťazec | áno | 1--300 znakov |
description | reťazec | nie | Najviac 5 000 znakov |
ownerId | reťazec | áno | Člen tímu |
quarter | reťazec | áno | YYYY-Qn, napr. "2026-Q4" (roky 2000--2100) |
level | COMPANY | DEPARTMENT | nie | Predvolene DEPARTMENT. COMPANY len v leadership tíme, inak 422 invalid |
Nové Rocks majú stav ON_TRACK a žiadne míľniky.
Telo pri úprave -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
title | reťazec | 1--300 znakov |
description | reťazec | Najviac 5 000 znakov; "" popis vymaže |
ownerId | reťazec | Člen tímu |
quarter | reťazec | YYYY-Qn |
level | COMPANY | DEPARTMENT | COMPANY len v leadership tíme |
status | ON_TRACK | OFF_TRACK | DONE | Jediné pole, ktoré smie zmeniť vlastník Rocku; ostatné polia potrebujú Administrátora tímu |
Telá míľnikov:
| Pole | Typ | Vytvorenie | Úprava | Poznámka |
|---|---|---|---|---|
title | reťazec | povinné | nepovinné | 1--300 znakov |
dueDate | deň alebo null | nepovinné, predvolene null | nepovinné | YYYY-MM-DD; null termín odstráni |
completed | boolean | -- | nepovinné | true míľnik dokončí, false ho znovu otvorí. Nové míľniky nie sú dokončené |
Ukazovatele Scorecardu (metrics)
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/metrics | Pridanie ukazovateľa na koniec Scorecardu tímu | 201 Metric |
PATCH /metrics/{id} | Úprava alebo presun ukazovateľa | 200 Metric |
DELETE /metrics/{id} | Zmazanie ukazovateľa so všetkými jeho hodnotami | 204 |
PUT /metrics/{id}/values/{week} | Nastavenie hodnoty za jeden týždeň | 200 MetricValue |
POST /metrics/{id}/values/batch | Nastavenie hodnôt za viac týždňov (najviac 500, telo najviac 64 KB), každý sa uloží samostatne | 200 výsledky po týždňoch |
DELETE /metrics/{id}/values/{week} | Odstránenie hodnoty týždňa | 204 (404, ak týždeň hodnotu nemá) |
Telo pri vytvorení:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
title | reťazec | áno | 1--200 znakov |
goal | reťazec | null | nie | Najviac 200 znakov. Cieľ s operátorom porovnania >, >=, <, <= alebo =, napr. ">=10" alebo "<5", alebo rozsah "90-110" (vrátane hraníc); samotné číslo, napr. "10", znamená aspoň (>=). null alebo vynechaný: ukazovateľ len na sledovanie -- jeho hodnoty sa zaznamenávajú, ale neposudzujú (onTrack: null) |
ownerId | reťazec | áno | Člen tímu |
unit | reťazec | nie | Najviac 20 znakov, napr. "€" alebo "%" |
description | reťazec | nie | Najviac 5 000 znakov |
externalId, importBatchId | reťazec | nie | Pozri Import histórie |
Telo pri úprave -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
title, ownerId | reťazec | Rovnako ako pri vytvorení |
goal | reťazec | null | Rovnako ako pri vytvorení; null z ukazovateľa urobí ukazovateľ len na sledovanie |
unit, description | reťazec | Rovnako ako pri vytvorení; "" pole vymaže |
direction | "up" | "down" | Presunie ukazovateľ v Scorecarde o jedno miesto vyššie alebo nižšie. Na začiatku alebo na konci sa nič nepresunie |
Týždenná hodnota -- PUT /metrics/{id}/values/{week}:
{week}je pondelok, ktorým týždeň začína, vo formáteYYYY-MM-DD. Akýkoľvek iný deň vráti422 invalids dôvodomINVALID_WEEK.- Požiadavka funguje ako upsert: hodnotu týždňa vytvorí alebo nahradí. Jej opakovanie dá rovnaký výsledok.
enteredByIdsi ponechá toho, kto hodnotu zadal ako prvý. - V aplikácii sa hodnoty zadané počas L10 stretnutia uložia do týždňa, ktorý Scorecard ukazuje ako aktuálny vo vašom časovom pásme (z vášho profilu, inak z organizácie).
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
value | reťazec | áno | Najviac 50 znakov. Čísla posielajte ako reťazce: "12", nie 12 |
onTrack | boolean | nie | Vynechajte ho vždy, keď sa hodnota dá porovnať s cieľom: rozhodne cieľ (cieľ ">=10", hodnota "12" → true; hodnota "8" → false) a onTrack, ktorý mu odporuje, sa odmietne s 422. Len keď sa hodnota nedá posúdiť -- text alebo nejednoznačné číslo ako "1.234,5" -- je onTrack povinný (inak 422). Ukazovateľ len na sledovanie prijíma hodnoty bez neho |
note | reťazec | nie | Najviac 500 znakov: poznámka k hodnote týždňa. Nahradí uloženú poznámku; "" ju vymaže; vynechaná ju ponechá |
importBatchId | reťazec | nie | Pozri Import histórie |
Viac týždňov naraz -- POST /metrics/{id}/values/batch:
{
"values": [
{ "week": "2026-03-02", "value": "11" },
{ "week": "2026-03-09", "value": "about 12", "onTrack": true, "note": "estimate" }
],
"importBatchId": "sw-history-1"
}Každá položka má polia tela pre jeden týždeň plus svoj week. Každý týždeň sa uloží samostatne, takže jeden chybný týždeň nezastaví ostatné. Odpoveď vypíše každý týždeň v poradí:
{ "results": [
{ "week": "2026-03-02", "status": "updated" },
{ "week": "2026-03-09", "status": "created" },
{ "week": "2026-03-10", "status": "error", "error": { "code": "invalid", "message": "A scorecard week is its Monday (YYYY-MM-DD)", "details": { "reason": "INVALID_WEEK" } } }
] }Chybne zostavené telo (nie deň, viac ako 500 položiek) sa odmietne celé s 422.
Čítanie (GET /metrics/{id}/values) vracia note a onTrack podľa aktuálneho cieľa (null pre ukazovateľ len na sledovanie), takže zmena cieľa prehodnotí históriu; zaznamenaný onTrack platí len pre hodnoty, ktoré cieľ posúdiť nevie.
Čísla môžu mať desatinnú čiarku aj bodku ("3,5" aj "3.5" je 3,5), skupiny tisícov ("1.000" aj "1,000" je 1000), medzery a % na konci. Číslo, ktoré mieša oba oddeľovače ("1.234,5"), sa nehádže.
Stretnutia
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/meetings | Naplánovanie stretnutia alebo zaznamenanie stretnutia, ktoré už prebehlo | 201 Meeting |
PATCH /meetings/{id} | Spustenie alebo ukončenie stretnutia, alebo oprava časov ukončeného stretnutia | 200 Meeting |
POST /meetings/{id}/reveal-ratings | Odhalenie hodnotení bežiacej porady (facilitátori) | 204 |
GET /meetings/{id}/recap | Rekapitulácia ukončenej porady: hodnotenie, nové úlohy, problémy, novinky, správy, poznámky; aj attendance (prítomní a neprítomní členovia s hodnoteniami, hostia), scorecard (týždeň porady a tri predošlé), goals (ciele kvartálu podľa hlásení z toho týždňa), todoReview (splnené z celkového počtu a nesplnené), segues a agenda (plán každého kroku a sekundy, ktoré trval) | 200 MeetingRecap |
PUT /meetings/{id}/ratings/me | Vaše vlastné hodnotenie stretnutia | 200 Rating |
PUT /meetings/{id}/ratings/{userId} | Nastavenie alebo vymazanie hodnotenia člena (s komentárom), alebo jeho označenie ako neprítomného | 200 Rating, pri vymazaní 204 |
PUT /meetings/{id}/guests | Nahradenie zoznamu ďalších účastníkov (ľudí mimo tímu) | 200 { data: MeetingGuest[] } |
POST /meetings/{id}/segues | Pridanie segue (dobrej správy) | 201 Segue |
POST /meetings/{id}/headlines | Pridanie novinky (headline) o zákazníkoch, zamestnancoch alebo firme; userId (čia je): na prebiehajúcej porade ktokoľvek z tímu, inak Administrátori tímu | 201 Headline |
POST /meetings/{id}/messages | Pridanie kaskádovej správy | 201 CascadingMessage |
DELETE /meetings/{id} | Zmazanie stretnutia so segue, hlavnými správami, kaskádovými správami, hodnoteniami a hosťami (Administrátori tímu; úlohy a problémy z neho zostanú) | 204 |
PATCH /segues/{id} | Oprava segue: { "content" } | 200 Segue |
DELETE /segues/{id} | Zmazanie segue | 204 |
PATCH /headlines/{id} | Oprava novinky: content, type, userId (čia je) | 200 Headline |
DELETE /headlines/{id} | Zmazanie novinky | 204 |
PATCH /messages/{id} | Oprava kaskádovej správy: { "content" } | 200 CascadingMessage |
DELETE /messages/{id} | Zmazanie kaskádovej správy | 204 |
POST /messages/acknowledge | Potvrdenie prečítania kaskádových správ | 204 |
Kým porada beží, jej hodnotenia sú skryté, kým ich facilitátor neodhalí (ratingsHidden: true): dostanete svoje hodnotenie, cudzie prídu ako rating: 0, absent: false (hodnotil, skryté) a priemer je null. Facilitátor medzitým môže členov označiť ako neprítomných alebo prítomných, ale nastavenie či vymazanie cudzieho čísla vráti 422 invalid.
Meeting v odpovedi má rovnaký tvar ako v GET /teams/{teamId}/meetings vrátane súhrnu hodnotenia. GET /meetings/{id} pridá poznámky, hodnotenia s ich comment (skrytým ako číslo až do odhalenia), segue, novinky, správy, guests a taskIds a issueIds -- úlohy a problémy vytvorené na stretnutí. Úlohy a problémy, ktoré vzídu zo stretnutia, vytvoríte cez endpointy úloh a problémov -- id stretnutia pošlite ako meetingId (stretnutie toho istého tímu).
Vytvorenie -- pošlite presne jeden z dvoch tvarov, nikdy nie polia oboch:
| Tvar | Pole | Typ | Poznámka |
|---|---|---|---|
| Naplánovanie | date | deň | Deň stretnutia, YYYY-MM-DD. Stretnutie začína v stave SCHEDULED |
| Zaznamenanie minulého stretnutia | startedAt | časový okamih | Kedy stretnutie začalo, s posunom časového pásma. Nie v budúcnosti |
durationMin | celé číslo | Dĺžka v celých minútach, 1--600 | |
| Oba tvary | externalId, importBatchId | reťazec | Nepovinné; pozri Import histórie |
Dodatočne zaznamenané stretnutie sa vytvorí v stave COMPLETED s endedAt = startedAt + durationMin. Jeho date je deň startedAt vo vašom časovom pásme (z vášho profilu, inak z organizácie) -- stretnutie, ktoré začalo 2026-10-05T23:30:00Z, pripadne v strednej Európe na 2026-10-06.
Úprava -- opäť presne jeden z dvoch tvarov:
| Tvar | Pole | Typ | Poznámka |
|---|---|---|---|
| Posun stavu | status | IN_PROGRESS | COMPLETED | Len dopredu, vždy o jeden krok: SCHEDULED → IN_PROGRESS → COMPLETED. Akýkoľvek iný krok (späť, ten istý stav alebo zo SCHEDULED rovno na COMPLETED) vráti 422 invalid |
| Oprava časov | startedAt | časový okamih | Len ukončené stretnutia (inak 422). Nie v budúcnosti |
durationMin | celé číslo | Celé minúty, 1--600 |
Spustenie stretnutia (IN_PROGRESS) nastaví startedAt na aktuálny čas. Ukončenie nastaví endedAt na aktuálny čas a zaznamená durationMin -- počet minút od začiatku. Oprava časov znovu vypočíta endedAt a date stretnutia sa riadi novým začiatkom, rovnako ako pri zaznamenaní.
Hodnotenia. Hodnotenia sú celé čísla od 1 do 10, rovnako ako v aplikácii (pozri L10 stretnutia).
PUT /meetings/{id}/ratings/mes{ "rating": 8 }uloží vaše vlastné hodnotenie a označí vás ako prítomného. Musíte byť členom tímu, do ktorého stretnutie patrí. Implementátori nikdy nehodnotia a Vlastníci či Administrátori organizácie hodnotia len v tímoch, ktorých sú členmi (inak403 forbidden).- Okno na hodnotenie. Stretnutie, ktoré ešte nezačalo (
SCHEDULED), nemôže hodnotiť nikto --409 ratingClosed. Členovia tímu môžu hodnotiť počas stretnutia aj po jeho skončení -- až do začiatku ďalšieho stretnutia tímu, najviac však 7 dní. Pri dodatočne zaznamenanom stretnutí sa 7 dní počíta od jeho zadania, nie od jeho konania. Potom členovia dostanú409 ratingClosed. Administrátori tímu môžu hodnotiť kedykoľvek.GET /meetings/{id}ukazuje okno v poliachratingWindow.openaratingWindow.closesAt. PUT /meetings/{id}/ratings/{userId}je pre Administrátorov tímu (a Implementátorov) a okno na hodnotenie ho neobmedzuje, iba stavSCHEDULED.userIdmusí byť členom tímu (inak422 invalid). Hodnotenie mimo 1--10 vráti422 invalids dôvodomINVALID_RATING. Každý tvar nižšie môže niesť ajcomment(najviac 500 znakov: prečo práve toto číslo;""ho vymaže) aimportBatchId.
Telo musí mať presne jeden z týchto tvarov:
| Telo | Účinok | Odpoveď |
|---|---|---|
{ "rating": 8 } | Nastaví hodnotenie člena (1--10) a označí ho ako prítomného | 200 Rating |
{ "rating": 0 } | Vymaže hodnotenie člena: počíta sa ako prítomný, ale nehodnotil | 204 No Content |
{ "absent": true } | Označí člena ako neprítomného a uloží hodnotenie 0. Neprítomní sa do priemeru nezapočítavajú | 200 Rating |
{ "rating": 8, "absent": false } | To isté ako { "rating": 8 }, len s výslovne uvedeným absent ("rating": 0 hodnotenie vymaže) | 200 Rating alebo 204 |
Predvolené hodnoty neexistujú: prázdne telo {}, { "absent": false } bez hodnotenia, neznáme pole alebo rating spolu s "absent": true vráti 422 invalid.
Segue, novinky a kaskádové správy. Telá:
| Endpoint | Pole | Typ | Poznámka |
|---|---|---|---|
segues, messages | content | reťazec | 1--1 000 znakov |
headlines | type | CUSTOMER | EMPLOYEE | COMPANY | COMPANY: firemné novinky |
content | reťazec | 1--1 000 znakov | |
| všetky tri | userId | reťazec | Nepovinné: kto to povedal, ak nie vy -- člen tímu. Len Administrátori tímu |
| všetky tri | externalId, importBatchId | reťazec | Nepovinné; pozri Import histórie |
Ako autor (userId) sa zaznamenáte vy, ak Administrátor tímu neuvedie niekoho iného.
Hostia -- PUT /meetings/{id}/guests s { "guests": [{ "name": "Eva Coach", "email": "eva@example.com" }, { "name": "Ivan", "userId": "…" }] } nahradí zoznam ľudí mimo tímu, ktorí sa stretnutia zúčastnili (najviac 50). email a userId sú nepovinné; userId musí byť členom organizácie. { "guests": [] } zoznam vymaže. Len Administrátori tímu. Segue, novinky a kaskádové správy opraví alebo zmaže ich autor -- počas stretnutia a po ňom, kým je otvorené okno na hodnotenie -- alebo Administrátor tímu kedykoľvek (ostatní dostanú 403). Novinky sú počas porady spoločné poznámky tímu: vtedy ktorúkoľvek z nich zmení alebo zmaže ktokoľvek z tímu. Ich id nájdete v poliach segues, headlines a messages v GET /meetings/{id}. Zmena obsahu ukončeného stretnutia, ktoré prebehlo naživo, nastaví correctedAt a correctedBy stretnutia („Upravené“); rekapitulácia ich má ako corrected. Hodnotenia a dochádzka sa nepočítajú a dodatočne zaznamenané stretnutia (backfill, import) sa neoznačujú nikdy.
Potvrdenie prečítania -- POST /messages/acknowledge s { "ids": ["…", "…"] } (1--500 id) označí správy ako prečítané vami. Smie to ktorýkoľvek člen organizácie, do ktorej správa patrí, nielen členovia tímu, ktorý ju napísal. Opakovanie nič nezmení a neexistujúce id sa preskočia. Ak niektorá zo správ patrí organizácii, ktorej nie ste členom, požiadavka vráti 403 forbidden a nepotvrdí nič.
V/TO (vision)
V/TO má dve časti. Firemná vízia -- základné hodnoty, hlavné zameranie, 10-ročný cieľ, marketingová stratégia a 3-ročná vízia -- je v organizácii jedna a zdieľajú ju všetky jej tímy. Trakcia patrí každému tímu: jeho 1-ročný plán, jeho Rocks aktuálneho kvartálu a jeho dlhodobé problémy. Rocks a problémy sa čítajú priamo z ich vlastných endpointov; vo V/TO zapisujete len 1-ročný plán.
| Endpoint | Účel | Odpoveď |
|---|---|---|
GET /orgs/{orgId}/vision | Firemná vízia | 200 CompanyVision |
PATCH /orgs/{orgId}/vision | Nastavenie jedného poľa firemnej vízie | 200 CompanyVision |
GET /teams/{teamId}/vision | V/TO tímu: firemná vízia a trakcia tímu | 200 Vision |
PATCH /teams/{teamId}/vision | Nastavenie 1-ročného plánu tímu alebo vymazanie archívu | 200 Vision |
POST /teams/{teamId}/vision | Vytvorenie záznamu trakcie tímu, ak ešte neexistuje (bez tela) | 201 Vision |
CompanyVision -- ten istý objekt v oboch endpointoch organizácie aj vo V/TO tímu:
| Pole | Typ | Poznámka |
|---|---|---|
orgId | reťazec | |
coreValues | zoznam textov | |
coreFocus | objekt | Texty, napr. purpose, niche |
tenYearTarget | text | |
marketingStrategy | objekt | Texty alebo zoznamy textov, napr. targetMarket, threeUniques, provenProcess, guarantee |
threeYearPicture | text alebo objekt | Objekt textov alebo zoznamov textov, napr. revenue, profit, measurables |
peopleBar | číslo | Hodnotenie ľudí: koľko +/- môže mať správny človek pri základných hodnotách (- nikdy neprejde); predvolene 1 |
updatedAt | okamih alebo null | null, kým víziu niekto nezapíše |
Polia, ktoré nikto nevyplnil, sú "". Pole vymažete cez PATCH s hodnotou ""; pole so zoznamom alebo objektom aj s [] alebo {}. Formuláre aplikácie zachovajú položky objektu pod názvami, ktoré nepoznajú, a zobrazia ich pod vlastným názvom.
Vision -- V/TO tímu:
| Pole | Typ | Poznámka |
|---|---|---|
teamId | reťazec | |
companyVision | CompanyVision | Vízia organizácie, rovnaká pre každý tím |
oneYearPlan | text alebo objekt | Objekt textov alebo zoznamov textov, napr. revenue, profit, goals |
quarter | kvartál | Aktuálny kvartál vo vašom časovom pásme, napr. "2026-Q4" |
goals | zoznam Goal | Rocks kvartálu, priamo z modulu, v rovnakom tvare ako GET /goals/{id}: pre leadership tím firemné (COMPANY) Rocks organizácie, pre ostatné tímy ich vlastné Rocks oddelenia (DEPARTMENT) |
longTermIssues | zoznam Issue | Otvorené (OPEN, SOLVING) dlhodobé problémy tímu, priamo z modulu, v rovnakom tvare ako GET /issues/{id} |
archive | objekt | quarterlyRocks a issuesList: ručne písané zoznamy z čias, keď sa Rocks a problémy ešte nezobrazovali priamo -- zoznam textov alebo text pri starších voľných záznamoch; "", ak žiadne nie sú |
updatedAt | okamih alebo null | Kedy sa naposledy zmenil 1-ročný plán alebo archív; null, ak tím ešte nič neuložil |
V/TO má každý tím: GET /teams/{teamId}/vision pre tím, ktorý vidíte, nikdy nevráti 404 -- tím, ktorý ešte nič nezapísal, dostane prázdne polia.
Nekompatibilná zmena vo v1.8
GET /teams/{teamId}/vision predtým vracal osem polí V/TO priamo a pre tím bez V/TO 404. Polia vízie sú teraz v companyVision, Rocks a problémy prichádzajú priamo v goals a longTermIssues a staré texty quarterlyRocks a issuesList sú v archive. Zmena prišla v čase, keď bolo API dostupné len v dev prostredí.
Kto smie. Firemnú víziu môže čítať každý člen organizácie; pre organizáciu, ktorej nie ste členom, vráti GET /orgs/{orgId}/vision 403 forbidden ako ostatné endpointy /orgs. PATCH /orgs/{orgId}/vision je pre Vlastníkov a Administrátorov organizácie, Implementátorov a Administrátorov a Vlastníkov leadership tímu; ostatní dostanú 403 forbidden. 1-ročný plán a archív tímu menia Administrátori a Vlastníci tímu. Zmeny potrebujú kľúč s rozsahom write a v pozastavenej organizácii vrátia 409 orgSuspended.
Firemná vízia. Každý PATCH /orgs/{orgId}/vision nastaví jedno pole:
| Pole | Typ | Poznámka |
|---|---|---|
field | reťazec | Jedno z coreValues, coreFocus, tenYearTarget, marketingStrategy, threeYearPicture, peopleBar |
value | podľa field | Pozri nasledujúcu tabuľku. Najviac 20 000 znakov v uloženej podobe |
renames | objekt | Voliteľné, len pre coreValues: premenované hodnoty, starý text → nový text, napr. {"Vlastníme to": "Vlastníme výsledok"}. Hodnotenia ľudí dané pod starým textom sa vo všetkých tímoch organizácie presunú na nový -- pri dvojiciach, kde starý text zo zoznamu zmizne a nový pribudne. AI asistenti to (ani nastavenie peopleBar) robiť nemôžu. Bez neho zostanú hodnotenia inak napísanej hodnoty pod starým textom a prestanú sa rátať |
V/TO tímu. Každý PATCH /teams/{teamId}/vision tiež nastaví jedno pole, field je jedno z oneYearPlan, quarterlyRocks alebo issuesList. quarterlyRocks a issuesList sú archív: prijmú len prázdnu hodnotu ("" alebo []), ktorá daný zoznam vymaže; čokoľvek iné vráti 422 invalid -- Rocks a problémy pridávajte ich vlastnými endpointmi. Polia firemnej vízie tu nie sú povolené (422 invalid); použite PATCH /orgs/{orgId}/vision. PATCH vytvorí záznam trakcie tímu, ak chýba. POST pre tím, ktorý ho už má, nič nezmení a vráti aktuálne V/TO, aj tak so 201.
Každé pole prijíma jeden tvar:
| Polia | value |
|---|---|
coreValues | Zoznam textov: najviac 100 položiek, každá 1--1 000 znakov (orezáva sa) |
coreFocus, marketingStrategy | Objekt s najviac 30 kľúčmi (každý 1--100 znakov); každá hodnota je text (najviac 5 000 znakov) alebo zoznam textov ako vyššie |
threeYearPicture, oneYearPlan | Text, uloží sa tak, ako ho pošlete (neorezáva sa), alebo objekt ako vyššie |
tenYearTarget | Text, uloží sa tak, ako ho pošlete (neorezáva sa) |
peopleBar | Celé číslo 0--10 |
quarterlyRocks, issuesList | Len "" alebo [] (vymaže archív) |
Prázdna hodnota pole vymaže: "" hocijaké pole, [] alebo {} pole so zoznamom alebo objektom. Čokoľvek iné -- iný text pre pole so zoznamom alebo objektom, zoznam alebo objekt pre tenYearTarget, číslo, boolean, null -- vráti 422 invalid. Ukážkové telá:
{ "field": "coreValues", "value": ["Zákazník na prvom mieste", "Zodpovednosť", "Jednoduchosť"] }
{ "field": "marketingStrategy", "value": { "targetMarket": "B2B firmy s 10-250 ľuďmi", "threeUniques": ["Postavené pre EOS", "L10 stretnutia", "Funguje aj v mobile"] } }
{ "field": "tenYearTarget", "value": "1 000 firiem používa EOS Hub" }
{ "field": "threeYearPicture", "value": { "revenue": "5 mil. €", "profit": "800 tis. €", "measurables": ["300 zákazníkov", "40 ľudí"] } }a pre tím (PATCH /teams/{teamId}/vision):
{ "field": "oneYearPlan", "value": { "revenue": "2 mil. €", "profit": "250 tis. €", "goals": ["Spustiť mobilnú aplikáciu", "Prijať 5 vývojárov"] } }
{ "field": "quarterlyRocks", "value": "" }Odpoveďou je celý objekt CompanyVision alebo Vision ako z príslušného GET: polia so zoznamom a objektom sa vrátia rozparsované, textové polia vždy ako text -- text, ktorý vyzerá ako JSON (napríklad "[1, 2]"), zostane reťazcom. Pole so zoznamom alebo objektom, v ktorom je ešte starší voľný text z aplikácie, sa vráti ako tento text.
Organizačná štruktúra (org-chart)
Všetko pracuje s grafom, ktorý platí pre tím: s firemným, ak organizácia vedie jeden graf (vtedy ho menia len jeho editori -- owneri a admini organizácie, Implementeri, admini tímu vedenia), inak s vlastným grafom tímu (jeho admini). Zmeny idú cez koncept a verziou sa stanú po zverejnení, rovnako ako v aplikácii.
| Endpoint | Účel | Odpoveď |
|---|---|---|
GET /teams/{teamId}/org-chart | Graf, ktorý platí pre tím. Voliteľné ?version=n načíta zverejnenú verziu namiesto platnej | 200 OrgChart |
GET /orgs/{orgId}/org-chart | Graf organizácie (len pri jednom grafe za organizáciu; pri grafe za každý tím 404) | 200 OrgChart |
POST /teams/{teamId}/org-chart/draft | Otvorí koncept: {"from": "current"} (predvolené, kópia poslednej verzie), "leadership" (vlastný graf tímu vedenia, len firemný graf) alebo "empty". Ak je koncept otvorený, vráti ho | 201 ChartDraft |
GET /teams/{teamId}/org-chart/draft | Otvorený koncept (404, ak žiadny nie je) | 200 ChartDraft |
PUT /teams/{teamId}/org-chart/draft | Uloží celý koncept: {"revision": 3, "seats": [...]} | 200 { revision, updatedAt } |
DELETE /teams/{teamId}/org-chart/draft | Zahodí koncept | 204 |
POST /teams/{teamId}/org-chart/draft/publish | Zverejní ho: {"effectiveFrom": "2026-11-01", "note": "…"}. Budúci deň verziu naplánuje | 200 OrgChart |
POST /teams/{teamId}/org-chart/versions/{number}/withdraw | Stiahne poslednú verziu pred jej dňom: znovu sa z nej stane koncept (422, kým je otvorený iný koncept) | 200 OrgChart |
OrgChart obsahuje režim, zobrazenú verziu (number, effectiveFrom, state: current, scheduled alebo past, note), zoznam versions a miesta seats. Pri jednom grafe za organizáciu obsahuje aj teamSeatIds -- miesta, ktoré patria požadovanému tímu. Neznáma verzia je 404.
Miesto je { id, parentId, title, responsibilities, people, teams }:
idostáva rovnaké naprieč verziami (pri presune či premenovaní ho zachovajte; nové miesto potrebuje nové id s 1--40 písmenami, číslicami,_alebo-); súrodenci majú poradie podľa zoznamu.people: najviac 10 záznamov{ userId, name, note, acting }--userIdčlena organizácie (meno sa vezme z účtu) alebonullpre externú osobu;actingoznačuje, kto miesto dočasne zastupuje.responsibilities: najviac 12 textov;teams:{ teamId, scope }, kdescopejebranch(miesto a všetko pod ním) aleboseat(len toto miesto) -- len vo firemnom grafe.
Uloženie posiela revision, z ktorej vychádza; ak koncept medzitým uložil niekto iný, API odpovie 409 a koncept načítajte znovu. Graf s cyklom, neznámym nadriadeným, viac ako 500 miestami alebo osobou mimo organizácie je 422. Zverejnenie s dňom skorším než deň poslednej verzie je 422.
Hodnotenie ľudí (people-reviews)
PUT /teams/{teamId}/people-reviews vytvorí alebo nahradí vaše hodnotenie jedného člena tímu za jeden kvartál a vráti ho (200 PeopleReview). Hodnotiteľom (evaluatorId) ste vždy vy. Pre každého člena, hodnotiteľa a kvartál existuje jedno hodnotenie -- ak ho pre toho istého člena a kvartál pošlete znova, nahradí predchádzajúce.
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
userId | reťazec | áno | Hodnotená osoba, člen tímu |
quarter | reťazec | áno | YYYY-Qn, napr. "2026-Q4" (roky 2000--2100) |
coreValues | objekt | nie | Základná hodnota → hodnotenie "+", "+/-" alebo "-", napr. {"Zákazník na prvom mieste": "+", "Zodpovednosť": "+/-"}; hodnotu bez hodnotenia vynechajte. Najviac 50 hodnôt, názvy najviac 200 znakov |
coreValuesScores | objekt | nie | Zastarané: základná hodnota → true (+) alebo false (-); false ponechá uložené +/- (prečítanie a spätný zápis booleanov teda nič nezmení). Ak pošlete coreValues, ignoruje sa |
gwc | objekt | áno | {"getsIt": true, "wantsIt": true, "capacityToDoIt": false} -- áno (true), nie (false), alebo null / vynechané, kým nie je odpoveď |
notes | reťazec | nie | Najviac 5 000 znakov |
PeopleReview má coreValues (hodnotenia), coreValuesScores (pre staršie klienty: true pre +, false pre +/- a -), gwc s null pri chýbajúcej odpovedi, notes, userId, evaluatorId, quarter. Hodnotenie základnej hodnoty, ktorá už nie je vo firemnom zozname, zostane v hodnotení, ale nepočíta sa.
Kto číta ktoré hodnotenia. GET /teams/{teamId}/people-reviews vráti len vaše vlastné hodnotenia, ak nie ste administrátor alebo vlastník tímu (alebo vlastník, administrátor či implementátor organizácie) -- vtedy hodnotenia všetkých. Pred v1.22 čítal každý člen tímu hodnotenia všetkých.
Dokumenty
| Endpoint | Účel | Odpoveď |
|---|---|---|
POST /teams/{teamId}/documents | Pridanie odkazu do dokumentov tímu | 201 Document |
DELETE /documents/{id} | Zmazanie dokumentu alebo odkazu | 204 |
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
name | reťazec | áno | 1--200 znakov |
url | reťazec | áno | Adresa http:// alebo https://, najviac 2 000 znakov |
API pridáva odkazy (type: "LINK"); súbory nenahráva.
Príklady
Príklady používajú premenné z časti Prvé volania a id z predchádzajúcich odpovedí.
Vytvorenie úlohy:
curl -s -X POST "$BASE/teams/$TEAM_ID/tasks" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Zavolať novému dodávateľovi", "ownerId": "cmg4x…", "dueDate": "2026-10-14"}'{
"id": "cmg7u…",
"teamId": "cmg2b…",
"title": "Zavolať novému dodávateľovi",
"ownerId": "cmg4x…",
"dueDate": "2026-10-14",
"completed": false,
"completedAt": null,
"meetingId": null,
"createdAt": "2026-10-07T09:15:31.000Z"
}Dokončenie úlohy:
curl -s -X PATCH "$BASE/tasks/cmg7u…" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"completed": true}'Odpoveďou je úloha s "completed": true a vyplneným completedAt. Ak pošlete {"completed": false}, úloha sa znovu otvorí.
Zadanie hodnoty ukazovateľa za tento týždeň. Týždne sa označujú svojím pondelkom:
MONDAY=$(date -d "-$(( $(date +%u) - 1 )) days" +%F) # GNU date; na macOS: date -v-$(( $(date +%u) - 1 ))d +%F
curl -s -X PUT "$BASE/metrics/$METRIC_ID/values/$MONDAY" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"value": "12"}'{ "week": "2026-10-05", "value": "12", "onTrack": true, "enteredById": "cmg4x…" }Pri cieli ">=10" hodnota "12" cieľ spĺňa, preto je onTrack rovné true. Opätovné spustenie toho istého príkazu nič nezmení; iná hodnota nahradí hodnotu týždňa.
Označenie problému ako vyriešeného:
curl -s -X PATCH "$BASE/issues/cmg8i…" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "SOLVED"}'Odpoveďou je problém so "status": "SOLVED" a vyplneným resolvedAt. Návrat do stavu OPEN alebo SOLVING resolvedAt vymaže.
Zaznamenanie minulého stretnutia a jeho hodnotenie. Pondelkové L10 začalo o 9:00 bratislavského času a trvalo 90 minút (zaznamenanie potrebuje Administrátora tímu):
curl -s -X POST "$BASE/teams/$TEAM_ID/meetings" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"startedAt": "2026-10-05T09:00:00+02:00", "durationMin": 90}'{
"id": "cmg6n…",
"teamId": "cmg2b…",
"date": "2026-10-05",
"status": "COMPLETED",
"startedAt": "2026-10-05T07:00:00.000Z",
"endedAt": "2026-10-05T08:30:00.000Z",
"durationMin": 90,
"createdById": "cmg4x…",
"rating": { "average": null, "ratedCount": 0, "absentCount": 0 }
}Ohodnoťte ho sami a kolegu, ktorý nebol prítomný, označte ako neprítomného:
curl -s -X PUT "$BASE/meetings/cmg6n…/ratings/me" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"rating": 9}'
curl -s -X PUT "$BASE/meetings/cmg6n…/ratings/cmg4y…" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"absent": true}'{ "userId": "cmg4x…", "rating": 9, "absent": false }
{ "userId": "cmg4y…", "rating": 0, "absent": true }Ostatní členovia môžu stretnutie ohodnotiť svojimi kľúčmi do 7 dní odteraz -- ak skôr nezačne ďalšie stretnutie tímu.
Pridanie kaskádovej správy a potvrdenie jej prečítania. Člen tímu pridá správu k stretnutiu:
curl -s -X POST "$BASE/meetings/cmg6n…/messages" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Od 1. novembra sa cestovné náhrady schvaľujú v novom portáli."}'{
"id": "cmgam…",
"meetingId": "cmg6n…",
"userId": "cmg4x…",
"content": "Od 1. novembra sa cestovné náhrady schvaľujú v novom portáli.",
"createdAt": "2026-10-07T10:02:17.000Z"
}Ktokoľvek z organizácie -- napríklad kolega z iného tímu so svojím kľúčom -- ju označí ako prečítanú:
curl -s -o /dev/null -w "%{http_code}\n" -X POST "$BASE/messages/acknowledge" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["cmgam…"]}'Príkaz vypíše 204. Opätovné potvrdenie tej istej správy nič nezmení.
Import histórie
Prenos minulosti tímu -- starých týždňov Scorecardu, minulých stretnutí s ich hodnoteniami, novinkami, úlohami a problémami -- funguje cez endpointy vyššie a štyri pomôcky. Sú určené pre skripty a AI asistentov, ktorí importujú po krokoch a niekedy musia krok zopakovať.
Opakovateľné vytváranie: externalId. Každé vytvorenie úlohy, problému, Rocku, míľnika, ukazovateľa, stretnutia, segue, novinky a kaskádovej správy prijíma externalId (1--200 znakov): vaše vlastné id položky, jedinečné v rámci organizácie a druhu položky. Opätovné poslanie toho istého externalId nič nevytvorí a vráti položku vytvorenú prvýkrát s 200 namiesto 201 (telo je položka v aktuálnom stave; ostatné polia opakovanej požiadavky sa ignorujú). Ak bola položka medzitým zmazaná, vytvorí sa znova. externalId, ktoré už používa položka iného tímu (alebo pri položkách stretnutia iného stretnutia), vráti 409 conflict.
Importy, ktoré sa dajú vrátiť: importBatchId. Vytvorenia, hodnoty ukazovateľov (PUT aj batch) a hodnotenia členov prijímajú importBatchId (1--100 znakov). Všetko, čo prišlo s tým istým id dávky, sa dá naraz odstrániť:
| Endpoint | Účel | Odpoveď |
|---|---|---|
DELETE /orgs/{orgId}/import-batches/{batchId} | Zmazanie toho, čo dávka vytvorila alebo nastavila | 200 počty podľa typu |
DELETE /orgs/{orgId}/import-batches/{batchId}?dryRun=true | Len spočítanie | 200 počty podľa typu |
{ "batchId": "sw-history-1", "dryRun": false,
"deleted": { "metricValue": 412, "rating": 98, "headline": 31, "segue": 0, "message": 12, "task": 57, "issue": 40, "milestone": 0, "goal": 9, "meeting": 14, "metric": 10, "goalReport": 120 } }Zmaže hodnoty ukazovateľov a hodnotenia, ktoré dávka nastavila, aj tam, kde nahradili skoršie (skoršia hodnota sa neobnoví), a uvoľní externalId dávky. Zmazanie stretnutia zmaže aj jeho hostí, hodnotenia, segue, novinky a správy. Len Vlastníci a Administrátori organizácie.
Skúšobný beh (dry run). Každú zmenu môžete najprv vyskúšať: pošlite hlavičku X-Dry-Run: true. Požiadavka sa zvaliduje, autorizuje a vykoná v databázovej transakcii, ktorá sa potom vráti späť; odpoveď ukazuje, čo by sa uložilo (id vytvorenej položky potom neexistuje), a tiež nesie X-Dry-Run: true. Chyby prídu presne tak, ako by prišli bez nej.
História potrebuje práva Administrátora tímu. Dátumy v minulosti (createdAt, completedAt, resolvedAt), iný autor (userId pri segue, novinkách a správach, createdById pri problémoch) a hodnotenia iných členov sú pre Administrátorov a Vlastníkov tímu; ostatní dostanú 403 forbidden s dôvodom BACKFILL_FORBIDDEN. Dátumy nesmú byť v budúcnosti.
Typické poradie pre jedno minulé stretnutie:
POST /teams/{teamId}/meetingssostartedAt,durationMin,externalId,importBatchId→ stretnutie (COMPLETED).PUT /meetings/{id}/guestspre ľudí mimo tímu.PUT /meetings/{id}/ratings/{userId}pre každého člena:{ "rating": 8, "comment": "…" }alebo{ "absent": true }.POST /meetings/{id}/segues,/headlinesa/messagessuserIdaexternalId.POST /teams/{teamId}/tasksa/issuessmeetingId, dodatočnými dátumami aexternalId.PATCH /meetings/{id}s{ "notes": "…" }.
Históriu Scorecardu prenesiete týždeň po týždni cez POST /metrics/{id}/values/batch. Týždenné stavy Rockov cez PUT /goals/{id}/reports/{week} (s importBatchId): „?“ z tabuľky je UNKNOWN, „-“ je jednoducho žiadne hlásenie. Ukazovateľ bez cieľa ("goal": null) zaznamená aj hodnoty, ktoré sa nedajú posúdiť, napríklad "20+".
Správa organizácie
Endpointy stránky Nastavenia organizácie vo webovej aplikácii: názov, časové pásmo a jazyk organizácie, jej členovia, tímy a členovia jednotlivých tímov (pozri Nastavenia organizácie).
Kto smie. Vlastníci a Administrátori organizácie -- nie Členovia organizácie (ani keď sú Vlastníkmi či Administrátormi niektorého tímu) a nie Implementátori; tí dostanú 403 forbidden. Zmeny potrebujú kľúč s rozsahom write; v pozastavenej organizácii vrátia 409 orgSuspended. Aj zoznam členov GET /orgs/{orgId}/members je len pre Vlastníkov a Administrátorov (s rozsahom read).
| Endpoint | Účel | Odpoveď |
|---|---|---|
PATCH /orgs/{orgId} | Zmena názvu, časového pásma alebo predvoleného jazyka organizácie | 200 Organization |
POST /orgs/{orgId}/members | Pridanie člena -- existujúceho konta alebo nového konta s prihlásením cez Google | 201 člen s created |
PATCH /orgs/{orgId}/members/{userId} | Zmena roly člena v organizácii | 200 OrganizationMember |
DELETE /orgs/{orgId}/members/{userId} | Odobratie člena z organizácie a zo všetkých jej tímov | 204 |
POST /orgs/{orgId}/teams | Vytvorenie tímu | 201 Team |
PATCH /teams/{teamId} | Premenovanie tímu, príznak leadership tímu, nastavenia stretnutí | 200 Team |
DELETE /teams/{teamId} | Zmazanie tímu so všetkými jeho dátami | 204 |
POST /teams/{teamId}/members | Pridanie člena organizácie do tímu | 201 TeamMember |
PATCH /teams/{teamId}/members/{userId} | Zmena tímovej roly člena | 200 TeamMember |
DELETE /teams/{teamId}/members/{userId} | Odobratie člena z tímu | 204 |
Odpovede majú rovnaký tvar ako GET /orgs/{orgId}, GET /orgs/{orgId}/members, GET /teams/{teamId} a GET /teams/{teamId}/members.
Nastavenia organizácie
PATCH /orgs/{orgId} -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
name | reťazec | 1--200 znakov |
timezone | reťazec | Časové pásmo IANA, napr. "Europe/Bratislava"; neznáme pásmo vráti 422 invalid |
defaultLocale | en | sk | Jazyk nových kont vytvorených v tejto organizácii |
Členovia organizácie
POST /orgs/{orgId}/members pridá človeka podľa e-mailu:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
email | reťazec | áno | E-mailová adresa človeka |
role | OWNER | ADMIN | MEMBER | IMPLEMENTER | áno | Jeho rola v organizácii |
name | reťazec | nie | Najviac 200 znakov; použije sa len pri vytvorení nového konta |
googleOnly | boolean | pri novom konte | Musí byť true, ak k e-mailu ešte neexistuje konto |
- Existujúce konto s týmto e-mailom sa pridá do organizácie. Jeho meno a spôsob prihlásenia sa nemenia.
- Neznámy e-mail vytvorí nové konto, ktoré sa prihlasuje cez Google týmto e-mailom -- pošlite
"googleOnly": true, inak API odpovie422 invalid. Konto začne v predvolenom jazyku organizácie. - Žiadne heslá. API heslo nikdy nenastavuje, rovnako ako Nastavenia organizácie v aplikácii. Telo je striktné: akékoľvek iné pole vrátane
passwordvráti422 invalid. - Odpoveďou je člen a
"created": true, ak sa vytvorilo nové konto, alebofalse, ak sa pridalo existujúce. Človek, ktorý už je členom, vráti422 invalid.
PATCH /orgs/{orgId}/members/{userId} s { "role": "ADMIN" } zmení rolu; DELETE /orgs/{orgId}/members/{userId} odoberie človeka z organizácie aj zo všetkých jej tímov. Jeho história -- úlohy, problémy, hodnotenia -- zostáva a jeho API kľúče okamžite stratia prístup k organizácii. userId, ktoré nie je členom organizácie, vráti 404 notFound.
Pravidlá, rovnako ako v aplikácii:
- Vlastníkov a Administrátorov mení len Vlastník. Udeliť rolu
OWNERaleboADMIN, ako aj zmeniť či odobrať člena, ktorý je Vlastníkom alebo Administrátorom, môže len Vlastník organizácie; Administrátor dostane403 forbidden. - Posledný Vlastník zostáva. Zmena roly alebo odobratie posledného Vlastníka organizácie vráti
422 invalid.
Správa tímov
POST /orgs/{orgId}/teams s { "name": "Predaj" } (1--100 znakov) vytvorí tím. slug sa vygeneruje z názvu ("Predaj" → predaj, alebo predaj-2, ak je už obsadený). Nový tím nie je leadership tímom, má predvolené nastavenia stretnutí (90 minút, varovanie od 80. minúty) a zatiaľ nemá žiadnych členov.
PATCH /teams/{teamId} -- všetky polia sú nepovinné, aspoň jedno je potrebné:
| Pole | Typ | Poznámka |
|---|---|---|
name | reťazec | 1--100 znakov. slug sa nemení |
isLeadership | boolean | Leadership tímy spravujú firemné Rocks |
meetingDurationMin | celé číslo | Dĺžka stretnutia v minútach, udržiava sa medzi 10 a 300 |
meetingWarningMin | celé číslo | Minúta, od ktorej odpočet varuje, udržiava sa medzi 1 a minútou pred koncom stretnutia |
Nastavenia stretnutí sa upravia rovnako ako v aplikácii, namiesto toho, aby sa odmietli: dĺžka 400 sa uloží ako 300 a minúta varovania, ktorá je rovná dĺžke alebo väčšia, sa posunie tesne pod ňu -- {"meetingDurationMin": 60} v tíme, ktorý varuje od 80. minúty, uloží varovanie od 59. minúty. Odpoveď ukazuje uložené hodnoty.
DELETE /teams/{teamId} zmaže tím so všetkými jeho dátami -- úlohami, problémami, Rocks, Scorecardom, stretnutiami, trakciou tímu vo V/TO a všetkým ostatným (firemná vízia organizácie zostane). Nedá sa to vrátiť späť.
Neznáme teamId vráti 404 notFound; tím organizácie, v ktorej nie ste Vlastníkom ani Administrátorom, vráti 403 forbidden.
Členovia tímu
| Endpoint | Telo | Poznámka |
|---|---|---|
POST /teams/{teamId}/members | userId, role (nepovinné, predvolene MEMBER) | Človek musí byť členom organizácie, do ktorej tím patrí (inak 422 invalid -- najprv ho pridajte cez POST /orgs/{orgId}/members). Človek, ktorý už v tíme je, vráti 422 invalid |
PATCH /teams/{teamId}/members/{userId} | role | 404 notFound, ak človek nie je v tíme |
DELETE /teams/{teamId}/members/{userId} | -- | Odoberie človeka len z tohto tímu (404 notFound, ak v ňom nie je) |
Tímové roly sú OWNER, ADMIN, MEMBER a VIEWER (pozri Roly a oprávnenia).
Príklad: pridanie člena tímu
Pridajte existujúceho kolegu do organizácie a potom do tímu Predaj ako Administrátora tímu:
curl -s -X POST "$BASE/orgs/$ORG_ID/members" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "peter@acme.com", "role": "MEMBER"}'{ "userId": "cmg4z…", "email": "peter@acme.com", "name": "Peter Kováč", "role": "MEMBER", "joinedAt": "2026-10-07T11:20:05.000Z", "created": false }curl -s -X POST "$BASE/teams/$TEAM_ID/members" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"userId": "cmg4z…", "role": "ADMIN"}'{ "userId": "cmg4z…", "email": "peter@acme.com", "name": "Peter Kováč", "role": "ADMIN" }Pre človeka bez konta pridajte do prvej požiadavky "googleOnly": true (a voliteľne name) -- odpoveď potom obsahuje "created": true a človek sa prihlasuje cez Google týmto e-mailom.
Správa platformy
Endpointy stránky Platforma vo webovej aplikácii (pozri Správa platformy) pre prevádzkovateľa platformy.
Kto smie. Funguje tu len kľúč s rozsahom platform, a to len dovtedy, kým jeho vlastník je prevádzkovateľom platformy (SUPERADMIN). Takéto kľúče môžu vytvárať len prevádzkovatelia platformy, s platnosťou najviac 90 dní (pozri Kľúče platformy). Akýkoľvek iný kľúč dostane 403.
Žiadne dáta organizácií
Endpointy platformy spravujú organizácie ako zákazníkov, kontá a nastavenia AI. Dáta organizácií nikdy nevracajú -- žiadne tímy, úlohy, Rocks, stretnutia ani členov organizácie, len názvy a počty. Rovnako ako vo webovej aplikácii vidí prevádzkovateľ platformy dáta organizácie len ako jej člen, s kľúčom read alebo write a so svojou rolou v organizácii.
| Endpoint | Účel | Odpoveď |
|---|---|---|
GET /platform/orgs | Všetky organizácie | 200 zoznam PlatformOrganization |
POST /platform/orgs | Vytvorenie organizácie s prvým Vlastníkom | 201 PlatformOrganization |
PATCH /platform/orgs/{id} | Pozastavenie alebo obnovenie organizácie | 200 PlatformOrganization |
GET /platform/users | Všetky kontá s počtami (stránkované) | 200 zoznam PlatformUser |
PATCH /platform/users/{id} | Urobí z používateľa správcu platformy alebo bežného používateľa | 200 PlatformUser |
GET /platform/users/{id}/api-keys | API kľúče jedného konta (len údaje o kľúči) | 200 zoznam ApiKeyInfo |
DELETE /platform/api-keys/{id} | Odvolanie API kľúča ktoréhokoľvek používateľa | 204 |
GET /platform/ai | AI poskytovatelia (kľúče maskované) a systémové prompty | 200 AiConfig |
PUT /platform/ai/providers/{type} | Nastavenie API kľúča a predvoleného modelu poskytovateľa | 200 AiProvider |
PATCH /platform/ai/providers/{type} | Zapnutie alebo vypnutie poskytovateľa | 200 AiProvider |
DELETE /platform/ai/providers/{type} | Zmazanie poskytovateľa | 204, alebo 404, ak neexistuje |
PUT /platform/ai/prompts/{inputType} | Nastavenie systémového promptu pre typ vstupu | 200 AiPrompt |
DELETE /platform/ai/prompts/{inputType} | Zmazanie systémového promptu -- znovu platí predvolený | 204, alebo 404, ak neexistuje |
Organizácie
PlatformOrganization obsahuje id, name, slug, status (ACTIVE alebo SUSPENDED), members a teams (počty) a createdAt.
POST /platform/orgs vytvorí organizáciu a jej prvého Vlastníka:
| Pole | Typ | Povinné | Poznámka |
|---|---|---|---|
name | reťazec | áno | 1--200 znakov; vygeneruje sa z neho slug |
timezone | reťazec | áno | Časové pásmo IANA, napr. "Europe/Bratislava" |
defaultLocale | en | sk | áno | |
owner | objekt | áno | email a pri novom konte name (nepovinné) a buď password (8--200 znakov), alebo "googleOnly": true |
Existujúce konto s e-mailom vlastníka sa stane Vlastníkom bez zmeny; neznámy e-mail bez hesla aj bez googleOnly vráti 422 invalid.
PATCH /platform/orgs/{id} s { "status": "SUSPENDED" } prepne organizáciu len na čítanie -- jej členovia môžu naďalej čítať a každá zmena vráti 409 orgSuspended, v aplikácii aj v API. { "status": "ACTIVE" } ju obnoví.
Používatelia a ich API kľúče
GET /platform/users vypíše všetky kontá od najstaršieho: id, email, name, systemRole (SUPERADMIN alebo USER), orgCount, activeApiKeys a createdAt -- len počty, nie to, o ktoré organizácie ide.
PATCH /platform/users/{id} s { "systemRole": "SUPERADMIN" } urobí z používateľa správcu platformy, { "systemRole": "USER" } opäť bežného používateľa. Platí hneď: kľúče a AI pripojenia odobratého správcu fungujú ďalej, ale bez oprávnenia platform. Vlastnú rolu zmeniť nemožno (409 conflict), takže vždy ostane aspoň jeden správca platformy.
GET /platform/users/{id}/api-keys vypíše kľúče jedného konta s id, name, prefix (viditeľný začiatok, napr. ak_k3m7q2xa), scopes, status (active, expired, revoked), expiresAt, lastUsedAt a createdAt. Samotný kľúč sa neukladá, preto sa ani nikdy nevracia.
DELETE /platform/api-keys/{id} kľúč odvolá -- napríklad taký, ktorý mohol uniknúť. Integrácie, ktoré ho používajú, okamžite prestanú fungovať. Odvolanie už odvolaného kľúča nič nezmení. Kľúče za iných vytvárať nemožno.
AI
GET /platform/ai vráti providers -- id, type, defaultModel, isActive a apiKeyMasked -- a prompts -- id, inputType, systemPrompt, providerId, modelOverride a isActive. Uvedené sú len vlastné prompty; typy vstupu bez vlastného promptu používajú vstavaný predvolený prompt.
| Endpoint | Telo | Poznámka |
|---|---|---|
PUT /platform/ai/providers/{type} | apiKey (8--500 znakov), defaultModel (1--200 znakov) | {type} je ANTHROPIC alebo OPENROUTER. Vytvorí poskytovateľa alebo nahradí jeho kľúč a model. Kľúč sa uloží šifrovaný a nikdy sa nevracia -- odpovede ho ukazujú maskovaný. Nový poskytovateľ je zapnutý |
PATCH /platform/ai/providers/{type} | isActive (boolean) | Zapne alebo vypne poskytovateľa |
DELETE /platform/ai/providers/{type} | -- | Prompty, ktoré ho používali, prejdú na prvého zapnutého poskytovateľa |
PUT /platform/ai/prompts/{inputType} | systemPrompt (1--20 000 znakov), providerId (nepovinné), modelOverride (nepovinné, najviac 200 znakov) | Vytvorí alebo nahradí prompt. providerId je id poskytovateľa z GET /platform/ai (pri neznámom 422); ak ho vynecháte, pošlete null alebo je poskytovateľ vypnutý, použije sa prvý zapnutý poskytovateľ. Ak modelOverride vynecháte alebo pošlete null či "", použije sa predvolený model poskytovateľa |
DELETE /platform/ai/prompts/{inputType} | -- | Typ vstupu znovu používa predvolený prompt |
Typy vstupu sú TODO_TITLE, ISSUE_TITLE, ISSUE_DESCRIPTION, ROCK_TITLE, ROCK_DESCRIPTION, MEASURABLE_TITLE, HEADLINE, CASCADING_MESSAGE a VTO_CONTENT (pozri AI Integrácia).
Príklad: pozastavenie organizácie
S kľúčom platformy v EOSHUB_KEY nájdite organizáciu a pozastavte ju:
curl -s -H "Authorization: Bearer $EOSHUB_KEY" "$BASE/platform/orgs" | jq -r '.data[] | "\(.id) \(.status) \(.name)"'
curl -s -X PATCH "$BASE/platform/orgs/cmg1a…" \
-H "Authorization: Bearer $EOSHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "SUSPENDED"}'{ "id": "cmg1a…", "name": "Acme Corp", "slug": "acme-corp", "status": "SUSPENDED", "members": 5, "teams": 2, "createdAt": "2026-05-04T08:00:00.000Z" }Členovia organizácie môžu naďalej čítať, ale každá zmena teraz vráti 409 orgSuspended. Ak ju chcete obnoviť, pošlite {"status": "ACTIVE"}.
Interaktívna referencia
Na adrese https://<vas-server>/api/v1/docs nájdete interaktívnu referenciu API. Obsahuje všetky endpointy s parametrami a úplnou schémou odpovedí a po zadaní API kľúča z nej môžete posielať skutočné požiadavky priamo z prehliadača.
Ten istý popis je dostupný ako dokument OpenAPI 3.1 na https://<vas-server>/api/v1/openapi.json. Môžete ho importovať do Postmanu, Insomnie alebo generátora klientskeho kódu.
Ďalšie kroky
- API kľúče -- vytváranie, odvolávanie a zabezpečenie kľúčov
- Roly a oprávnenia -- čo ktorá rola vidí a môže
- Organizácie a tímy -- ako fungujú organizácie a tímy