REST API
Base URL: https://api.appsocom.dev. Every request needs your project's API key:
bash Copy -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