Bookmarks Manager
Single-table demo with JSON tags and per-user privacy.
What you get
- Tags stored as a JSON array — no separate join table needed
- Owner-scoped reads: each user only sees their own bookmarks
- Built-in URL field with 2KB limit
- Smallest possible template for testing the platform
Schema
Copy and apply with PUT /v1/schema or set_schema via MCP. MoonDB auto-creates 2 tables: users, bookmarks.
{
"tables": {
"users": {
"auth_table": true,
"columns": {
"display_name": "string"
}
},
"bookmarks": {
"columns": {
"url": "string required max_length 2048",
"title": "string",
"description": "text",
"tags": "json",
"favicon": "string",
"user_id": "ref users required"
},
"owner_field": "user_id",
"access": {
"read": "owner",
"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/bookmarks list/filter/sort/paginate
GET /api/bookmarks/{id} read one
POST /api/bookmarks create
PATCH /api/bookmarks/{id} partial update
DELETE /api/bookmarks/{id} delete
POST /api/bookmarks/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":"bookmarks"}'
# 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 @bookmarks.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"
}
},
"bookmarks": {
"columns": {
"url": "string required max_length 2048",
"title": "string",
"description": "text",
"tags": "json",
"favicon": "string",
"user_id": "ref users required"
},
"owner_field": "user_id",
"access": {
"read": "owner",
"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 "Bookmarks" template — users (auth_table) + bookmarks with url, title, description, JSON tags array, owner-scoped.
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).