LeoCRM API Documentation
Auto-generated from FastAPI route enumeration. 295 endpoints across 30 tag groups.
Overview
LeoCRM exposes a RESTful API under /api/v1/. All endpoints (except /api/v1/health and /api/v1/auth/login) require authentication via session cookie.
- Swagger UI:
/docs
- ReDoc:
/redoc
- OpenAPI JSON:
/openapi.json
Authentication
- Call
POST /api/v1/auth/login with {email, password} → receives session cookie.
- Include the session cookie in all subsequent requests.
- Call
POST /api/v1/auth/logout to invalidate the session.
Multi-Tenancy
All data is tenant-scoped. The tenant context is derived from the authenticated session. Users with multiple tenants can switch via POST /api/v1/auth/switch-tenant.
Error Format
List endpoints use page (1-based) and page_size (1-100) query parameters. Responses include total, page, page_size, and items.
Core Routes
health (1 endpoint)
| Method |
Path |
Description |
| GET |
/api/v1/health |
Health check — no auth required. Returns status + DB/Redis/storage/worker checks. Response model: HealthResponse |
metrics (1 endpoint)
| Method |
Path |
Description |
| GET |
/api/v1/metrics |
Prometheus metrics endpoint. |
auth (7 endpoints)
| Method |
Path |
Description |
| POST |
/api/v1/auth/login |
Login with email+password. Sets session cookie. Request: LoginRequest, Response: AuthResponse |
| POST |
/api/v1/auth/logout |
Logout — invalidate session, clear cookie. Response: MessageResponse |
| GET |
/api/v1/auth/me |
Get current user + active tenant. Response: AuthResponse |
| GET |
/api/v1/auth/me/permissions |
Get resolved permissions for current user. |
| POST |
/api/v1/auth/switch-tenant |
Switch active tenant. Request: SwitchTenantRequest |
| POST |
/api/v1/auth/password-reset/request |
Request password reset email. Request: PasswordResetRequest |
| POST |
/api/v1/auth/password-reset/confirm |
Confirm password reset with token. Request: PasswordResetConfirm |
users (5 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/users |
List users with pagination. Response: PaginatedUsers |
| POST |
/api/v1/users |
Create a new user (admin only). Request: UserCreate, Response: UserResponse |
| GET |
/api/v1/users/{user_id} |
Get a single user. Response: UserResponse |
| PATCH |
/api/v1/users/{user_id} |
Update user fields. Request: UserUpdate |
| DELETE |
/api/v1/users/{user_id} |
Delete/deactivate a user. |
roles (5 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/roles |
List all roles. |
| POST |
/api/v1/roles |
Create a custom role. |
| GET |
/api/v1/roles/permissions |
Get all available permission definitions. |
| PATCH |
/api/v1/roles/{role_id} |
Update role permissions. |
| DELETE |
/api/v1/roles/{role_id} |
Delete a custom role. |
groups (9 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/groups |
List all groups. |
| POST |
/api/v1/groups |
Create a new group. |
| GET |
/api/v1/groups/{group_id} |
Get a single group. |
| PATCH |
/api/v1/groups/{group_id} |
Update group. |
| DELETE |
/api/v1/groups/{group_id} |
Delete group. |
| GET |
/api/v1/groups/{group_id}/members |
List group members. |
| POST |
/api/v1/groups/{group_id}/members |
Add member to group. |
| DELETE |
/api/v1/groups/{group_id}/members/{user_id} |
Remove member from group. |
| GET |
/api/v1/groups/user/{user_id} |
Get groups for a user. |
tenants (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/tenants |
List tenants for current user. |
| POST |
/api/v1/tenants |
Create a new tenant. |
| GET |
/api/v1/tenants/{tenant_id}/users |
List users in a tenant. |
| POST |
/api/v1/tenants/{tenant_id}/users |
Add user to tenant. |
notifications (6 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/notifications |
List notifications with pagination. |
| PATCH |
/api/v1/notifications/{notification_id}/read |
Mark notification as read. |
| GET |
/api/v1/notifications/unread-count |
Get unread count. Response: UnreadCountResponse |
| GET |
/api/v1/notifications/types |
List notification types. |
| GET |
/api/v1/notifications/preferences |
Get notification preferences. |
| PATCH |
/api/v1/notifications/preferences/{type_key} |
Update notification preference. |
contacts (10 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/contacts |
List contacts with pagination, FTS search, type/folder filter, sorting. |
| POST |
/api/v1/contacts |
Create a contact (company or person). |
| GET |
/api/v1/contacts/export |
Stream contacts as CSV. |
| GET |
/api/v1/contacts/{contact_id} |
Get a single contact. |
| PUT |
/api/v1/contacts/{contact_id} |
Update contact. |
| DELETE |
/api/v1/contacts/{contact_id} |
Soft-delete contact. |
| GET |
/api/v1/contacts/{contact_id}/persons |
List contact persons. |
| POST |
/api/v1/contacts/{contact_id}/persons |
Add contact person. |
| PUT |
/api/v1/contacts/{contact_id}/persons/{person_id} |
Update contact person. |
| DELETE |
/api/v1/contacts/{contact_id}/persons/{person_id} |
Delete contact person. |
contact-folders (6 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/contact-folders |
List contact folders. |
| POST |
/api/v1/contact-folders |
Create a folder. |
| PUT |
/api/v1/contact-folders/{folder_id} |
Update folder. |
| DELETE |
/api/v1/contact-folders/{folder_id} |
Delete folder. |
| PUT |
/api/v1/contact-folders/{folder_id}/reorder |
Reorder folder. |
| PUT |
/api/v1/contact-folders/contacts/{contact_id}/move |
Move contact to folder. |
entity-history (3 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/entity-history/{entity_type}/{entity_id} |
Get change history for an entity. |
| POST |
/api/v1/entity-history/undo/{entity_type}/{entity_id} |
Undo last change. |
| POST |
/api/v1/entity-history/restore |
Restore entity to a specific version. |
import-export (2 endpoints)
| Method |
Path |
Description |
| POST |
/api/v1/import |
Import data from file. |
| POST |
/api/v1/import/preview |
Preview import data. |
plugins (11 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/plugins |
List all plugins. |
| GET |
/api/v1/plugins/manifest |
Get plugin manifest schema. |
| GET |
/api/v1/plugins/active-manifests |
Get manifests of all active plugins. |
| POST |
/api/v1/plugins/install-url |
Install plugin from URL. |
| POST |
/api/v1/plugins/upload |
Upload and install plugin ZIP. |
| POST |
/api/v1/plugins/{name}/install |
Install a discovered plugin. |
| POST |
/api/v1/plugins/{name}/activate |
Activate a plugin. |
| POST |
/api/v1/plugins/{name}/deactivate |
Deactivate a plugin. |
| GET |
/api/v1/plugins/{name}/config |
Get plugin configuration. |
| PATCH |
/api/v1/plugins/{name}/config |
Update plugin configuration. |
| DELETE |
/api/v1/plugins/{name} |
Uninstall a plugin. |
ai-copilot (3 endpoints)
| Method |
Path |
Description |
| POST |
/api/v1/ai/copilot/query |
Ask the AI copilot a question. |
| POST |
/api/v1/ai/copilot/execute |
Execute an AI copilot action. |
| GET |
/api/v1/ai/copilot/history |
Get copilot conversation history. |
workflows (10 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/workflows |
List workflow definitions. |
| POST |
/api/v1/workflows |
Create a workflow. |
| GET |
/api/v1/workflows/{workflow_id} |
Get a workflow. |
| PATCH |
/api/v1/workflows/{workflow_id} |
Update a workflow. |
| DELETE |
/api/v1/workflows/{workflow_id} |
Delete a workflow. |
| POST |
/api/v1/workflows/{workflow_id}/instances |
Start a workflow instance. |
| GET |
/api/v1/workflows/instances |
List workflow instances. |
| GET |
/api/v1/workflows/instances/{instance_id} |
Get a workflow instance. |
| POST |
/api/v1/workflows/instances/{instance_id}/advance |
Advance workflow to next step. |
| POST |
/api/v1/workflows/instances/{instance_id}/cancel |
Cancel a workflow instance. |
user-preferences (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/user/preferences |
Get all user preferences. |
| GET |
/api/v1/user/preferences/{key} |
Get a specific preference. |
| PUT |
/api/v1/user/preferences/{key} |
Set a preference. |
| DELETE |
/api/v1/user/preferences/{key} |
Delete a preference. |
currencies (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/currencies |
List currencies. |
| POST |
/api/v1/currencies |
Create a currency. |
| PATCH |
/api/v1/currencies/{currency_id} |
Update a currency. |
| DELETE |
/api/v1/currencies/{currency_id} |
Delete a currency. |
taxes (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/taxes |
List tax rates. |
| POST |
/api/v1/taxes |
Create a tax rate. |
| PATCH |
/api/v1/taxes/{tax_id} |
Update a tax rate. |
| DELETE |
/api/v1/taxes/{tax_id} |
Delete a tax rate. |
sequences (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/sequences |
List number sequences. |
| POST |
/api/v1/sequences |
Create a sequence. |
| PATCH |
/api/v1/sequences/{sequence_id} |
Update a sequence. |
| DELETE |
/api/v1/sequences/{sequence_id} |
Delete a sequence. |
system-settings (2 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/system-settings |
Get system settings. Response: SystemSettingsResponse |
| PUT |
/api/v1/system-settings |
Upsert system settings. Request: SystemSettingsUpsert, Response: SystemSettingsResponse |
attachments (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/attachments |
List attachments. |
| POST |
/api/v1/attachments |
Upload an attachment. |
| GET |
/api/v1/attachments/{attachment_id} |
Download an attachment. |
| DELETE |
/api/v1/attachments/{attachment_id} |
Delete an attachment. |
addresses (4 endpoints)
| Method |
Path |
Description |
| GET |
/api/v1/addresses |
List addresses. |
| POST |
/api/v1/addresses |
Create an address. |
| PATCH |
/api/v1/addresses/{address_id} |
Update an address. |
| DELETE |
/api/v1/addresses/{address_id} |
Delete an address. |
audit (1 endpoint)
| Method |
Path |
Description |
| GET |
/api/v1/audit-log |
Query audit log entries. |
Plugin Routes
automation (Automation & Agents)
Agent Builder, Automation Builder, Cron-Scheduler, Agent Runner.
| Method |
Path |
Description |
| GET/POST |
/api/v1/automation/* |
Automation definitions, triggers, execution logs. |
agents (AI Agents)
| Method |
Path |
Description |
| GET/POST/PUT/DELETE |
/api/v1/agents/* |
AI agent CRUD and runner endpoints. |
dms (Document Management System)
19 endpoints for file and folder management.
| Method |
Path |
Description |
| GET |
/api/v1/dms/files |
List files. |
| POST |
/api/v1/dms/files/upload |
Upload a file. |
| GET |
/api/v1/dms/files/{file_id} |
Get file metadata. |
| GET |
/api/v1/dms/files/{file_id}/preview |
Preview a file. |
| POST |
/api/v1/dms/files/{file_id}/share |
Share a file. |
| GET/POST |
/api/v1/dms/folders |
Folder CRUD. |
| GET |
/api/v1/dms/search |
Search documents. |
| GET |
/api/v1/dms/shared-with-me |
Files shared with current user. |
mail (Email Integration)
50 endpoints for IMAP/SMTP email management.
| Method |
Path |
Description |
| GET/POST |
/api/v1/mail/accounts |
Email account management. |
| GET/POST |
/api/v1/mail/folders |
Folder management. |
| GET |
/api/v1/mail/{mail_id} |
Get a specific email. |
| POST |
/api/v1/mail/send |
Send an email. |
| POST |
/api/v1/mail/drafts |
Save draft. |
| GET |
/api/v1/mail/search |
Search emails. |
| GET |
/api/v1/mail/threads |
List email threads. |
| POST |
/api/v1/mail/pgp/keys |
PGP key management. |
| POST |
/api/v1/mail/rules |
Mail filter rules. |
| POST |
/api/v1/mail/vacation |
Vacation responder. |
calendar (Calendar & Scheduling)
21 endpoints for calendar management.
| Method |
Path |
Description |
| GET/POST |
/api/v1/calendar/entries |
Calendar entry CRUD. |
| GET/POST |
/api/v1/calendars |
Calendar CRUD. |
| GET |
/api/v1/calendar/kanban |
Kanban board view. |
| POST |
/api/v1/calendar/import |
Import ICS. |
| GET |
/api/v1/calendar/{calendar_id}/ics-feed |
ICS feed. |
| POST |
/api/v1/resources |
Resource booking. |
search (Unified Search)
7 endpoints for cross-entity search.
| Method |
Path |
Description |
| POST |
/api/v1/search |
Unified search across all entities. |
| GET |
/api/v1/search/providers |
List search providers. |
| POST |
/api/v1/search/reindex |
Rebuild search index. |
| POST |
/api/v1/search/similar |
Find similar entities. |
| GET |
/api/v1/search/suggest |
Search suggestions. |
| GET |
/api/v1/search/stats |
Search index statistics. |
reports (Report Generator)
8 endpoints for report templates and generation.
| Method |
Path |
Description |
| GET/POST |
/api/v1/reports/templates |
Report template CRUD. |
| POST |
/api/v1/reports/generate |
Generate a report. |
| GET |
/api/v1/reports/{report_id} |
Get report status. |
| GET |
/api/v1/reports/{report_id}/download |
Download generated report. |
entity-links (Entity Linking)
4 endpoints for connecting entities.
| Method |
Path |
Description |
| GET |
/api/v1/contacts/{contact_id}/files |
Get files linked to a contact. |
| POST/DELETE |
/api/v1/dms/files/{file_id}/link |
Link/unlink a file to an entity. |
| GET |
/api/v1/dms/files/{file_id}/links |
Get all links for a file. |
kommunikation (Unified Messaging)
23 endpoints for conversations and messages.
| Method |
Path |
Description |
| GET/POST |
/api/v1/comm/conversations |
Conversation CRUD. |
| GET/POST |
/api/v1/comm/conversations/{id}/messages |
Message list and send. |
| POST |
/api/v1/comm/conversations/{id}/participants |
Manage participants. |
| POST |
/api/v1/comm/messages/{id}/reactions |
Message reactions. |
| GET |
/api/v1/comm/miniapps |
List mini-apps. |
ai-proactive (Proactive AI)
8 endpoints for AI insights and suggestions.
| Method |
Path |
Description |
| GET |
/api/v1/ai-proactive/suggestions |
Get AI suggestions. |
| GET |
/api/v1/ai-proactive/suggestions/stream |
SSE stream of suggestions. |
| POST |
/api/v1/ai-proactive/suggestions/{id}/act |
Act on a suggestion. |
| POST |
/api/v1/ai-proactive/suggestions/{id}/dismiss |
Dismiss a suggestion. |
| GET/PUT |
/api/v1/ai-proactive/settings |
Proactive AI settings. |
ai-assistant (AI Assistant)
30 endpoints for AI chat sessions, providers, models, and tools.
| Method |
Path |
Description |
| GET/POST |
/api/v1/ai/sessions |
Chat session CRUD. |
| GET |
/api/v1/ai/sessions/{id}/messages |
List messages in session. |
| POST |
/api/v1/ai/sessions/{id}/stream |
Stream chat completion (SSE). |
| GET/POST |
/api/v1/ai/providers |
AI provider CRUD. |
| GET/POST |
/api/v1/ai/models |
AI model CRUD. |
| GET/POST |
/api/v1/ai/presets |
Preset CRUD. |
| GET |
/api/v1/ai/tools |
List available AI tools. |
ai-ui-control (AI UI Control)
WebSocket and REST endpoints for AI-driven UI control.
| Method |
Path |
Description |
| WebSocket |
/ws/ai-ui-control |
Real-time UI command stream. |
| POST |
/api/v1/ai-ui-control/command |
Send UI command from AI agent. |
tags (Tag Management)
8 endpoints for tag CRUD and assignment.
| Method |
Path |
Description |
| GET/POST |
/api/v1/tags |
Tag CRUD. |
| POST/DELETE |
/api/v1/tags/assign |
Assign/remove tag from entity. |
| POST |
/api/v1/tags/bulk-assign |
Bulk assign tags. |
| GET |
/api/v1/tags/{tag_id}/entities |
Get entities with a tag. |
permissions (Permission Management)
5 endpoints for file-level permissions and share links.
| Method |
Path |
Description |
| GET/POST |
/api/v1/dms/files/{file_id}/permissions |
File permission CRUD. |
| POST |
/api/v1/dms/files/{file_id}/share-link |
Create public share link. |
| DELETE |
/api/v1/dms/share-links/{link_id} |
Revoke share link. |
public-share (Public Sharing)
2 endpoints — no auth required, token-based access.
| Method |
Path |
Description |
| GET |
/api/public/share/{token} |
Access shared resource via token. |
| POST |
/api/public/share/{token} |
Interact with shared resource. |
Schema Examples
LoginRequest
AuthResponse
UserCreate
UserResponse
HealthResponse
UnreadCountResponse
KI Integration Notes
For AI Agents
- Health Check: Run
python scripts/ai_health_check.py --base-url <url> --token <token> before and after updates.
- Deploy: Use
python scripts/ai_deploy.py --dry-run to preview, then python scripts/ai_deploy.py for real deployment.
- OpenAPI: The full OpenAPI spec is available at
/openapi.json — use it for dynamic endpoint discovery.
- Safe Methods: GET endpoints are safe to probe. POST/PUT/DELETE require careful payload construction.
- Session Auth: AI agents should call
POST /api/v1/auth/login first, then use the returned cookie for all subsequent requests.