Skip to content

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.invite event
  • publishes channel.new to 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