Skip to main content

API Reference

Backend API endpoints for plugin development.

Base URL

Production: https://api.my-desk.ai
Development: http://localhost:8000

Authentication

All requests require a session token passed as a cookie:

curl -X GET "https://api.my-desk.ai/api/plugins/my-plugin/data" \
-H "Cookie: session_token=YOUR_TOKEN"

Plugin Data API

List Plugin Data

Retrieve all data for a plugin filtered by user.

GET /api/plugins/{plugin_id}/data

Parameters:

NameTypeDescription
plugin_idstringPlugin identifier
data_typestring (optional)Filter by data type
limitinteger (optional)Max items to return (default: 50)
offsetinteger (optional)Pagination offset

Response:

{
"items": [
{
"id": "uuid",
"plugin_id": "my-plugin",
"user_id": "user-uuid",
"data_type": "item",
"content": { "title": "Example" },
"metadata": { "created_at": "2024-01-01T00:00:00Z" }
}
],
"total": 100,
"has_more": true
}

Get Single Item

GET /api/plugins/{plugin_id}/data/{item_id}

Response:

{
"id": "uuid",
"plugin_id": "my-plugin",
"user_id": "user-uuid",
"data_type": "item",
"content": { "title": "Example", "body": "..." },
"metadata": { "created_at": "2024-01-01T00:00:00Z" }
}

Create Item

POST /api/plugins/{plugin_id}/data

Request Body:

{
"data_type": "item",
"content": {
"title": "New Item",
"body": "Content here"
},
"metadata": {
"status": "active"
}
}

Response: Returns the created item with generated id.

Update Item

PUT /api/plugins/{plugin_id}/data/{item_id}

Request Body:

{
"content": {
"title": "Updated Title"
},
"metadata": {
"updated_at": "2024-01-02T00:00:00Z"
}
}

Delete Item

DELETE /api/plugins/{plugin_id}/data/{item_id}

Response:

{
"success": true
}

Plugin Handlers API

Call custom backend handlers defined in your plugin.

Call Handler

POST /api/plugins/{plugin_id}/call/{handler_name}

Request Body:

{
"args": {
"param1": "value1",
"param2": "value2"
}
}

Response: Depends on the handler implementation.

Example:

curl -X POST "https://api.my-desk.ai/api/plugins/notes/call/create_note" \
-H "Content-Type: application/json" \
-H "Cookie: session_token=YOUR_TOKEN" \
-d '{"args": {"title": "My Note", "body": "Content"}}'

Search API

Search plugin data using semantic similarity.

POST /api/plugins/{plugin_id}/search

Request Body:

{
"query": "search terms",
"data_type": "item",
"limit": 10,
"filters": {
"status": "active"
}
}

Response:

{
"results": [
{
"item": { ... },
"score": 0.95
}
]
}

Widget API

Get data for dashboard widgets.

Get Widget Data

GET /api/plugins/{plugin_id}/widget

Response: Depends on plugin's get_widget_data handler.

Error Responses

All errors follow this format:

{
"detail": "Error message",
"code": "ERROR_CODE"
}

Common Error Codes:

CodeStatusDescription
NOT_FOUND404Resource not found
UNAUTHORIZED401Not authenticated
FORBIDDEN403Not authorized for this resource
VALIDATION_ERROR422Invalid request data
INTERNAL_ERROR500Server error

Rate Limits

EndpointLimit
Read operations100/minute
Write operations30/minute
Search operations20/minute

TypeScript Types

interface PluginData {
id: string;
plugin_id: string;
user_id: string;
data_type: string;
content: Record<string, any>;
metadata: Record<string, any>;
created_at: string;
updated_at?: string;
}

interface ListResponse<T> {
items: T[];
total: number;
has_more: boolean;
}

interface SearchResult<T> {
item: T;
score: number;
}

OpenAPI Spec

Full OpenAPI specification available at:

https://api.my-desk.ai/openapi.json