VibeLive Documentation

Account API Reference

Server-to-server REST API for automating account, project, room, and member management from your backend. No browser session required.

← Docs hub Full spec (ACCOUNT_API.md)

Authentication — Two Tiers

POST-only · credentials via header

The Account API uses two separate credentials. Which one you need depends on the endpoint:

CredentialHeaderScopeUsed for
Account token X-Account-Auth-Token Your whole account projects.jsp — list, create, update, delete projects
Project key X-Project-Key One specific project project.jsp, rooms.jsp, members.jsp

Both credentials are returned when you call POST /api/session/authAccounts.jsp with action=getData:
{ "accountId":"…", "email":"…", "token":"<account_token>", "projectId":"vlp_…", "projectKey":"<project_key>" }

All endpoints are POST-only. Base URL: POST https://makedo.com/api/manage/{endpoint}.jsp

Trial projects have no project key and cannot use project-scoped endpoints (project.jsp, rooms.jsp, members.jsp). Upgrade to a Starter or Builder plan to unlock them.

Endpoint Quick Reference

EndpointAuthActions
projects.jsp list · create · update · delete · restore · rotate-key
project.jsp Project key Project summary — room counts, member stats, live count, plan tier
rooms.jsp Project key list · get · create · update · delete · disable · enable · end-meeting · regenerate-code · bulk-delete
members.jsp Project key list-users · list-members · remove-user

projects.jsp — Project Management

No projectId in request headers — the account token identifies your account. Targeted actions (update, delete, etc.) take projectId in the POST body.

  • action=list Returns all projects owned by the account. Each item includes projectId, title, status, plan, is_trial, room_count, live_count, expiration_ts, created_at.
  • action=create Params: title. Enforces your plan's project limit. Returns projectId, title, and projectKey.
    Store the projectKey immediately. It is only returned once at creation. To retrieve a key later, use rotate-key (which invalidates the old key).
  • action=update Params: projectId, and at least one of title or description. Returns {"status":"ok"}.
  • action=delete Params: projectId. Soft-deletes the project and all its rooms. Returns {"status":"ok"}.
  • action=restore Params: projectId. Restores an archived project to active status. Enforces the plan project limit. Fails if the plan limit is already reached.
  • action=rotate-key Params: projectId. Generates a new project key and immediately invalidates the old one. Returns {"status":"ok","projectKey":"…"}. All callers using the old key receive 403 until updated.

project.jsp — Project Summary

Project key

Params: projectId. No action field — always returns the full project summary.

Response fields:

FieldDescription
projectId, title, statusIdentity and status: active, pending, disabled, archived
planSubscription tier: trial, starter, builder, or user
room_countTotal non-deleted rooms
live_countParticipants currently inside a room across the project
max_roomsPlan-tier cap on active rooms (−1 = unlimited)
member_stats{ total_members, email_verified_members, unverified_members } — aggregate across all rooms
allow_anon_users, is_trial, expiration_ts, created_atProject configuration fields

rooms.jsp — Room Management

Project key

All requests include projectId and action. Room-specific actions also require roomId. Room status values: pending · open · active · cooldown · closed · disabled · archived.

  • action=list All rooms for the project. Each item: roomId, title, room_code, status, allows_guests, max_size, member_count, live_count, created_at.
  • action=get Params: roomId. Full room detail including session_count, total_duration_seconds, last_session_at.
  • action=create Params: title, description, max_size (default 8), allows_guests (default true). Returns roomId, title, room_code, room_status. Fails with quota_exceeded at the plan room limit.
  • action=update Params: roomId + any of title, description, max_size, allows_guests. At least one field required. Returns {"status":"ok","roomId":"…"}.
  • action=delete Params: roomId. Kicks active participants, removes room from the SFU, soft-deletes. Returns {"status":"ok"}.
  • action=disable Params: roomId, optional reason. Kicks participants and blocks new joins until re-enabled. Returns {"status":"ok"}.
  • action=enable Params: roomId. Re-enables a disabled room. Returns {"status":"ok"}.
  • action=end-meeting Params: roomId, optional reason, optional reopen_after_seconds. Kicks all participants. reopen_after_seconds: 0 = reopen immediately (default); positive = reopen after N seconds; negative = stay disabled until manually enabled.
  • action=regenerate-code Params: roomId. Generates a new 6-character join code, immediately invalidating the old one. Returns {"status":"ok","room_code":"…"}.
  • action=bulk-delete Optional statuses array (default: all terminal states). Deletes rooms with status closed, disabled, or archived. Active/open rooms are never affected. Returns {"status":"ok","deleted_count":N}.

members.jsp — Users & Members

Project key
  • action=list-users All users who have joined at least one room in the project. Each item: userId, username, is_live, room_count, last_activity, created_at. is_live is true when the user's status is nowinside or lobby_mid in any room.
  • action=list-members Params: roomId. All member records for that room. Each item: memberId, userId, username, display_name, status, is_admin, joined_at. Status nowinside or lobby_mid = currently active in the room.
  • action=remove-user Params: userId. Kicks the user from any rooms they are currently in, marks all their memberships deleted, removes the project from their access, and revokes their project credentials. Returns {"status":"ok"}.

Error Codes

error_codeHTTPMeaning
method_not_allowed405Request was not POST
unauthorized403Missing or invalid credential (account token or project key)
auth_expired401Token presented but expired — refresh and retry
invalid_param400Missing or invalid request parameter
not_found404Object not found, or belongs to a different account or project
quota_exceeded429Plan project or room limit reached
server_error500Internal server error

Examples

1 — Delete inactive rooms, then check the count

# Bulk-delete closed and disabled rooms
curl -s -X POST https://makedo.com/api/manage/rooms.jsp \
  -H "X-Project-Key: $PROJECT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"vlp_...","action":"bulk-delete","statuses":["closed","disabled"]}'
# → {"status":"ok","deleted_count":4}

# Confirm remaining room count vs. plan limit
curl -s -X POST https://makedo.com/api/manage/project.jsp \
  -H "X-Project-Key: $PROJECT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"vlp_..."}'
# → {"projectId":"vlp_...","room_count":16,"max_rooms":20,...}

2 — Create a project and capture its key

curl -s -X POST https://makedo.com/api/manage/projects.jsp \
  -H "X-Account-Auth-Token: $ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"create","title":"My New App"}'
# → {"projectId":"vlp_...","title":"My New App","projectKey":"..."}
# ⚠ Store the projectKey now — it is not returned again.

3 — Build a live-session dashboard

# Fetch all rooms; filter client-side where live_count > 0
curl -s -X POST https://makedo.com/api/manage/rooms.jsp \
  -H "X-Project-Key: $PROJECT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"vlp_...","action":"list"}'
# Returns all rooms with live_count per room

Full technical spec including all request/response shapes, security notes, and test checklist: spec_docs/ACCOUNT_API.md