Team Chat
Channels + messages, authenticated-only read, author-only edits.
What you get
- Channels are workspace-wide: any authenticated user reads them
- Messages cascade-delete when their parent channel is deleted
- Authors can edit/delete their own messages, but not others'
- Drop-in for a workspace assistant or internal team tool
Schema
Copy and apply with PUT /v1/schema or set_schema via MCP. MoonDB auto-creates 3 tables: users, channels, messages.
{
"tables": {
"users": {
"auth_table": true,
"columns": {
"display_name": "string required"
}
},
"channels": {
"columns": {
"name": "string required unique max_length 60",
"topic": "string max_length 200",
"created_by": "ref users required"
},
"owner_field": "created_by",
"access": {
"read": "authenticated",
"create": "auth",
"update": "owner",
"delete": "owner"
}
},
"messages": {
"columns": {
"channel_id": "ref channels required cascade",
"body": "text required max_length 4000",
"user_id": "ref users required"
},
"owner_field": "user_id",
"access": {
"read": "authenticated",
"create": "auth",
"update": "owner",
"delete": "owner"
}
}
}
}
Auto-generated endpoints
The moment the schema applies, this REST surface is live (replace {project_id} with the id returned by POST /v1/projects):
GET /api/users list/filter/sort/paginate
GET /api/users/{id} read one
POST /api/users create
PATCH /api/users/{id} partial update
DELETE /api/users/{id} delete
POST /api/users/bulk atomic bulk insert
POST /auth/signup (from this auth_table)
POST /auth/login (from this auth_table)
GET /auth/me Bearer {token}
GET /api/channels list/filter/sort/paginate
GET /api/channels/{id} read one
POST /api/channels create
PATCH /api/channels/{id} partial update
DELETE /api/channels/{id} delete
POST /api/channels/bulk atomic bulk insert
GET /api/messages list/filter/sort/paginate
GET /api/messages/{id} read one
POST /api/messages create
PATCH /api/messages/{id} partial update
DELETE /api/messages/{id} delete
POST /api/messages/bulk atomic bulk insert
Plus auto-generated /v1/openapi.json (OpenAPI 3.0.3) and /v1/llm-context (machine-readable agent reference) for any client generator or coding agent.
Apply via REST
# 1. create the project
curl -X POST https://api.moondb.ai/v1/projects \
-H "X-API-Key: mk_..." \
-H "Content-Type: application/json" \
-d '{"name":"team-chat"}'
# 2. apply the template schema
curl -X PUT https://api.moondb.ai/p/{project_id}/v1/schema \
-H "X-Admin-Key: sk_..." \
-H "Content-Type: application/json" \
-d @team-chat.schema.json
Apply via MCP
If your agent has the MoonDB MCP server installed (see install), one tool call applies the template:
# call set_schema via MCP (Cursor, Claude Code, Windsurf)
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "set_schema", "arguments": {
"project_id": "...",
"schema": {
"tables": {
"users": {
"auth_table": true,
"columns": {
"display_name": "string required"
}
},
"channels": {
"columns": {
"name": "string required unique max_length 60",
"topic": "string max_length 200",
"created_by": "ref users required"
},
"owner_field": "created_by",
"access": {
"read": "authenticated",
"create": "auth",
"update": "owner",
"delete": "owner"
}
},
"messages": {
"columns": {
"channel_id": "ref channels required cascade",
"body": "text required max_length 4000",
"user_id": "ref users required"
},
"owner_field": "user_id",
"access": {
"read": "authenticated",
"create": "auth",
"update": "owner",
"delete": "owner"
}
}
}
}
} } }
Prompt your agent
Or just paste this one-liner into Cursor / Claude Code / Lovable after the MoonDB prompt is in .cursorrules / CLAUDE.md:
Apply the MoonDB "Team Chat" template — users, channels (auth-read, owner-managed), messages (cascade on channel delete, owner-scoped writes).
Extending the template
Send the full updated schema (with your additions) to PUT /v1/schema — MoonDB diffs against the current version and auto-migrates. Destructive changes (dropping columns, narrowing enums, renaming) require "confirm_destructive": true in the body. Read more about schema updates →
Ship this in 30 seconds
Sign up free, create a project, paste the schema. The API is live before your kettle boils.
Get an API keyRelated templates
Todo App
Classic personal task list with auth, owner-scoped writes, and priority enums.
Blog with Comments
Public-read posts and comments, authenticated authors, owner-scoped edits.
Habit Tracker
Daily habits with composite-unique logs (one entry per habit per day).