API - Channel Routes
Source of truth: d3chat/backend/app/routers/channels.py
Prefix: /api/v1/channels
All routes below require Bearer auth.
POST /channels
Creates channel and owner membership.
Request:
{ "name": "engineering", "is_dm": false, "encryption_type": "sender_keys"}GET /channels
Lists channels where current user is a member.
GET /channels/{channel_id}
Returns channel metadata for members only.
PATCH /channels/{channel_id}
Updates mutable fields (currently name).
DELETE /channels/{channel_id}
Deletes channel. Requires owner membership role.
POST /channels/{channel_id}/join
Adds current user as member if not already joined.
POST /channels/{channel_id}/leave
Removes current user membership.
GET /channels/{channel_id}/members
Lists channel members with username/domain/role/profile metadata.
POST /channels/{channel_id}/members
Adds a member by user ID.
Request:
{ "user_id": "<uuid>" }Behavior:
- rejects DMs (
400) - rejects duplicate membership (
409) - if target is remote user (
is_local=false):- marks channel federated
- relays
channel.inviteevent
- publishes
channel.newto added user via Redis
POST /channels/dm
Creates or returns existing DM between current user and target user.
Request:
{ "user_id": "<target-user-uuid>" }Behavior:
- sets
is_dm=true - uses
encryption_type="x3dh" - notifies both users through Redis
channel.new