Konto z włączoną betą może wywoływać Product API (/api/v1) kluczem wvi_live_…. To nie jest to samo co API rejestracji uczestników (token per webinar) ani token marketingowy wvm_.
Kreator w panelu działa bez zmian.
Włączenie
- Administrator Webivio włącza Product API beta na koncie (panel admina → użytkownik).
- W panelu: Ustawienia → API — utwórz klucz, skopiuj go raz.
- Wysyłaj
Authorization: Bearer wvi_live_…(alboX-Api-Key).
Endpointy
| Metoda | Ścieżka | Scope | Opis |
|---|---|---|---|
| GET | /api/v1/me | — | Konto, scopes klucza, lista zaimplementowanych capability |
| GET | /api/v1/openapi | — | Spec OpenAPI 3.1 |
| GET | /api/v1/webinars | webinars:read | Lista (kursor, filtr status) |
| POST | /api/v1/webinars | webinars:write | Szkic DRAFT (wymaga Idempotency-Key) |
| GET | /api/v1/webinars/{id} | webinars:read | Szczegóły bez sekretów (token webhooka, token FB, kod powtórki) |
| PATCH | /api/v1/webinars/{id} | webinars:write | Nazwa, tytuł, opis, status DRAFT / NONACTIVE / ARCHIVED |
| DELETE | /api/v1/webinars/{id} | webinars:write | Usunięcie webinaru |
| POST | /api/v1/webinars/{id}/activate | webinars:write | Aktywacja — 409 gdy brak wideo lub harmonogramu |
| GET/PATCH | /api/v1/webinars/{id}/schedule | read/write | Harmonogram (sloty HH:mm, JIT, jednorazowy) |
| GET/PATCH | /api/v1/webinars/{id}/watch-room | read/write | Pokój: URL nagrania, duration, czat, logo, licznik, start desktop/mobile, akcja końcowa |
| GET/PATCH | /api/v1/webinars/{id}/host | read/write | Prowadzący (imię, e-mail, opis, social) |
| GET/POST | /api/v1/webinars/{id}/offers | read/write | Oferty w pokoju (displayUntilEnd liczy koniec z duration) |
| GET/PATCH/DELETE | /api/v1/webinars/{id}/offers/{offerId} | read/write | Jedna oferta |
| GET/POST | /api/v1/webinars/{id}/polls | read/write | Ankiety (min. 2 opcje) |
| GET/PATCH/DELETE | /api/v1/webinars/{id}/polls/{pollId} | read/write | Jedna ankieta |
| GET/POST | /api/v1/webinars/{id}/overlays | read/write | Overlaye (WebinarNotification: treść, czas, ikona) |
| GET/PATCH/DELETE | /api/v1/webinars/{id}/overlays/{overlayId} | read/write | Jeden overlay |
| GET | /api/v1/templates | webinars:read | Lista szablonów (type=register|thank-you) — id, nazwa, typ; bez HTML |
| GET/PATCH | /api/v1/webinars/{id}/registration | read/write | Strona zapisu: pola, zgody, widget, skrypty, templateId (bez HTML Puck) |
| GET/PATCH | /api/v1/webinars/{id}/thank-you | read/write | Strona podziękowania: custom URL, oferta one-time, templateId |
| GET/PATCH | /api/v1/webinars/{id}/waiting | read/write | Strona oczekiwania (nagłówek, teaser, motyw, highlighty) |
| GET | /api/v1/webinars/{id}/stats | stats:read | Lejek: wizyty, zapisy, obecność, replay, klik oferty, sprzedaż. range=today|24h|7days|30days|custom |
| GET | /api/v1/webinars/{id}/participants | participants:read | Lista uczestników (page, pageSize, search) |
| POST | /api/v1/webinars/{id}/participants | participants:write | Zapis uczestnika (webinar ACTIVE; w body email + selectedDate albo instanceId) |
| GET | /api/v1/webinars/{id}/readiness | webinars:read | Czy jest wideo i harmonogram |
| POST | /api/v1/mcp | wg narzędzia | MCP JSON-RPC (initialize, tools/list, tools/call) |
Kreator w panelu nadal zapisuje przez Supabase. PATCH API pokrywa meta, status, harmonogram, pokój, hosta i strony (pola / zgody / widget / templateId). Apply szablonu kopiuje layout na ten webinar i publikuje — GET nigdy nie zwraca HTML ani JSON Puck.
MCP (agenci)
Ten sam klucz wvi_live_…. Claude Desktop / Cursor: URL https://twoja-domena/api/v1/mcp, nagłówek Authorization: Bearer wvi_live_….
Metody: initialize, ping, tools/list, tools/call. Zapis (create/update/delete/activate) idzie od razu — potwierdzenie jest po stronie klienta MCP.
Kawusia w panelu używa tych samych serwisów, ale pyta o Zatwierdź przed utworzeniem szkicu albo aktywacją.
Tworzenie szkicu
curl -X POST https://webivio.com/api/v1/webinars \
-H "Authorization: Bearer wvi_live_YOUR_KEY" \
-H "Idempotency-Key: draft-1" \
-H "Content-Type: application/json" \
-d '{"name":"Mój autowebinar","timezone":"Europe/Warsaw","schedule":{"dailyTimeSlots":["18:00"]}}'
Potem ustaw URL nagrania (PATCH .../watch-room), szablon zapisu (PATCH .../registration z templateId z GET /api/v1/templates?type=register), oferty/ankiety i wywołaj POST .../activate.
Odpowiedź: { "data": { ... }, "requestId": "…" }. Błąd: { "error": { "code": "…", "message": "…" }, "requestId": "…" }.
Bezpieczeństwo
- Klucz w bazie jest zahashowany — nie da się go odczytać ponownie.
- Unieważnienie w Ustawieniach działa od razu.
- Rate limit: 60 żądań/min i 1200/h na klucz.
- Brak CORS
*— API jest do backendu / agentów, nie do przeglądarki gościa.