Skip to content
GurukulLiveDevelopers
Get started

Authentication

Your servers authenticate with API keys. Browsers and apps never see a key — they get join links, which GurukulLive turns into a session limited to one meeting.

API keys

Organization owners and admins create keys in Settings → API keys. A key looks like vmk_live_… (production) or vmk_test_… (sandbox organization). GurukulLive stores only a SHA-256 hash and the last four characters, so the full key is shown exactly once.

Send it on every request — preferably as a bearer token:

http
GET /api/v1/public/meetings?status=LIVE HTTP/1.1
Host: gurukullive.example.com
Authorization: Bearer vmk_live_…

# also accepted:
X-API-Key: vmk_live_…

A key acts as your organization, not as a person: it can manage the organization's users, classes and meetings within its scopes. Write operations are written to the audit log with the key's name and the admin who created it.

curl -X GET https://gurukullive.example.com/api/v1/public/meetings?status=LIVE&limit=20 \
  -H "Authorization: Bearer $VMEET_API_KEY"

Scopes

Give each integration only what it needs. A request without the right scope fails with 403 insufficient_scope.

ScopeGrants
users:readList and read users
users:writeCreate/upsert, update, deactivate, reactivate and remove users; bulk provisioning
classes:readRead classes, courses, batches, teacher assignments and enrollments
classes:writeManage classes, courses, batches, assignments and enrollments
meetings:readList meetings, live/final rosters
meetings:writeCreate, update, start, end and delete meetings; mint join links (HOST/COHOST links need this scope)
recordings:readList recordings and create playback / embeddable player URLs
recordings:writeDelete recordings
attendance:readAttendance per meeting and per class (JSON or CSV)
webhooks:readList webhook endpoints and their delivery logs
webhooks:writeCreate, update, delete, test and rotate webhook endpoints; redeliver
analytics:readUsage: participant-minutes, recording hours, storage
*Every current and future scope. Only the organization owner can create these.

Expiry, IP allowlists and revocation

  • Expiry — optional. Expired keys fail with 401 api_key_expired.
  • IP allowlist — optional list of IPv4/IPv6 addresses or CIDR ranges. Requests from anywhere else fail with 403 ip_not_allowed.
  • Revocation is immediate: the next request fails with 401 api_key_revoked.
  • The settings page shows when each key was last used (updated about once a minute).

Rotating a key without downtime

  1. Create a new key with the same scopes.
  2. Deploy it to your servers.
  3. Watch the old key's “last used” stop moving, then revoke it.

Plan access

API access is part of your GurukulLive plan. If the plan does not include it, requests fail with 402 plan_limit_reached. Some plans include read-only access (recordings:read, attendance:read) — other scopes then return 402 as well.

Meeting sessions (browsers and apps)

End users authenticate with a join link, not an API key. Exchanging the link's token at POST /api/v1/join-tokens/exchange returns a short-lived JWT whose scope is a single meeting (meeting:<id>). It works only on that meeting's routes, is refreshable for up to 24 hours with POST /api/v1/join-tokens/refresh, and is revoked when the user is deactivated. GurukulLive's own embed and join-link pages handle all of this for you; native apps that build their own UI use it directly.

Checklist

  • Keep keys in a secret manager or environment variables — never in source control, browsers or mobile apps.
  • One key per integration and environment, with the smallest set of scopes.
  • Add an IP allowlist when your servers have fixed egress addresses.
  • Log the requestId from error responses; support can trace it.