Files
MDietermann 9617f4415c feat: initial commit
Axum/Postgres server with auth, migrations, and Docker setup.
2026-08-13 13:08:13 +02:00

4.9 KiB

API Reference

Base URL: http://localhost:3000/api/v1


Users

Method Path Description
GET /users List all users
POST /users Create a user
GET /users/{id} Get a user
PUT /users/{id} Update a user (display_name, avatar_url, bio)
DELETE /users/{id} Soft-delete a user

POST /users — body

{
  "email": "user@example.com",
  "password_hash": "...",
  "username": "jane",
  "display_name": "Jane",
  "avatar_url": null,
  "bio": null,
  "email_verified": false
}

Auth Tokens

Method Path Description
GET /users/{id}/auth-tokens List tokens for a user
POST /auth-tokens Create a token
DELETE /auth-tokens/{id} Revoke a token

POST /auth-tokens — body

{
  "user_id": "uuid",
  "kind": "refresh_token",
  "expires_at": "2026-09-01T00:00:00Z"
}

kind: password_reset | email_verification | refresh_token

POST /auth-tokens — response includes token (raw value) and record.


Workspaces

Method Path Description
GET /workspaces List all workspaces
POST /workspaces Create a workspace
GET /workspaces/{id} Get a workspace
PUT /workspaces/{id} Update a workspace (name, slug)
DELETE /workspaces/{id} Soft-delete a workspace

POST /workspaces — body

{
  "name": "Acme",
  "slug": "acme",
  "owner_id": "uuid"
}

Workspace Members

Method Path Description
GET /workspaces/{id}/members List members
POST /workspaces/{id}/members Add a member
PUT /workspaces/{workspace_id}/members/{user_id} Update role / display name
DELETE /workspaces/{workspace_id}/members/{user_id} Remove a member

POST body

{
  "user_id": "uuid",
  "role": "member",
  "display_name": null,
  "avatar_url": null
}

role: owner | admin | member


Workspace Invitations

Method Path Description
GET /workspaces/{id}/invitations List invitations
POST /workspaces/{id}/invitations Create an invitation
DELETE /invitations/{id} Delete an invitation

POST body

{
  "created_by": "uuid",
  "max_uses": 10,
  "expires_at": "2026-09-01T00:00:00Z"
}

max_uses and expires_at are optional. The invite token is generated server-side.


Conversations

Method Path Description
GET /conversations List conversations (?workspace_id=uuid)
POST /conversations Create a conversation
GET /conversations/{id} Get a conversation
PUT /conversations/{id} Update a conversation (name, is_public)
DELETE /conversations/{id} Soft-delete a conversation

POST body

{
  "workspace_id": "uuid",
  "kind": "channel",
  "name": "general",
  "is_public": true,
  "created_by": "uuid"
}

kind: dm | group | channel workspace_id is optional (null for DMs).


Conversation Members

Method Path Description
GET /conversations/{id}/members List members
POST /conversations/{id}/members Add a member
DELETE /conversations/{conversation_id}/members/{user_id} Remove a member

POST body

{
  "user_id": "uuid"
}

Messages

Method Path Description
GET /conversations/{id}/messages List messages (chronological)
POST /messages Send a message
GET /messages/{id} Get a message
PUT /messages/{id} Edit a message (content)
DELETE /messages/{id} Soft-delete a message

POST body

{
  "conversation_id": "uuid",
  "user_id": "uuid",
  "content": "Hello!"
}

Attachments

Method Path Description
GET /messages/{id}/attachments List attachments for a message
POST /attachments Create an attachment
DELETE /attachments/{id} Delete an attachment

POST body

{
  "message_id": "uuid",
  "url": "https://...",
  "filename": "file.pdf",
  "mime_type": "application/pdf",
  "size_bytes": 102400
}

Reactions

Method Path Description
GET /messages/{id}/reactions List reactions for a message
POST /reactions Add a reaction
DELETE /reactions/{id} Remove a reaction

POST body

{
  "message_id": "uuid",
  "user_id": "uuid",
  "emoji": "👍"
}

Response conventions

Status Meaning
200 OK
201 Created
204 Deleted (no body)
404 Not found
500 Internal server error (body: error string)

Soft-deleted resources (users, workspaces, conversations, messages) are excluded from all list/get responses.