Blender, Adobe & Resolve Bridges
Send commands to a Blender, Premiere Pro / After Effects or DaVinci Resolve session connected through the Kolbo plugin.
When a user has the Kolbo plugin open in Blender, Premiere Pro / After Effects, or DaVinci Resolve Studio, that app registers a live session with Kolbo. The bridge routes let your API key send commands to that session and read their results. Kolbo relays the command; the plugin carries it out inside the user's app.
The three bridges share one contract. Replace {app} with blender, adobe or resolve:
GET /api/v1/{app}/sessions connected sessions
POST /api/v1/{app}/commands queue a command
GET /api/v1/{app}/commands/:commandId read a command's state and resultPOST /api/v1/{app}/logout and Blender's POST /api/v1/blender/agent/plan are used by the plugins themselves and only accept the plugin's own device credential (403 BLENDER_KEY_REQUIRED, ADOBE_KEY_REQUIRED or RESOLVE_KEY_REQUIRED otherwise).
Responses use { "success": true, ... }; errors use { "success": false, "code": "...", "error": "..." }.
Sessions
GET /api/v1/{app}/sessions takes page (default 1) and page_size (1–100, default 25; 400 INVALID_PAGINATION otherwise) and returns sessions plus pagination: { page, page_size, total, has_more }. Each session has session_id, instance_id, name, {app}_version (for example blender_version), platform, capabilities, connected, connected_at, last_seen_at and expires_at. A session that stops checking in expires after about 50 seconds.
Queue a command
POST /api/v1/{app}/commands needs a write-enabled API key (403 API_KEY_READ_ONLY).
{
"command_type": "timeline.get",
"payload": {},
"idempotency_key": "timeline-read-0001"
}| Field | Required | Notes |
|---|---|---|
command_type | Yes | One of the app's command types (below). Anything else returns 400 INVALID_COMMAND_TYPE |
payload | No | Object, default {}. Up to 256 KiB (413 PAYLOAD_TOO_LARGE). Fields depend on the command type; unknown fields are rejected |
session_id | No | Needed only when more than one session is connected (409 SESSION_REQUIRED). With none connected: 409 NO_ACTIVE_SESSION |
idempotency_key | No | Repeating it with the same request returns the original command (200, replayed: true); with a different request, 409 IDEMPOTENCY_KEY_REUSED |
Unknown top-level fields return 400 INVALID_REQUEST. A new command returns 202; if the plugin could not be reached the response is 503 with success: false. Up to 128 commands may be active per account (429 ACTIVE_COMMAND_LIMIT_REACHED). URLs in a payload must be public https addresses (400 INVALID_URL).
| App | Command types |
|---|---|
| Blender | scene.get, docs.search, viewport.capture, scene.apply_operations, media.import, render.start, scene.undo, file.operation, python.execute |
| Adobe | project.get, timeline.get, media.import, timeline.place, sequence.create, captions.import, comp.edit (After Effects), script.run, frame.capture |
| Resolve | project.get, timeline.get, media.import, timeline.edit, script.run, frame.capture |
A command type a given host cannot perform (for example an After Effects command sent to Premiere Pro) is rejected by the plugin. Script commands (python.execute, script.run) take code (up to 64 KiB) and a required purpose (up to 500 characters).
Approval and status
Read-only commands (Blender scene.get and docs.search; Adobe and Resolve project.get and timeline.get) run without approval. Every other command needs the user to approve it in the Kolbo panel. The command's risk is read, write or sensitive; scripts, Blender file operations, payloads with external URLs and deleting edits are sensitive, and risk_reasons says why.
GET /api/v1/{app}/commands/:commandId returns the command:
| Field | Notes |
|---|---|
command_id, session_id, command_type | Identity |
status | queued, awaiting_approval, running, succeeded, failed, denied or canceled |
risk, risk_reasons, approval_required, approval | Approval details |
result, error | Set when the command finishes |
created_at, updated_at, completed_at, expires_at | Commands expire 24 hours after creation |
Poll until status is succeeded, failed, denied or canceled. awaiting_approval is not a polling state: ask the user to approve or deny the command in the Kolbo panel. Commands belong to the account that created them; any other id returns 404 COMMAND_NOT_FOUND.
Limits
| Route | Limit |
|---|---|
GET .../sessions, GET .../commands/:commandId | 120 per minute |
POST .../commands | 60 per minute and 300 per hour, per account |
Command limits count every request and return 429 RATE_LIMITED.
MCP
The MCP server exposes these as blender_*, adobe_* and resolve_* tools, one per command type, with blender_get_command_status, adobe_get_command_status and resolve_get_command_status for results.