API Reference¶
REST API documentation for Marionette.
Base URL¶
Authentication¶
All API requests require an API key in the Authorization header:
Sessions¶
Create Session¶
Request:
{
"agent": "claude",
"api_key": "sk-ant-xxx",
"name": "my-session",
"labels": {
"user": "alice",
"project": "api"
},
"lifecycle_mode": "on_demand",
"idle_timeout_seconds": 1800
}
Response:
{
"id": "sess_0002xK9mNpV1StGXR8",
"name": "my-session",
"status": "pending",
"agent": "claude",
"workspace_id": "ws_0002xK9mNpV1StGXR9",
"labels": {"user": "alice", "project": "api"},
"created_at": "2024-01-15T10:30:00Z"
}
List Sessions¶
Get Session¶
Suspend Session¶
Resume Session¶
Terminate Session¶
Tasks¶
Create Task¶
Request:
{
"session_id": "sess_0002xK9mNpV1StGXR8",
"prompt": "Build a REST API with authentication",
"timeout_seconds": 3600,
"max_retries": 2
}
Response:
{
"id": "task_0002xK9mNqW2TuHYS9",
"session_id": "sess_0002xK9mNpV1StGXR8",
"prompt": "Build a REST API with authentication",
"status": "pending",
"created_at": "2024-01-15T10:35:00Z"
}
List Tasks¶
Get Task¶
Get Task Logs¶
Response:
{
"items": [
{"stream": "stdout", "content": "Creating main.go...", "sequence": 1, "created_at": "..."},
{"stream": "stdout", "content": "Writing code...", "sequence": 2, "created_at": "..."}
],
"total": 2
}
Execute Task¶
Manually trigger execution of a pending task.
Cancel Task¶
Retry Task¶
Retry a failed task.
Permission Requests¶
List Permissions¶
GET /api/v1/permissions
GET /api/v1/permissions?status=pending
GET /api/v1/permissions?session_id=sess_xxx
Get Permission¶
Approve Permission¶
Request:
Deny Permission¶
Request:
Runners¶
List Runners¶
Get Runner¶
Tunnels¶
Create Tunnel¶
Request:
Response:
{
"id": "tun_0002xK9mNrX3UvIZT0",
"session_id": "sess_0002xK9mNpV1StGXR8",
"type": "http",
"local_port": 3000,
"public_url": "https://tun-abc123.marionette.example.com",
"token": "ttok_xxx",
"expires_at": "2024-01-15T12:30:00Z"
}
List Tunnels¶
Close Tunnel¶
Workspaces¶
Create Workspace¶
Request:
List Workspaces¶
Get Workspace¶
Update Workspace¶
Delete Workspace¶
WebSocket Endpoints¶
Log Streaming¶
Stream task logs in real-time via WebSocket.
Messages:
Event Stream¶
Stream server events (sessions, tasks, permissions).
Events:
session.status_changedtask.createdtask.status_changedpermission.requestedpermission.responded
Browser/Desktop Streaming¶
Stream browser or desktop frames via WebSocket.
Error Responses¶
All errors follow this format:
{
"error": {
"code": "not_found",
"message": "Session not found",
"details": {
"session_id": "sess_invalid"
}
}
}
Error Codes¶
| Code | HTTP Status | Description |
|---|---|---|
bad_request |
400 | Invalid request format |
unauthorized |
401 | Invalid or missing API key |
forbidden |
403 | Insufficient permissions |
not_found |
404 | Resource not found |
conflict |
409 | Resource state conflict |
rate_limited |
429 | Too many requests |
internal_error |
500 | Server error |
Rate Limiting¶
Default limits:
| Endpoint | Limit |
|---|---|
| Session creation | 10/minute |
| Task creation | 30/minute |
| Log streaming | 100 connections |
Rate limit headers:
Pagination¶
List endpoints support pagination:
Response includes pagination info: