6.1 KiB
📡 API Documentation
Base URL: http://localhost:8000
🗂️ Notes
List All Notes
GET /api/notes
Returns all notes with their metadata and folder structure.
Example:
curl http://localhost:8000/api/notes
Get Note Content
GET /api/notes/{note_path}
Retrieve the content of a specific note.
Example:
curl http://localhost:8000/api/notes/folder/mynote.md
Create/Update Note
POST /api/notes/{note_path}
Content-Type: application/json
{
"content": "# My Note\nNote content here..."
}
Response:
{
"success": true,
"path": "test.md",
"message": "Note created successfully",
"content": "# My Note\nNote content here..."
}
Note: When creating a new note, the on_note_create hook is triggered, allowing plugins to modify the initial content. The response includes the potentially modified content.
Linux/Mac:
curl -X POST http://localhost:8000/api/notes/test.md \
-H "Content-Type: application/json" \
-d '{"content": "# Hello World"}'
Windows PowerShell:
curl.exe -X POST http://localhost:8000/api/notes/test.md -H "Content-Type: application/json" -d "{\"content\": \"# Hello World\"}"
Delete Note
DELETE /api/notes/{note_path}
Example:
curl -X DELETE http://localhost:8000/api/notes/test.md
Move Note
POST /api/notes/move
Content-Type: application/json
{
"oldPath": "note.md",
"newPath": "folder/note.md"
}
🖼️ Images
Get Image
GET /api/images/{image_path}
Retrieve an image file with authentication protection.
Example:
curl http://localhost:8000/api/images/folder/_attachments/image-20240417093343.png
Security Note: This endpoint requires authentication and validates that:
- The image path is within the notes directory (prevents directory traversal)
- The file exists and is a valid image format
- The requesting user is authenticated (if auth is enabled)
Upload Image
POST /api/upload-image
Content-Type: multipart/form-data
file: <image file>
note_path: <path of note to attach to>
Upload an image file to the _attachments directory. Images are automatically organized per-folder and named with timestamps to prevent conflicts.
Supported formats: JPG, JPEG, PNG, GIF, WEBP
Maximum size: 10MB
Response:
{
"success": true,
"path": "folder/_attachments/image-20240417093343.png",
"filename": "image-20240417093343.png",
"message": "Image uploaded successfully"
}
Example (using curl):
curl -X POST http://localhost:8000/api/upload-image \
-F "file=@/path/to/image.png" \
-F "note_path=folder/mynote.md"
Windows PowerShell:
curl.exe -X POST http://localhost:8000/api/upload-image -F "file=@C:\path\to\image.png" -F "note_path=folder/mynote.md"
Notes:
- Images are stored in
_attachmentsfolders relative to the note's location - Filenames are automatically timestamped (e.g.,
image-20240417093343.png) - Images appear in the sidebar navigation and can be viewed/deleted directly
- Drag & drop images into the editor automatically uploads and inserts markdown
- All image access requires authentication when security is enabled
📁 Folders
Create Folder
POST /api/folders
Content-Type: application/json
{
"path": "Projects/2025"
}
Delete Folder
DELETE /api/folders/{folder_path}
Deletes a folder and all its contents.
Example:
curl -X DELETE http://localhost:8000/api/folders/Projects/Archive
Move Folder
POST /api/folders/move
Content-Type: application/json
{
"oldPath": "OldFolder",
"newPath": "NewFolder"
}
Rename Folder
POST /api/folders/rename
Content-Type: application/json
{
"oldPath": "Projects",
"newName": "Work"
}
🔍 Search
Search Notes
GET /api/search?q={query}
Example:
curl "http://localhost:8000/api/search?q=hello"
🎨 Themes
List Themes
GET /api/themes
Get Theme CSS
GET /api/themes/{theme_id}
Example:
curl http://localhost:8000/api/themes/dark
🔌 Plugins
Plugins can hook into various events in the application lifecycle.
Available Plugin Hooks
| Hook | Triggered When | Can Modify Data |
|---|---|---|
on_note_create |
New note is created | ✅ Yes (return modified content) |
on_note_save |
Note is being saved | ✅ Yes (return transformed content, or None) |
on_note_load |
Note is loaded | ✅ Yes (return transformed content, or None) |
on_note_delete |
Note is deleted | ❌ No |
on_search |
Search is performed | ❌ No |
on_app_startup |
App starts | ❌ No |
See PLUGINS.md for full documentation on creating plugins.
List Plugins
GET /api/plugins
Toggle Plugin
POST /api/plugins/{plugin_name}/toggle
Content-Type: application/json
{
"enabled": true
}
Linux/Mac:
curl -X POST http://localhost:8000/api/plugins/note_stats/toggle \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
Windows PowerShell:
curl.exe -X POST http://localhost:8000/api/plugins/note_stats/toggle -H "Content-Type: application/json" -d "{\"enabled\": true}"
Calculate Note Stats
GET /api/plugins/note_stats/calculate?content={markdown_content}
🔗 Graph
Get Note Graph
GET /api/graph
Returns the relationship graph between notes (internal links).
⚙️ System
Get Config
GET /api/config
Returns application configuration.
Health Check
GET /health
Returns system health status.
API Info
GET /api
Self-documenting endpoint listing all available API routes.
📝 Response Format
All endpoints return JSON responses:
Success:
{
"success": true,
"data": { ... }
}
Error:
{
"detail": "Error message"
}
💡 Tip: Use the /api endpoint to get a live, self-documented list of all available endpoints!