Documentation

Aozo Chat API

Spaces, direct messages, calls and meeting scheduling — the REST surface behind chat.aozo.in.

Base URLhttps://chat.aozo.in/org/:orgId/ajax
AuthSession cookie (SSO login), Bearer JWT fallback
Formatapplication/json
⚠️ Chat authenticates differently from the rest of the suite

There's no aozo_ API key here. Calling /ajax/sso-login with a Central Auth JWT exchanges it for a signed session cookie, which is what every request below actually runs on. Every workspace-scoped route also requires active membership in :orgId, checked separately from login.

📡 Real-time is polling, not sockets

Aozo Chat doesn't use Socket.io or WebSockets. New messages, typing indicators and unread counts are all driven by client-side AJAX polling. Video/voice meetings are backed by an embedded Jitsi widget — the API only stores meeting metadata, not media.

Getting a session

MethodPathDescription
POST/ajax/sso-loginExchange a Central Auth JWT for a local session cookie
POST/ajax/sync-orgsRefresh your orgs & per-org product registration from Central Auth
POST/ajax/create-workspaceCreate a new org (name)
POST/ajax/switch-orgVerify membership, return the redirect target

Spaces

Channels — the main unit of group conversation.

MethodPathDescription
GET/spacesList spaces you've joined, with last message
GET/all-spacesList every space in the org
POST/spacesCreate a space (name, description)
POST/spaces/:id/joinJoin a space
GET/spaces/:id/membersList members of a space
POST/spaces/:id/membersAdd members (userIds[])
DELETE/spaces/:id/members/:userIdRemove a member
GET/spaces/:id/messagesPaginated messages (?limit=&before=) — marks read as a side effect
GET/spaces/:id/pinnedPinned messages in a space

Direct messages

MethodPathDescription
GET/dmsList your DM threads
POST/dmsGet-or-create a DM thread (otherUserId)
GET/dms/:id/messagesMessages in a thread
GET/dms/:id/pinnedPinned messages in a thread

Messages

MethodPathDescription
POST/sendSend a message to a space or DM
PUT/messages/:idEdit your own message (within 30 minutes)
POST/messages/:id/pinPin a message
POST/messages/:id/reactToggle an emoji reaction
GET/mentionsAutocomplete for @mentions (?spaceId=&q=)
POST/uploadUpload a file (25MB limit)
curl -X POST https://chat.aozo.in/org/YOUR_ORG_ID/ajax/send \
  --cookie "session=YOUR_SESSION_COOKIE" \
  -H "Content-Type: application/json" \
  -d '{
    "spaceId": "space_42",
    "content": "Invoice for Acme Retail just went out 🎉"
  }'

Calls & meetings

MethodPathDescription
POST/callsPlace a 1:1 call (calleeId)
GET/calls/activeCurrent ringing/active call state
POST/calls/:id/acceptAccept a call
POST/calls/:id/declineDecline a call
GET/meetingsList scheduled meetings
POST/meetingsSchedule a meeting (title, scheduledAt, durationMins, participantIds[])
DELETE/meetings/:idCancel a meeting

Members & org

MethodPathDescription
GET/usersActive members of the org
POST/org/membersInvite a member by email — ADMIN only
GET/unread-countsPer-room unread counts