mirror of
https://github.com/dsebastien/obsidian-cli-rest.git
synced 2026-07-22 07:02:18 +00:00
189 lines
5.1 KiB
Markdown
189 lines
5.1 KiB
Markdown
---
|
|
title: API reference
|
|
nav_order: 10
|
|
---
|
|
|
|
# API reference
|
|
|
|
Base URL: `http://127.0.0.1:27124` (default)
|
|
|
|
## Endpoints
|
|
|
|
### Public endpoints (no authentication required)
|
|
|
|
#### Health check
|
|
|
|
```
|
|
GET /api/v1/health
|
|
```
|
|
|
|
Returns server status, CLI availability, and configuration.
|
|
|
|
Response example:
|
|
|
|
```json
|
|
{
|
|
"ok": true,
|
|
"command": "health",
|
|
"exitCode": 0,
|
|
"stdout": "{\"status\":\"ok\",\"cli\":{\"available\":true,\"version\":\"1.12.2\",\"binaryPath\":\"/usr/local/bin/obsidian\"},\"server\":{\"port\":27124,\"bindAddress\":\"127.0.0.1\",\"restEnabled\":true,\"mcpEnabled\":true}}",
|
|
"stderr": "",
|
|
"duration": 0
|
|
}
|
|
```
|
|
|
|
#### List commands
|
|
|
|
```
|
|
GET /api/v1/commands
|
|
```
|
|
|
|
Returns all available CLI commands with metadata.
|
|
|
|
Response example:
|
|
|
|
```json
|
|
{
|
|
"ok": true,
|
|
"command": "commands",
|
|
"exitCode": 0,
|
|
"stdout": "[{\"command\":\"help\",\"httpMethod\":\"GET\",\"category\":\"general\",\"dangerous\":false,\"description\":\"Display available commands\"}]",
|
|
"stderr": "",
|
|
"duration": 0
|
|
}
|
|
```
|
|
|
|
### Protected endpoints (API key required)
|
|
|
|
#### Execute CLI command
|
|
|
|
```
|
|
GET|POST|DELETE /api/v1/cli/{command}
|
|
Authorization: Bearer <api-key>
|
|
```
|
|
|
|
Executes an Obsidian CLI command and returns the result.
|
|
|
|
- **GET** — Read-only commands (list, read, search)
|
|
- **POST** — Write/action commands (create, append, open)
|
|
- **DELETE** — Removal commands (delete, uninstall, remove)
|
|
- **POST** is always accepted as a fallback for any command
|
|
|
|
##### GET request format
|
|
|
|
Parameters are passed as query strings:
|
|
|
|
```
|
|
GET /api/v1/cli/search?query=hello&vault=MyVault&flags=total,verbose
|
|
```
|
|
|
|
| Parameter | Description |
|
|
| ------------- | ---------------------------------------------- |
|
|
| `vault` | Target vault name |
|
|
| `flags` | Comma-separated boolean flags |
|
|
| Any other key | Passed as a named parameter to the CLI command |
|
|
|
|
##### POST/DELETE request format
|
|
|
|
Parameters are passed as JSON body:
|
|
|
|
```json
|
|
{
|
|
"vault": "MyVault",
|
|
"params": {
|
|
"query": "hello",
|
|
"name": "test"
|
|
},
|
|
"flags": ["total", "verbose"]
|
|
}
|
|
```
|
|
|
|
| Field | Type | Description |
|
|
| -------- | -------- | ------------------------------- |
|
|
| `vault` | string | Target vault name (optional) |
|
|
| `params` | object | Key-value parameters (optional) |
|
|
| `flags` | string[] | Boolean flags (optional) |
|
|
|
|
##### Response format
|
|
|
|
Success (`exitCode` is 0):
|
|
|
|
```json
|
|
{
|
|
"ok": true,
|
|
"command": "files",
|
|
"exitCode": 0,
|
|
"stdout": "file1.md\nfile2.md",
|
|
"stderr": "",
|
|
"duration": 42
|
|
}
|
|
```
|
|
|
|
CLI error (`exitCode` is non-zero):
|
|
|
|
```json
|
|
{
|
|
"ok": false,
|
|
"error": "CLI command failed",
|
|
"command": "read",
|
|
"exitCode": 1,
|
|
"stdout": "",
|
|
"stderr": "File not found: missing.md",
|
|
"duration": 15
|
|
}
|
|
```
|
|
|
|
Server error:
|
|
|
|
```json
|
|
{
|
|
"ok": false,
|
|
"error": "Command is blocked: eval"
|
|
}
|
|
```
|
|
|
|
#### MCP endpoint
|
|
|
|
```
|
|
POST /mcp
|
|
Authorization: Bearer <api-key>
|
|
Content-Type: application/json
|
|
```
|
|
|
|
StreamableHTTP transport for the Model Context Protocol. Exposes 2 tools (`search` and `execute`) using the Code Mode pattern for progressive command discovery. See [MCP integration](mcp-integration.md) for setup details.
|
|
|
|
## URL mapping
|
|
|
|
CLI colons become slashes in URLs:
|
|
|
|
| CLI command | REST URL |
|
|
| ---------------- | ---------------------------- |
|
|
| `files` | `/api/v1/cli/files` |
|
|
| `property:set` | `/api/v1/cli/property/set` |
|
|
| `daily:append` | `/api/v1/cli/daily/append` |
|
|
| `plugin:install` | `/api/v1/cli/plugin/install` |
|
|
| `sync:status` | `/api/v1/cli/sync/status` |
|
|
|
|
## HTTP status codes
|
|
|
|
| Code | Meaning | When |
|
|
| ---- | --------------------- | ---------------------------------------------- |
|
|
| 200 | Success | Command executed successfully |
|
|
| 400 | Bad request | Malformed JSON body or invalid parameters |
|
|
| 401 | Unauthorized | Missing or invalid API key |
|
|
| 403 | Forbidden | Command is blocked or dangerous without opt-in |
|
|
| 404 | Not found | Unknown command or disabled interface |
|
|
| 405 | Method not allowed | Wrong HTTP method for the command |
|
|
| 422 | Unprocessable entity | CLI returned non-zero exit code |
|
|
| 500 | Internal server error | Unexpected server failure |
|
|
| 503 | Service unavailable | Obsidian CLI binary not found |
|
|
|
|
## CORS
|
|
|
|
Cross-origin requests are disabled by default. Enable CORS in plugin settings if you need to call the API from a browser.
|
|
|
|
When enabled, the server responds to `OPTIONS` preflight requests and adds appropriate `Access-Control-Allow-*` headers.
|
|
|
|
## Rate limiting
|
|
|
|
There is no built-in rate limiting. The server processes requests sequentially via CLI execution. Each request spawns a CLI process, so very rapid requests may queue up. The request timeout setting (default: 30 seconds) prevents requests from hanging indefinitely.
|