Free until August 30, 2026

Private video visits, built as an API — not a platform.

VonLinkage hands out private video rooms and role-based join tokens over a small HTTP API, hosted and ready to call. Cloud recording, medical transcription, and signed webhooks included. No vendor lock-in, no SDK to fight, no per-seat billing.

0tokens, one contract
0media bytes touched
$0to get started
two-people-in-a-call.sh
# 1. Create a private room
curl -X POST /rooms \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"roomName":"appointment-123"}'

# 2. One role-based token per participant
curl -X POST /rooms/appointment-123/token \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"identity":"doctor-1","role":"doctor"}'

# 3. Client connects to joinUrl with its token
# — VonLinkage never touches the media.
What it is

A communication microservice, hosted for you.

One contract, no vendor concepts leaking into your app. Rooms, tokens, and participants have no database by design — LiveKit already owns the only state worth having, so any instance can answer for any room.

NotBecause
An SDKIt's a service with an HTTP contract, not a library to link against.
An EMRIt stores no clinical data. Rooms and tokens store nothing at all.
A billing systemIt isolates tenants and their credentials; plans and invoicing live upstream.
Features

Everything a telehealth call needs, nothing it doesn't.

Private rooms with real lifecycle, role-based access, cloud recording with an audit trail, batch medical transcription, and signed outbound webhooks.

🔒

Private rooms, no auto-create

LiveKit runs with auto_create: false. A room must be created through the API before anyone can join — verified against a live server with a forged token that still gets refused.

🎭

Role-based join tokens

doctor, patient, nurse, staff, interpreter, and a publish-nothing observer role. Grants are derived server-side — a caller can’t ask for more than its role allows.

🎥

Cloud recording

One call to LiveKit Egress starts a room-composite recording straight to S3-compatible storage. VonLinkage never touches the bytes.

🛡️

Integrity & retention

A background sweep verifies every finished recording actually exists in storage at the right size. Retention purge is opt-in, never a default.

📝

Medical transcription

Finished recordings are batch-transcribed with AWS Transcribe Medical — full text, per-segment timing, and speaker diarization.

🔔

Signed outbound webhooks

recording.completed, recording.failed, transcript.completed, transcript.failed — HMAC-signed, retried, and deduped with a stable delivery id.

Security model

Two tokens. Confusing them is the main way to get this wrong.

A service token proves which system is calling. A join token proves which person may enter which room. Full detail — including role grants and token minting — lives in the API docs.

Service token

Authorization: Bearer <jwt>
Signed by
Your backend, with a shared JWT_SECRET
Verified by
VonLinkage
Proves
Which system is calling
Required on
Every endpoint except /health*, guarded globally

Join token

access_token → LiveKit
Signed by
VonLinkage, with the LiveKit API secret
Verified by
LiveKit
Proves
Which person may enter which room, with which role
Lifetime
Short-lived — default 5 minutes
Free until August 30, 2026

Run your first private video call in minutes.

Sign up, verify your email, and get a full API key — no infrastructure to run, no card required during the free period.