Direct messaging and presence. Conversations, contacts, profiles and call logs are Postgres-backed; display name, bio, status text and nicknames are encrypted at rest (they're PII). Non-PII UI preferences live in a settings_json blob. Identity is read from the session on every call — there's no anonymous surface.
Source: shared/api-core/src/routes/msg.ts.
Profile
| Method | Path | Auth | Notes |
|---|
GET | /api/msg/profile | Bearer (session) | Your own profile. |
PATCH | /api/msg/profile | Bearer (session) | Update display name, bio, status. |
GET | /api/msg/profile/links | Bearer (session) | Your public profile-links blob. |
PUT | /api/msg/profile/links | Bearer (session) | Replace the links blob. |
GET | /api/msg/profile/links/:zid | Bearer (session) | Another machine's public links. |
GET | /api/msg/profile/:zid | Bearer (session) | Another machine's public profile. |
| Method | Path | Auth | Notes |
|---|
GET | /api/msg/conversations | Bearer (session) | Conversation list. |
POST | /api/msg/conversations | Bearer (session) | Open / append to a conversation. |
GET | /api/msg/contacts | Bearer (session) | Contact list. |
POST | /api/msg/contacts | Bearer (session) | Add a contact. |
GET | /api/msg/contacts/search/:term | Bearer (session) | Search contacts. |
PATCH | /api/msg/contacts/:zid | Bearer (session) | Edit a contact (nickname etc.). |
DELETE | /api/msg/contacts/:zid | Bearer (session) | Remove a contact. |
Settings, presence & calls
| Method | Path | Auth | Notes |
|---|
GET | /api/msg/settings | Bearer (session) | UI preferences. |
PATCH | /api/msg/settings | Bearer (session) | Update preferences. |
PUT | /api/msg/status | Bearer (session) | Set presence / status. |
GET | /api/msg/ice-servers | Bearer (session) | ICE servers for WebRTC calls. |
GET | /api/msg/calls/history | Bearer (session) | Call history. |
GET | /api/msg/calls/missed-count | Bearer (session) | Missed-call badge count. |
POST | /api/msg/calls/log | Bearer (session) | Record a call. |