Download OpenAPI specification:
The Donobu API provides a comprehensive suite of endpoints for automating web browser interactions through AI-driven and deterministic flows. A flow is Donobu's core resource: it represents a sequence of browser actions executed against a target website, driven by an AI agent, explicit user instructions, or a predetermined script.
Flows operate in one of three execution modes:
| Mode | Description |
|---|---|
AUTONOMOUS |
An AI agent decides what actions to take based on the overall objective. Requires a GPT configuration. |
INSTRUCT |
The flow waits for explicit user-submitted tool calls at each step. No GPT configuration required. |
DETERMINISTIC |
The flow executes a fixed sequence of tool calls provided at creation time. No AI decision-making. |
A flow transitions through the following states:
UNSTARTED → INITIALIZING → (RUNNING_ACTION ↔ QUERYING_LLM_FOR_NEXT_ACTION | WAITING_ON_USER_FOR_NEXT_ACTION) → SUCCESS or FAILED
Flows may also be PAUSED and later RESUMING during execution.
POST /api/gpt-configs/{name} (required for AUTONOMOUS mode).POST /api/agents/{name}.POST /api/flows with a targetWebsite and overallObjective.GET /api/flows/{flowId} until it reaches a terminal state (SUCCESS or FAILED).result field.Create, manage, query, and inspect automation flows. Flows are the core resource in Donobu — each flow represents a sequence of browser actions executed against a target website to achieve an objective.
Retrieves a paginated list of flows with optional filtering. Results are ordered by
startedAt in descending order (newest first). Use the nextPageToken from the response
to fetch subsequent pages.
| name | string Filter by exact flow name match. |
| startedAfter | number Include only flows whose |
| startedBefore | number Include only flows whose |
| runMode | string (RunMode) Enum: "AUTONOMOUS" "INSTRUCT" "DETERMINISTIC" Filter by execution mode. |
| state | string (FlowState) Enum: "UNSTARTED" "INITIALIZING" "QUERYING_LLM_FOR_NEXT_ACTION" "WAITING_ON_USER_FOR_NEXT_ACTION" "PAUSED" "RESUMING" "RUNNING_ACTION" "FAILED" "SUCCESS" Filter by current flow state. |
| limit | integer [ 1 .. 100 ] Maximum number of flows to return per page. Valid range is 1–100. |
| pageToken | string Opaque pagination token returned in a previous response's |
{- "flows": [
- {
- "id": "string",
- "name": "string",
- "createdWithDonobuVersion": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "gptConfigName": "string",
- "hasGptConfigNameOverride": true,
- "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "runMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "result": { },
- "inputTokensUsed": 0,
- "completionTokensUsed": 0,
- "maxToolCalls": 0,
- "startedAt": 0,
- "completedAt": 0,
- "state": "UNSTARTED",
- "nextState": "UNSTARTED",
- "videoDisabled": true
}
], - "nextPageToken": "string"
}Creates and starts a new Donobu flow. The flow begins executing asynchronously after
creation. Poll GET /api/flows/{flowId} to track progress.
At a minimum, targetWebsite is required. For AUTONOMOUS mode, an overallObjective
and a valid GPT configuration (either via the default agent or gptConfigNameOverride)
are also required.
| name | string or null <= 256 characters An optional display name for the flow. Must be fewer than 256 characters. |
object or null Browser configuration for the flow. If omitted, a default local Chromium browser is used. | |
| envVars | Array of strings or null Names of environment variables (previously stored via |
Array of objects or null (CustomTool) Custom user-defined tools to make available during the flow. | |
| defaultMessageDuration | number or null Default duration (in milliseconds) for in-browser messages from the flow agent. |
| callbackUrl | string or null A URL to receive an HTTP POST when the flow completes. The POST body will contain |
| targetWebsite required | string The website URL to navigate to when starting the flow. |
| overallObjective | string or null The high-level objective for the flow to accomplish. Required when |
| allowedTools | Array of strings or null An explicit list of tool names the flow is permitted to use. If omitted, the default tool set is used. |
| resultJsonSchema | any or null A JSON Schema defining the expected structure of the flow's result. When specified, Donobu will attempt to extract a conforming result object upon flow completion. |
| maxToolCalls | number or null The maximum number of tool calls the flow may execute. Only used when |
| videoDisabled | boolean or null If |
| gptConfigNameOverride | string or null The name of a specific GPT configuration to use instead of the agent's default. If the configuration does not exist, the default agent configuration is used. |
| initialRunMode | string or null Enum: "AUTONOMOUS" "INSTRUCT" "DETERMINISTIC" The execution mode for the flow. If omitted, defaults to |
| isControlPanelEnabled | boolean or null If |
Array of objects or null (ProposedToolCall) An ordered list of tool calls to execute immediately when the flow starts. Commonly used with |
{- "name": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "maxToolCalls": 0,
- "videoDisabled": true,
- "gptConfigNameOverride": "string",
- "initialRunMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "toolCallsOnStart": [
- {
- "name": "string",
- "parameters": { },
- "toolCallId": "string"
}
]
}{- "id": "string",
- "name": "string",
- "createdWithDonobuVersion": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "gptConfigName": "string",
- "hasGptConfigNameOverride": true,
- "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "runMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "result": { },
- "inputTokensUsed": 0,
- "completionTokensUsed": 0,
- "maxToolCalls": 0,
- "startedAt": 0,
- "completedAt": 0,
- "state": "UNSTARTED",
- "nextState": "UNSTARTED",
- "videoDisabled": true
}Retrieves the complete metadata for a specific flow, including its current state, configuration, execution statistics, and result.
| flowId required | string The unique identifier of the flow. |
{- "id": "string",
- "name": "string",
- "createdWithDonobuVersion": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "gptConfigName": "string",
- "hasGptConfigNameOverride": true,
- "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "runMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "result": { },
- "inputTokensUsed": 0,
- "completionTokensUsed": 0,
- "maxToolCalls": 0,
- "startedAt": 0,
- "completedAt": 0,
- "state": "UNSTARTED",
- "nextState": "UNSTARTED",
- "videoDisabled": true
}Permanently deletes a flow and all associated data, including metadata, tool calls, screenshots, and video recordings. This operation cannot be undone.
A flow that is currently running cannot be deleted; cancel it first.
| flowId required | string The unique identifier of the flow. |
{- "code": "string",
- "message": "string"
}Updates the display name of an existing flow.
| flowId required | string The unique identifier of the flow. |
| name required | string The new name for the flow. |
{- "name": "string"
}{- "id": "string",
- "name": "string",
- "createdWithDonobuVersion": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "gptConfigName": "string",
- "hasGptConfigNameOverride": true,
- "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "runMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "result": { },
- "inputTokensUsed": 0,
- "completionTokensUsed": 0,
- "maxToolCalls": 0,
- "startedAt": 0,
- "completedAt": 0,
- "state": "UNSTARTED",
- "nextState": "UNSTARTED",
- "videoDisabled": true
}Converts a completed flow into a CreateFlowRequest payload suitable for deterministic
replay. The returned object includes the original tool calls configured for sequential
re-execution and can be submitted directly to POST /api/flows.
| flowId required | string The unique identifier of the flow. |
{- "name": "string",
- "browser": {
- "initialState": {
- "type": "id",
- "value": "string"
}, - "persistState": true,
- "using": {
- "type": "device",
- "deviceName": "string",
- "headless": true,
- "proxy": {
- "server": "string",
- "bypass": "string",
- "username": "string",
- "password": "string"
}
}
}, - "envVars": [
- "string"
], - "customTools": [
- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "javascript": "string"
}
], - "defaultMessageDuration": 0,
- "callbackUrl": "string",
- "targetWebsite": "string",
- "overallObjective": "string",
- "allowedTools": [
- "string"
], - "resultJsonSchema": null,
- "maxToolCalls": 0,
- "videoDisabled": true,
- "gptConfigNameOverride": "string",
- "initialRunMode": "AUTONOMOUS",
- "isControlPanelEnabled": true,
- "toolCallsOnStart": [
- {
- "name": "string",
- "parameters": { },
- "toolCallId": "string"
}
]
}Generates a Playwright test script that replays the actions of a completed flow. The generated code uses the Donobu Playwright extension and can be executed independently as part of a test suite.
| flowId required | string The unique identifier of the flow. |
| areElementIdsVolatile | boolean If |
| disableSelectorFailover | boolean If |
| disableSelfHealingTests | boolean If |
| disablePullRequestCreation | boolean If |
| runInHeadedMode | boolean If |
| slowMotionDelay | number >= 0 Delay in milliseconds between actions in the generated test. Set to |
| playwrightScriptVariant | string Enum: "ai" "classic" Choose whether the generated test uses |
{- "script": "string"
}Generates a complete Playwright project structure containing test files for one or more flows, along with configuration and dependency files. The resulting project can be written to disk and executed directly with Playwright.
| flowIds required | Array of strings The IDs of flows to include in the project. |
object (CodeGenerationOptions) Options that control how Playwright test code is generated. |
{- "flowIds": [
- "string"
], - "options": {
- "areElementIdsVolatile": true,
- "disableSelectorFailover": true,
- "disableSelfHealingTests": true,
- "disablePullRequestCreation": true,
- "runInHeadedMode": true,
- "slowMotionDelay": 0,
- "playwrightScriptVariant": "ai",
- "flowAnnotations": {
- "property1": [
- {
- "type": "string",
- "description": "string"
}
], - "property2": [
- {
- "type": "string",
- "description": "string"
}
]
}
}
}{- "files": [
- {
- "path": "string",
- "content": "string"
}
]
}Retrieves the complete chronological history of tool calls executed within a flow. Each tool call includes the action name, input parameters, outcome, timing, the page URL at the time of execution, and a reference to a post-call screenshot (if available).
| flowId required | string The unique identifier of the flow. |
[- {
- "id": "string",
- "toolName": "string",
- "parameters": { },
- "outcome": {
- "isSuccessful": true,
- "forLlm": "string",
- "metadata": { }
}, - "postCallImageId": "string",
- "page": "string",
- "startedAt": 0,
- "completedAt": 0
}
]Submits a tool call for execution in an active flow. This is primarily used during
INSTRUCT mode to direct the flow's next action. The proposed tool call is validated
and queued; execution happens asynchronously.
The target flow must be actively running and the tool name must correspond to a valid, available tool whose parameters conform to its expected schema.
| flowId required | string The unique identifier of the flow. |
| name required | string The name of the tool to call. Must match a tool from |
required | object The input parameters for the tool. Must conform to the tool's input JSON Schema. |
| toolCallId | string or null An optional identifier used to correlate proposed tool calls with their results. |
{- "name": "string",
- "parameters": { },
- "toolCallId": "string"
}{- "code": "INVALID_PARAM_VALUES",
- "errors": [
- {
- "code": "string",
- "message": "string",
- "path": [
- "string"
]
}
]
}Retrieves detailed information about a single tool call within a flow, including its input parameters, outcome, timing, and associated metadata.
| flowId required | string The unique identifier of the flow. |
| toolCallId required | string The unique identifier of the tool call. |
{- "id": "string",
- "toolName": "string",
- "parameters": { },
- "outcome": {
- "isSuccessful": true,
- "forLlm": "string",
- "metadata": { }
}, - "postCallImageId": "string",
- "page": "string",
- "startedAt": 0,
- "completedAt": 0
}Retrieves a screenshot image captured during flow execution. The response is the raw image binary in PNG or JPEG format.
| flowId required | string The unique identifier of the flow. |
| imageId required | string The unique identifier of the image. Corresponds to a tool call's |
Retrieves the video recording of a flow execution in WebM format. Supports HTTP range requests for efficient streaming and seeking.
To stream the video, send a Range header (e.g. Range: bytes=0-1048575). The server
will respond with 206 Partial Content and the requested byte range.
| flowId required | string The unique identifier of the flow. |
| Range | string Standard HTTP range header for partial content requests (e.g. |
Retrieves the persisted browser storage state for a flow. This includes cookies,
localStorage, and sessionStorage data captured from the browser context. The state
is only available if the flow was configured with browser.persistState: true.
| flowId required | string The unique identifier of the flow. |
{- "cookies": [
- {
- "name": "string",
- "value": "string",
- "domain": "string",
- "path": "string",
- "expires": 0,
- "httpOnly": true,
- "secure": true,
- "sameSite": "Strict"
}
], - "origins": [
- {
- "origin": "string",
- "localStorage": [
- {
- "name": "string",
- "value": "string"
}
], - "sessionStorage": [
- {
- "name": "string",
- "value": "string"
}
]
}
]
}Discover the browser automation tools available in the Donobu runtime. Tools represent individual actions (e.g., clicking, typing, navigating) that can be invoked during flow execution.
Returns the set of browser automation tools available for use within flows. Each tool includes its name, description, input JSON Schema, and whether it requires a GPT configuration to operate.
Use tool names from this list when specifying allowedTools or toolCallsOnStart
in a CreateFlowRequest, or when proposing tool calls via POST /api/flows/{flowId}/tool-calls.
[- {
- "name": "string",
- "description": "string",
- "inputSchema": { },
- "requiresGpt": true
}
]Manage the mapping between Donobu agents and GPT configurations. Agents are the AI decision-makers that drive autonomous flows; each agent is linked to a specific GPT configuration that determines which model and provider it uses.
Retrieves the GPT configuration name currently assigned to a specific agent.
| name required | string Value: "flow-runner" The agent name. Currently only |
{- "gptConfigName": "string"
}Assigns a GPT configuration to a specific agent. The referenced GPT configuration must
already exist. Setting gptConfigName to null unlinks the agent from any configuration,
which will prevent it from being used in autonomous flows.
| name required | string Value: "flow-runner" The agent name. Currently only |
| gptConfigName required | string or null The name of the GPT configuration to assign, or |
{- "gptConfigName": "string"
}{- "gptConfigName": "string"
}Manage GPT provider configurations and environment variables. GPT configurations define connection parameters and model settings for AI providers (Anthropic, OpenAI, Google, etc.). Environment variables provide key-value data accessible to flows at runtime.
Retrieves all stored GPT configurations. Sensitive fields such as API keys and secret access keys are automatically redacted in the response.
{- "property1": {
- "type": "ANTHROPIC",
- "apiKey": "string",
- "modelName": "string"
}, - "property2": {
- "type": "ANTHROPIC",
- "apiKey": "string",
- "modelName": "string"
}
}Retrieves a specific GPT configuration by name. Sensitive fields are automatically redacted.
| name required | string [ 1 .. 100 ] characters ^[a-zA-Z0-9_ -]+$ The name of the GPT configuration. Must be 1–100 characters and contain only alphanumeric characters, spaces, underscores, and hyphens. |
{- "type": "ANTHROPIC",
- "apiKey": "string",
- "modelName": "string"
}Creates or updates a GPT configuration. The configuration is validated against the provider's requirements and a test request is made to verify connectivity and authentication before the configuration is saved.
Sensitive fields are redacted in the response — the original credentials are securely stored but never returned.
| name required | string [ 1 .. 100 ] characters ^[a-zA-Z0-9_ -]+$ The name of the GPT configuration. Must be 1–100 characters and contain only alphanumeric characters, spaces, underscores, and hyphens. |
| type required | string Identifies this as an Anthropic configuration. |
| apiKey required | string The Anthropic API key. Redacted in responses. |
| modelName required | string The Anthropic model to use (e.g. |
{- "type": "ANTHROPIC",
- "apiKey": "string",
- "modelName": "string"
}{- "type": "ANTHROPIC",
- "apiKey": "string",
- "modelName": "string"
}Permanently deletes a GPT configuration. Any agents that reference this configuration
are automatically unlinked (their gptConfigName is set to null).
| name required | string [ 1 .. 100 ] characters ^[a-zA-Z0-9_ -]+$ The name of the GPT configuration. Must be 1–100 characters and contain only alphanumeric characters, spaces, underscores, and hyphens. |
{ }Creates a new environment datum or updates the value of an existing one.
| key required | string The environment variable name. |
| value required | string The value to set for the environment datum. |
{- "value": "string"
}{- "key": "string",
- "value": "string"
}Returns the OpenAPI specification for the Donobu API. The response format depends on
the Accept header: text/html returns an interactive HTML documentation page,
otherwise the raw YAML specification is returned.
| Accept | string Set to |