Dokumentace API
Z vlastní aplikace založíte schůzku, dostanete odkazy pro hostitele a hosty, zjistíte, kdo je uvnitř, necháte si poslat zprávu, když hovor začne a skončí, a stáhnete záznam. Základní adresa je https://schuzka.wopro.cz/api/v1, odpovědi jsou JSON, texty chyb česky.
Začínáme
- Přihlaste se účtem Wopro a v aplikaci v části API klíče vytvořte klíč. Zobrazí se celý jen jednou.
- Uložte ho na server do proměnné prostředí, nikdy do aplikace v telefonu ani do webu.
- Ověřte klíč voláním
/pinga založte první schůzku.
export SCHUZKA_KEY=hv_live_...
curl https://schuzka.wopro.cz/api/v1/ping -H "Authorization: Bearer $SCHUZKA_KEY"
curl -X POST https://schuzka.wopro.cz/api/v1/rooms -H "Authorization: Bearer $SCHUZKA_KEY" -H "Content-Type: application/json" -d '{"title": "Konzultace", "hours": 2}'
Ověření
Klíč (tvar hv_live_<prefix>_<tajemství>) posíláte v hlavičce Authorization: Bearer hv_live_…, nebo v hlavičce X-API-Key. Organizace, které schůzky patří, se bere z klíče. Nejvýš 10 aktivních klíčů na organizaci a 120 volání za minutu na klíč. Když klíč unikne, zrušte ho v aplikaci a vytvořte nový.
Aplikace Wopro (Booknu, CRM, Sales, podpora, admin) nepoužívají klíč, ale volají stejné cesty pod /api/v1/service/… s ?service_slug=<služba>&org=<HEX organizace> a hlavičkou X-Service-Secret, stejně jako u Wopro SMS.
Cesty
| Metoda a cesta | Co dělá |
|---|---|
GET /api/v1/ping | Ověří klíč, vrátí organizaci a čas. |
POST /api/v1/rooms | Založí schůzku, vrátí 201 s odkazy. Stejné external_id vrátí stejnou otevřenou schůzku (200, replayed). |
GET /api/v1/rooms | Seznam schůzek (?status=active|closed, ?external_id=, ?limit=, stránkování ?before=<kód>). Smazané schůzky v seznamu nejsou. |
GET /api/v1/rooms/<kód> | Stav (entry: open, finished, not_yet, expired, closed), kdo je uvnitř, minuty, odkazy, čekárna. |
PATCH /api/v1/rooms/<kód> | Změna názvu, hesla, pravidla vstupu, zavírání prázdné, počtu lidí, prodloužení, trvalé místnosti, zámku. |
DELETE /api/v1/rooms/<kód> nebo POST …/end | Ukončí hovor pro všechny (trvalou místnost jen vyprázdní). |
GET /api/v1/rooms/<kód>/participants | Kdo je uvnitř podle serveru hovorů, kdo odešel, počty, délka. |
GET /api/v1/rooms/<kód>/recordings | Záznamy schůzky a stav nahrávání, viz Záznamy. |
POST /api/v1/rooms/<kód>/recordings, POST …/recordings/<id>/stop, DELETE …/recordings/<id> | Spuštění, zastavení a smazání záznamu. |
GET /api/v1/recordings, GET /api/v1/recordings/<id>, DELETE /api/v1/recordings/<id> | Všechny záznamy organizace (filtr status, room, stránkování before), jeden záznam s odkazem ke sdílení, smazání. |
POST /api/v1/recordings/<id>/transcript, GET …/transcript, POST …/transcript/send | Přepis a AI zápis záznamu: vyžádat, přečíst, poslat e-mailem, viz Přepis a zápis. |
GET /api/v1/usage?from=&to= | Účastnické minuty a minuty záznamů po schůzkách a dnech, bezplatná část, cena podle ceníku a stržený kredit (charged_czk). |
GET /api/v1/pricing | Ceník bez ověření: cena účastnické minuty a minuty záznamu, bezplatné minuty měsíčně, nejmenší kredit k založení, zda je účtování zapnuté. |
Založení schůzky
curl -X POST "https://schuzka.wopro.cz/api/v1/rooms" \
-H "Authorization: Bearer $SCHUZKA_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Konzultace s Janem Novákem",
"host": { "name": "Jana Nováková" },
"starts_at": "2026-10-20T14:00:00+02:00",
"duration_min": 60,
"max_participants": 10,
"access": "anyone",
"password": "",
"empty_timeout": 10,
"guests": [ { "name": "Jan Novák", "email": "[email protected]" } ],
"send_email": true,
"external_id": "rezervace-1234",
"callback_url": "https://www.vasefirma.cz/schuzka-hook"
}' Pole: title, host.name (a u aplikací Wopro host.user_hex), starts_at s duration_min (vstup 15 minut před začátkem, odkaz platí 2 hodiny po konci; pozvaní dostanou připomínku e-mailem před začátkem), nebo hours (platnost od teď, 0 = bez omezení, jinak 1 až 24), max_participants (2 až 10, s povolenými většími schůzkami víc), access (anyone, wopro, org, invited, waiting), password (4 až 12 znaků), empty_timeout (5 až 120 minut), persistent (trvalá místnost), guests (nejvýš 50), send_email, external_id, callback_url (https).
Odpověď 201:
{
"ok": true,
"room": "abcd-efgh-ijkl",
"url": "https://schuzka.wopro.cz/m/abcd-efgh-ijkl",
"host_url": "https://schuzka.wopro.cz/m/abcd-efgh-ijkl?h=<klíč hostitele>",
"guest_urls": [ { "email": "[email protected]", "name": "Jan Novák", "url": "https://schuzka.wopro.cz/m/abcd-efgh-ijkl?g=<klíč hosta>", "email_sent": true } ],
"entry": "not_yet", "valid_from": "2026-10-20T13:45:00+02:00", "expires_at": "2026-10-20T17:00:00+02:00",
"has_password": false, "access": "anyone", "empty_timeout": 10, "persistent": false, "locked": false,
"callback_secret": "<64 znaků, jen tentokrát>"
} Odkaz host_url dává práva hostitele i bez přihlášení (ztlumit, vyhodit, zamknout, nahrávat, ukončit) a obchází heslo; posílejte ho jen tomu, kdo hovor vede. Odkaz url pošlete hostům; s heslem jde přidat ?p=heslo. Soubor do kalendáře je na /ics/<kód> (s ?g= pro pozvaného).
Když odejde poslední člověk, schůzka je do minuty ve stavu finished (Skončila); stejným odkazem jde znovu otevřít, dokud odkaz platí a dokud ji po empty_timeout minutách nezavře server.
Příklad v PHP
$odpoved = json_decode(file_get_contents('https://schuzka.wopro.cz/api/v1/rooms', false, stream_context_create(['http' => [
'method' => 'POST',
'header' => "Authorization: Bearer hv_live_...\r\nContent-Type: application/json\r\n",
'content' => json_encode(['title' => 'Konzultace', 'hours' => 2, 'external_id' => 'rezervace-1234']),
'ignore_errors' => true,
]])), true);
if (!empty($odpoved['ok'])) {
$odkazProHosty = $odpoved['url'];
$odkazProHostitele = $odpoved['host_url'];
}
Záznamy
Nahrávání spustí hostitel v hovoru, na stránce schůzky, nebo vaše aplikace (POST …/recordings s {"mode": "video"} pro složený obraz 720p, nebo "audio" jen pro zvuk). Všichni v hovoru vidí, že se nahrává; kdo vstupuje, souhlasí s tím na vstupní obrazovce. Nahrávání má na serveru omezenou kapacitu: když je obsazené, přijde 409 recording_busy s polem since, zkuste to za chvíli.
GET …/recordings vrací items (id, mode, status, délka, velikost, page_url, play_url a download_url platné hodinu, expires_at) a recording (on, active, busy). GET /api/v1/recordings vrací všechny záznamy organizace a GET /api/v1/recordings/<id> navíc share_url, veřejnou stránku s přehrávačem pro lidi bez účtu, která platí 7 dní. Odkazy vedou přes aplikaci schuzka.wopro.cz/zaznam/<id>/…, podporují přeskakování a po smazání záznamu přestanou platit. Hotový záznam ohlásí zpětné volání recording.ready. Záznamy se samy mažou po 30 dnech; DELETE …/recordings/<id> ho smaže hned.
Přepis a zápis
POST /api/v1/recordings/<id>/transcript vyžádá přepis hotového záznamu a z něj zápis: shrnutí, na čem jste se dohodli, úkoly (kdo, co, do kdy) a otevřené otázky. Zpracování běží na pozadí, hodinová schůzka bývá hotová do pěti minut a dokončení ohlásí zpětné volání transcript.ready. GET …/transcript vrací status (pending, running, summary, ready, failed), summary, segments s časy v sekundách od začátku záznamu, celý text (?text=0 je vynechá) a odkazy txt_url, srt_url, vtt_url platné 24 hodin. POST …/transcript/send s {"to": ["[email protected]"]} pošle zápis e-mailem, nejvýš 30 adresám. Cena je 0,60 Kč za minutu záznamu, přepisy vyžádané aplikacemi Wopro se neúčtují. Přepis i zápis dělá umělá inteligence, může obsahovat chyby.
Zpětná volání
Když při založení pošlete callback_url, dostanete podepsaný POST s JSON při začátku hovoru (room.started), při konci (room.finished, s počty a minutami), při ukončení (room.closed, u trvalé místnosti room.emptied), u hotového záznamu (recording.ready, v data id, mode, duration_seconds, size_bytes, expires_at a download_url platný 24 hodin) a u hotového zápisu (transcript.ready, v data recording_id, summary a odkazy na přepis). Hlavička X-Schuzka-Signature: t=<čas>,v1=<podpis>, podpis je HMAC SHA-256 z "<čas>.<tělo>" tajemstvím callback_secret z odpovědi na založení. Odpovězte 2xx; jinak to zkusíme znovu po 1, 5, 15 a 60 minutách.
$telo = file_get_contents('php://input');
[$t, $v1] = sscanf($_SERVER['HTTP_X_SCHUZKA_SIGNATURE'] ?? '', 't=%d,v1=%s');
if (!hash_equals(hash_hmac('sha256', $t . '.' . $telo, $tajemstvi), (string) $v1)) {
http_response_code(401); exit;
}
$udalost = json_decode($telo, true); // $udalost['event'], $udalost['room']['room'], $udalost['data']
Limity
Limity chrání službu před zneužitím a platí pro web i API stejně; správce Wopro je může organizaci upravit.
- Nejvýš 20 otevřených schůzek najednou na organizaci (
429 too_many_open_rooms) a 5 trvalých místností (429 too_many_persistent). - Délka schůzky není omezená (
hours: 0), probíhající hovor konec platnosti neukončí. V základu nejvýš 10 lidí, větší schůzky povolí organizace v Nastavení. Prázdná schůzka se zavře poempty_timeoutminutách (výchozí 15) od posledního odchodu; dokud nikdo nepřišel, nezavře se (po 30 dnech bez návštěvy se uklidí). - Zakládání: 10 schůzek za hodinu na uživatele nebo službu, pětinásobek na organizaci; klíč zákazníka navíc 100 schůzek za den (
429 daily_limit) a 120 volání za minutu (429 rate_limited, hlavičkaRetry-After). - Vstupy do schůzky: 60 za 10 minut z jedné adresy, 10 pokusů o heslo za 10 minut.
- S účtováním: založení chce zůstatek aspoň 1 Kč (
402 insufficient_credit), při nule se hovor ukončí.
Chyby
Při chybě přijde {"ok": false, "error": "kód", "message": "česky"}. Kódy: missing_api_key, invalid_api_key (401), not_found (404), bad_max_participants, bad_starts_at, bad_duration, bad_hours, bad_access, bad_password_length, bad_empty_timeout, bad_callback_url (422), insufficient_credit (402, s balance_czk a topup_url), recording_busy, recording_active, room_not_open (409), room_closed (410), rate_limited, daily_limit, too_many_open_rooms, too_many_persistent (429), livekit_unavailable, storage_unavailable (502), billing_unavailable, recording_off, recording_not_configured (503).
Vložení na web
Jeden řádek skriptu vloží tlačítko, které otevře schůzku v nové kartě, nebo rámeček se schůzkou přímo na stránce:
<script src="https://schuzka.wopro.cz/assets/embed.js" data-code="abcd-efgh-ijkl" data-mode="button" data-label="Připojit se k videohovoru" data-color="#4f46e5"></script> <script src="https://schuzka.wopro.cz/assets/embed.js" data-code="abcd-efgh-ijkl" data-mode="iframe" data-height="640"></script>
Vlastní značku (název, logo, barva) a vlastní doménu pro odkazy nastavíte v aplikaci v části Nastavení; doména musí mířit záznamem CNAME na schuzka.wopro.cz a zapínáme ji na vyžádání.
Ceník
Platí organizace, která schůzku založila: účastnická minuta 0,05 Kč od první minuty (minuty zdarma platí jen pro schůzky z aplikace), nahrávání zdarma, úložiště záznamů 0,50 Kč za GB a měsíc, přepis se zápisem podle ceníku. Hosté neplatí nic, schůzky založené aplikacemi Wopro se neúčtují. Účtování z kreditu je zapnuté.