APPSOCOMDocs

REST API

Base URL: https://api.appsocom.dev. Every request needs your project's API key:

bash
-H "Authorization: Bearer $APPSOCOM_API_KEY"

Bodies are JSON (Content-Type: application/json), and so are responses. Errors come back as {"error":"…"} with an HTTP status (see Errors). Room and user IDs use letters, numbers and . _ : @ -, up to 128 characters.

Tokens

Method Path
POST /tokens Mint a join token. See Join tokens.

Rooms

Method Path
GET /rooms/:roomId Participants, people waiting, and room settings
PATCH /rooms/:roomId Settings: {"locked":true}, {"chat":false}, {"waitingRoom":true}, {"spotlight":["u_1"]}, {"metadata":{…}}
DELETE /rooms/:roomId End the room for everyone
POST /rooms/:roomId/chat Post a message: {"text":"…","to":"u_1"} (to makes it private)
POST /rooms/:roomId/mute {"userId":"u_1" or "*","devices":["mic"],"lock":false}
POST /rooms/:roomId/admit Let someone in from the waiting room: {"userId":"u_1"} or "*"
DELETE /rooms/:roomId/hands Lower everyone's hand (/hands/:userId for one person)
GET /rooms/:roomId/attendance Who attended and for how long (?format=csv for a spreadsheet)
DELETE /rooms/:roomId/attendance Delete attendance records
PUT /rooms/:roomId/breakouts Start breakouts: {"groups":[{"name":"Table 1","userIds":["u_1","u_2"]}]}
DELETE /rooms/:roomId/breakouts End breakouts
POST /rooms/:roomId/move Move someone: {"userId":"u_1","group":"g2"} (null means the main room)

Participants

Method Path
PATCH /rooms/:roomId/participants/:userId Change role, permissions (null undoes changes), metadata, name or trackPermissions
DELETE /rooms/:roomId/participants/:userId Remove someone. ?ban=true keeps them out until the room empties.
DELETE /rooms/:roomId/bans/:userId Let a banned person back in

Recording

Method Path
POST /rooms/:roomId/recording Start: {} for audio, {"video":true} for video
GET /rooms/:roomId/recording What's recording now
DELETE /rooms/:roomId/recording Stop
GET /rooms/:roomId/recordings Finished recordings and their files
GET /rooms/:roomId/recordings/:recordingId/:file Download a file

Live streaming

Method Path
POST /rooms/:roomId/ingress Create an OBS/WHIP ingest point
GET /rooms/:roomId/ingress List them, with whether each is live
DELETE /rooms/:roomId/ingress/:ingressId Delete one; the stream ends and the key stops working
POST /rooms/:roomId/egress Stream the room out
GET /rooms/:roomId/egress Status
DELETE /rooms/:roomId/egress/:egressId Stop
POST /rooms/:roomId/egress/:egressId/destinations Add a destination while live
DELETE /rooms/:roomId/egress/:egressId/destinations/:id Remove one

AI agents

Method Path
POST /rooms/:roomId/agents Start an agent
DELETE /rooms/:roomId/agents/:agentId Stop it

Polls, Q&A and captions

Method Path
POST /rooms/:roomId/polls Start a poll
GET /rooms/:roomId/polls Polls and results, with votes
POST /rooms/:roomId/polls/:pollId/close Close a poll
DELETE /rooms/:roomId/polls/:pollId Delete a poll
GET /rooms/:roomId/questions Q&A questions
PUT /rooms/:roomId/captions {"on":true,"language":"en"}
GET /rooms/:roomId/transcript ?format=json, txt or vtt
POST /rooms/:roomId/summary {"style":"lesson"} or "meeting"

Your project

Method Path
GET /usage/limits This month's usage against your limits
GET /keys API keys (no secrets)
POST /keys Create a key: {"name":"live"}. The secret is shown once.
DELETE /keys/:keyId Delete a key. You can't delete your last one.
GET /webhook Webhook URL and secret
PUT /webhook {"url":"https://…"}, or {"url":null} to turn it off
POST /webhook/rotate-secret New signing secret, used at once
POST /webhook/test Send a webhook_test event