Multi-tenant WebRTC control plane

Real‑time video, summoned in one API call.

Invoker mints LiveKit join tokens, namespaced rooms, and time-boxed TURN credentials for every tenant in your app — so you can ship video features in an afternoon and skip the SFU ops, ICE config, and 3 a.m. pager.

Open the console Read the docscurl ready · no credit card
live · control plane
your backendPOST /v1/tokensAuthorization: Bearer …
invoker
mint · gate · rotate
your end userbrowser · mobile
livekit + turnmedia planews://invoker.technical45.com
Quickstart

Three calls and you're live.

Provision a tenant key, mint a join token from your backend, then connect from the browser with any LiveKit client SDK. The whole loop is two HTTP calls plus a WebSocket.

curl
node
py
# Create your first tenant key. Returns the secret ONCE.
curl https://invoker.technical45.com/v1/admin/keys \
  -H "X-Admin-Key: $INVOKER_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "tenant_id": "your-org", "label": "prod-backend" }'

# →
# {
#   "public_key": "ivk_pub_8f3a…",
#   "secret":     "ivk_sec_6e1c…  (store this now)"
# }
How it works

Your backend stays in charge.
We just answer the phone.

Invoker is a control plane, not an identity provider for your users. Your backend authenticates the user however it already does, then asks Invoker for a token. End users never see our console — only the join token they need.

① Your side

your backend
Authenticates your user (your IdP, your session)
nodepythongo·any HTTP server
your end user
Browser, iOS, Android, RN
useslivekit-client

② Invoker control plane

POST /v1/tokens
Mints short-lived LiveKit join JWTs
jwtscopedttl 1h
POST /v1/ice
Time-boxed TURN credentials per session
hmacexpires 10m
operator console
Manage keys, rooms, webhooks
viaArca (OIDC)

③ Media plane

livekit sfu
Selective forwarding, simulcast, recording
webrtcws
coturn cluster
UDP / TCP / TLS relay for stubborn NATs
34785349
events
Webhooks: participant_joined, room_finished, etc.
1authYour user logs into your app. You issue your own session.
2mintYour backend calls Invoker with its tenant key. We return a join token + ICE.
3connectYour client hands the token to livekit-client. Media plane opens.
4observeWebhooks stream to your backend. Console shows what's live.
Use cases

Anywhere two people
need to see each other.

Invoker is opinionated about ops — not about your product. Bring the workflow, we bring the rooms.

Tele‑health

HIPAA-friendly rooms with per-visit JWTs. The doctor's session never outlasts the appointment, and recording can be off by default per tenant.

Live shopping

One host, ten thousand viewers, low-latency simulcast with chat moderation hooks. Spin a room up from a campaign trigger.

Virtual classrooms

Cohort rooms with role-based grants — student can publish video, observer can only watch. Webhook every join to your LMS.

Customer support

Escalate chat to face-time in one click. Disposable rooms, capped session length, recording for the QA shelf.

Social watch parties

Sync playback to a room of friends. Picture-in-picture for the host, voice-only for the lurkers.

AI voice agents

Drop an agent into a room as a participant. Stream PCM in, stream synthesized speech out — and stop paying for cold WebSocket reconnects.

Wire it up
before standup.

Open the console with your Arca account. The first key is free. There's no quota until you ship.

Token mint p50 — 18ms
TURN relay — 4 regions
Tenant isolation — kill switch per key
SDKs — node, python, go, ruby