Product API (beta)

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

  1. Administrator Webivio włącza Product API beta na koncie (panel admina → użytkownik).
  2. W panelu: Ustawienia → API — utwórz klucz, skopiuj go raz.
  3. Wysyłaj Authorization: Bearer wvi_live_… (albo X-Api-Key).

Endpointy

MetodaŚcieżkaScopeOpis
GET/api/v1/me—Konto, scopes klucza, lista zaimplementowanych capability
GET/api/v1/openapi—Spec OpenAPI 3.1
GET/api/v1/webinarswebinars:readLista (kursor, filtr status)
POST/api/v1/webinarswebinars:writeSzkic DRAFT (wymaga Idempotency-Key)
GET/api/v1/webinars/{id}webinars:readSzczegóły bez sekretów (token webhooka, token FB, kod powtórki)
PATCH/api/v1/webinars/{id}webinars:writeNazwa, tytuł, opis, status DRAFT / NONACTIVE / ARCHIVED
DELETE/api/v1/webinars/{id}webinars:writeUsunięcie webinaru
POST/api/v1/webinars/{id}/activatewebinars:writeAktywacja — 409 gdy brak wideo lub harmonogramu
GET/PATCH/api/v1/webinars/{id}/scheduleread/writeHarmonogram (sloty HH:mm, JIT, jednorazowy)
GET/PATCH/api/v1/webinars/{id}/watch-roomread/writePokój: URL nagrania, duration, czat, logo, licznik, start desktop/mobile, akcja końcowa
GET/PATCH/api/v1/webinars/{id}/hostread/writeProwadzący (imię, e-mail, opis, social)
GET/POST/api/v1/webinars/{id}/offersread/writeOferty w pokoju (displayUntilEnd liczy koniec z duration)
GET/PATCH/DELETE/api/v1/webinars/{id}/offers/{offerId}read/writeJedna oferta
GET/POST/api/v1/webinars/{id}/pollsread/writeAnkiety (min. 2 opcje)
GET/PATCH/DELETE/api/v1/webinars/{id}/polls/{pollId}read/writeJedna ankieta
GET/POST/api/v1/webinars/{id}/overlaysread/writeOverlaye (WebinarNotification: treść, czas, ikona)
GET/PATCH/DELETE/api/v1/webinars/{id}/overlays/{overlayId}read/writeJeden overlay
GET/api/v1/templateswebinars:readLista szablonów (type=register|thank-you) — id, nazwa, typ; bez HTML
GET/PATCH/api/v1/webinars/{id}/registrationread/writeStrona zapisu: pola, zgody, widget, skrypty, templateId (bez HTML Puck)
GET/PATCH/api/v1/webinars/{id}/thank-youread/writeStrona podziękowania: custom URL, oferta one-time, templateId
GET/PATCH/api/v1/webinars/{id}/waitingread/writeStrona oczekiwania (nagłówek, teaser, motyw, highlighty)
GET/api/v1/webinars/{id}/statsstats:readLejek: wizyty, zapisy, obecność, replay, klik oferty, sprzedaż. range=today|24h|7days|30days|custom
GET/api/v1/webinars/{id}/participantsparticipants:readLista uczestników (page, pageSize, search)
POST/api/v1/webinars/{id}/participantsparticipants:writeZapis uczestnika (webinar ACTIVE; w body email + selectedDate albo instanceId)
GET/api/v1/webinars/{id}/readinesswebinars:readCzy jest wideo i harmonogram
POST/api/v1/mcpwg narzędziaMCP 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.