4.9 KiB
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.