Every call requires Authorization: Bearer <key>. Rotate from workspace settings — old keys are revoked instantly. Server-side only; never ship a live key to the browser.
Base URLhttps://flaxxa.com/api/v1/webinar
Webinars
Webinars API
Create a webinar in any mode — `live`, `automated` (evergreen as-if-live), `jit` (just-in-time), `on_demand`, `hybrid` or `series` — then configure and publish it. A new webinar starts as a `draft`.
GET/webinars
List webinars
Paginated {data, …}. Orders by newest first.
POST/webinars
Create webinar
{ title, mode, description?, timezone?, scheduled_at?, settings? }. Returns the draft with id, slug, status.
GET/webinars/{id}
Retrieve webinar
The webinar with its settings.
PUT/webinars/{id}
Update webinar
title, mode, description, timezone, status. Moving status out of draft publishes it.
DELETE/webinars/{id}
Delete webinar
Soft-deletes (reversible).
Sessions & schedule
Sessions & schedule API
Live / hybrid / series webinars materialise one or more sessions; evergreen modes spawn a per-registrant session at sign-up. Set the premiere time and the just-in-time start offset here.
GET/webinars/{id}/sessions
List sessions
Scheduled occurrences with status, starts_at, ends_at.
POST/webinars/{id}/sessions
Add a session
{ starts_at, ends_at }.
PUT/webinars/{id}/schedule
Set schedule
{ starts_at, duration_minutes, jit_offset_minutes, automated_start_mode }. starts_at is a wall-clock in the webinar timezone.
DELETE/webinars/{id}/sessions/{session}
Cancel session
Cancels one occurrence.
Registrants
Registrants API
Your audience. People register on the public page (fires app.webinar.registrant.registered); you can also import, export and run GDPR operations.
GET/registrants
List registrants
Filter: webinar_id, status, q, date_from, date_to; paginated {data, meta}.
GET/registrants/export · /registrants/{id}/export
Export
CSV of the audience / full GDPR access payload for one registrant.
POST/webinars/{id}/registrants/import
Import CSV
Bulk-add registrants from parsed rows; duplicates skipped, capped by plan.
POST/registrants/bulk
Bulk action
{ action: unsubscribe|resubscribe|erase, ids[] }.
DELETE/registrants/{id}
Erase (GDPR)
Anonymise + soft-delete a registrant.
Engagement & Q&A
Engagement & Q&A API
Review and answer questions across every session, and moderate a live session's chat and Q&A as host.
GET/webinars/{id}/questions
Q&A inbox
Every session's questions aggregated for the host.
POST/webinars/{id}/questions/{question}/answer
Answer
Answer from the inbox; optionally emails the attendee.
Minute-by-minute retention curve; the live dashboard.
GET/analytics/cohort-retention
Cohort
Tenant-wide cohort retention.
Commerce, growth & surveys
Commerce, growth & surveys API
Paid-webinar pricing and orders, affiliates and short links, and surveys / quizzes.
GET/orders · /coupons
Orders & coupons
Paid-webinar merchant revenue.
PUT/webinars/{id}/pricing
Set pricing
Price a webinar (scope webinar.commerce.manage).
GET/affiliates · /short-links
Growth
Affiliates (+ tracking links) and vanity short links.
GET/surveys
Surveys
Surveys & quizzes with results.
Live broadcasting
Live broadcasting API
Drive a live or hybrid broadcast: readiness, go live, recording and RTMP simulcast. Live minutes, attendees per session and simulcast follow your plan.
GET/webinars/{id}/live-status
Readiness
Whether the room can go live + the current state.
POST/webinars/{id}/go-live · /end-broadcast
Go live / end
Start the broadcast (fires app.webinar.session.started) / end it (fires app.webinar.session.ended).
POST /api/v1/webhooks { url, subscribed_events[] } — deliveries carry X-Flaxxa-Event and X-Flaxxa-Signature (HMAC-SHA256 of the raw body with your endpoint secret).
POST/../webhooks
Subscribe
Scope workspace.webhooks.manage. The secret is returned once.
DELETE/../webhooks/{id}
Unsubscribe
Stops delivery.
Webhook events
Which webhook events can I subscribe to?
Subscribe via POST /webhooks. Verify X-Flaxxa-Signature on every payload.
app.webinar.webinar.created
A webinar was created (as a draft).
app.webinar.webinar.published
A webinar left draft — scheduled or live.
app.webinar.webinar.updated
A webinar's details changed.
app.webinar.registrant.registered
Someone registered on the public registration page.
app.webinar.session.started
A live / premiere session went on air.
app.webinar.session.ended
A session ended (its recording finalizes shortly after).
Errors
What errors can the API return?
All errors return a JSON envelope: { error: { code, message, details } }. Retry idempotent calls on 5xx with exponential backoff.
Code
Name
When it fires
401
unauthenticated
API key missing, expired or revoked.
403
insufficient_scope
Key valid but lacks the scope — webinar.webinar.create to create, webinar.webinar.manage to change, webinar.webinar.view to read.
404
not_found
No webinar / session / registrant with that id in this workspace.
422
validation_failed
{ message, errors } — e.g. mode must be one of live, automated, jit, on_demand, hybrid, series.
429
rate_limited
120 requests/minute per key by default.
Conventions
Which rules apply to every request?
Every Flaxxa app's API follows the same authentication, rate limits, idempotency and webhook signing.
Bearer auth
Every API call uses a Bearer token. Keys belong to a workspace and are scoped per app. Create and revoke them from workspace API settings.
Rate limits
Each key can make 120 requests a minute unless the app sets its own limit. Going over returns 429 with a Retry-After header.
Idempotency
Send an Idempotency-Key header on a POST and a retry with the same key within 24 hours returns the first response instead of running again.
Signed webhooks
Every webhook payload carries an X-Flaxxa-Signature HMAC-SHA256 header made with the secret you get when you subscribe. Verify it before processing.
Create an API key in your workspace and send it as a Bearer token. Each key carries scopes, such as webinar.webinar.create to create webinars or webinar.registrant.view to read registrants.
https://flaxxa.com/api/v1/webinar. Requests and responses are JSON.
Webinar created, published and updated, registrant registered, and session started and ended. Each delivery is signed with HMAC-SHA256 in the X-Flaxxa-Signature header.
Yes. Requests are limited per key, 120 a minute by default; a 429 response means wait and retry.
Yes. A REST API at https://flaxxa.com/api/v1/webinar, called with a workspace API key scoped to Flaxxa Webinar.
Each key can make 120 requests a minute unless the app sets its own limit. Going over returns 429 with a Retry-After header.
Every webhook carries an X-Flaxxa-Signature header: an HMAC-SHA256 of the payload made with the secret you get when you subscribe. Recompute it and compare before processing.
Send an Idempotency-Key header on the POST. A retry with the same key within 24 hours returns the first response instead of running again.
Get started in minutes
Ship faster with Flaxxa Webinar.
Create a workspace, make an API key in its settings, and send your first request.