donobu 2.37.3 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/apis/AskAiApi.d.ts +3 -1
  2. package/dist/apis/AskAiApi.d.ts.map +1 -1
  3. package/dist/apis/AskAiApi.js +3 -3
  4. package/dist/apis/AskAiApi.js.map +1 -1
  5. package/dist/apis/GptConfigsApi.d.ts +5 -0
  6. package/dist/apis/GptConfigsApi.d.ts.map +1 -1
  7. package/dist/apis/GptConfigsApi.js +13 -7
  8. package/dist/apis/GptConfigsApi.js.map +1 -1
  9. package/dist/apis/SchemaApi.d.ts +17 -0
  10. package/dist/apis/SchemaApi.d.ts.map +1 -0
  11. package/dist/apis/SchemaApi.js +33 -0
  12. package/dist/apis/SchemaApi.js.map +1 -0
  13. package/dist/assets/generated/version +1 -1
  14. package/dist/assets/icon.png +0 -0
  15. package/dist/assets/openapi-schema.html +18603 -0
  16. package/dist/assets/openapi-schema.yaml +1483 -0
  17. package/dist/assets/smart-selector-generator.js +22 -3
  18. package/dist/clients/GptClientFactory.d.ts +19 -2
  19. package/dist/clients/GptClientFactory.d.ts.map +1 -1
  20. package/dist/clients/GptClientFactory.js +8 -4
  21. package/dist/clients/GptClientFactory.js.map +1 -1
  22. package/dist/envVars.d.ts +29 -1
  23. package/dist/envVars.d.ts.map +1 -1
  24. package/dist/envVars.js +78 -2
  25. package/dist/envVars.js.map +1 -1
  26. package/dist/esm/apis/AskAiApi.d.ts +3 -1
  27. package/dist/esm/apis/AskAiApi.d.ts.map +1 -1
  28. package/dist/esm/apis/AskAiApi.js +3 -3
  29. package/dist/esm/apis/AskAiApi.js.map +1 -1
  30. package/dist/esm/apis/GptConfigsApi.d.ts +5 -0
  31. package/dist/esm/apis/GptConfigsApi.d.ts.map +1 -1
  32. package/dist/esm/apis/GptConfigsApi.js +13 -7
  33. package/dist/esm/apis/GptConfigsApi.js.map +1 -1
  34. package/dist/esm/apis/SchemaApi.d.ts +17 -0
  35. package/dist/esm/apis/SchemaApi.d.ts.map +1 -0
  36. package/dist/esm/apis/SchemaApi.js +33 -0
  37. package/dist/esm/apis/SchemaApi.js.map +1 -0
  38. package/dist/esm/assets/generated/version +1 -1
  39. package/dist/esm/assets/icon.png +0 -0
  40. package/dist/esm/assets/openapi-schema.html +18603 -0
  41. package/dist/esm/assets/openapi-schema.yaml +1483 -0
  42. package/dist/esm/assets/smart-selector-generator.js +22 -3
  43. package/dist/esm/clients/GptClientFactory.d.ts +19 -2
  44. package/dist/esm/clients/GptClientFactory.d.ts.map +1 -1
  45. package/dist/esm/clients/GptClientFactory.js +8 -4
  46. package/dist/esm/clients/GptClientFactory.js.map +1 -1
  47. package/dist/esm/envVars.d.ts +29 -1
  48. package/dist/esm/envVars.d.ts.map +1 -1
  49. package/dist/esm/envVars.js +78 -2
  50. package/dist/esm/envVars.js.map +1 -1
  51. package/dist/esm/exceptions/DonobuException.d.ts.map +1 -1
  52. package/dist/esm/exceptions/DonobuException.js +1 -3
  53. package/dist/esm/exceptions/DonobuException.js.map +1 -1
  54. package/dist/esm/lib/DonobuExtendedPage.d.ts +1 -1
  55. package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -1
  56. package/dist/esm/lib/fixtures/gptClients.d.ts.map +1 -1
  57. package/dist/esm/lib/fixtures/gptClients.js +24 -26
  58. package/dist/esm/lib/fixtures/gptClients.js.map +1 -1
  59. package/dist/esm/lib/testExtension.d.ts.map +1 -1
  60. package/dist/esm/lib/testExtension.js +3 -2
  61. package/dist/esm/lib/testExtension.js.map +1 -1
  62. package/dist/esm/main.d.ts.map +1 -1
  63. package/dist/esm/main.js +1 -1
  64. package/dist/esm/main.js.map +1 -1
  65. package/dist/esm/managers/AdminApiController.d.ts +6 -0
  66. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  67. package/dist/esm/managers/AdminApiController.js +27 -1
  68. package/dist/esm/managers/AdminApiController.js.map +1 -1
  69. package/dist/esm/managers/AgentsManager.js +1 -1
  70. package/dist/esm/managers/AgentsManager.js.map +1 -1
  71. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  72. package/dist/esm/managers/DonobuFlow.js +16 -9
  73. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  74. package/dist/esm/managers/DonobuFlowsManager.d.ts +3 -7
  75. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  76. package/dist/esm/managers/DonobuFlowsManager.js +59 -67
  77. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  78. package/dist/esm/managers/DonobuStack.d.ts +2 -0
  79. package/dist/esm/managers/DonobuStack.d.ts.map +1 -1
  80. package/dist/esm/managers/DonobuStack.js +5 -2
  81. package/dist/esm/managers/DonobuStack.js.map +1 -1
  82. package/dist/esm/managers/EnvDataManager.d.ts +5 -5
  83. package/dist/esm/managers/EnvDataManager.d.ts.map +1 -1
  84. package/dist/esm/managers/EnvDataManager.js +19 -26
  85. package/dist/esm/managers/EnvDataManager.js.map +1 -1
  86. package/dist/esm/managers/FlowDependencyAnalyzer.d.ts.map +1 -1
  87. package/dist/esm/managers/FlowDependencyAnalyzer.js +0 -1
  88. package/dist/esm/managers/FlowDependencyAnalyzer.js.map +1 -1
  89. package/dist/esm/managers/GptConfigsManager.d.ts +3 -1
  90. package/dist/esm/managers/GptConfigsManager.d.ts.map +1 -1
  91. package/dist/esm/managers/GptConfigsManager.js +10 -12
  92. package/dist/esm/managers/GptConfigsManager.js.map +1 -1
  93. package/dist/esm/managers/InteractionVisualizer.d.ts +25 -0
  94. package/dist/esm/managers/InteractionVisualizer.d.ts.map +1 -1
  95. package/dist/esm/managers/InteractionVisualizer.js +108 -50
  96. package/dist/esm/managers/InteractionVisualizer.js.map +1 -1
  97. package/dist/esm/managers/PluginLoader.d.ts +24 -1
  98. package/dist/esm/managers/PluginLoader.d.ts.map +1 -1
  99. package/dist/esm/managers/PluginLoader.js +62 -38
  100. package/dist/esm/managers/PluginLoader.js.map +1 -1
  101. package/dist/esm/managers/ToolManager.d.ts +1 -0
  102. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  103. package/dist/esm/managers/ToolManager.js +4 -1
  104. package/dist/esm/managers/ToolManager.js.map +1 -1
  105. package/dist/esm/models/CreateDonobuFlow.d.ts +1 -0
  106. package/dist/esm/models/CreateDonobuFlow.d.ts.map +1 -1
  107. package/dist/esm/models/CreateDonobuFlow.js +1 -0
  108. package/dist/esm/models/CreateDonobuFlow.js.map +1 -1
  109. package/dist/esm/models/FlowMetadata.d.ts +1 -0
  110. package/dist/esm/models/FlowMetadata.d.ts.map +1 -1
  111. package/dist/esm/models/FlowMetadata.js +5 -0
  112. package/dist/esm/models/FlowMetadata.js.map +1 -1
  113. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts +2 -1
  114. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -1
  115. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js +6 -5
  116. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -1
  117. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -1
  118. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js +4 -4
  119. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -1
  120. package/dist/esm/tools/DetectBrokenLinksTool.js +1 -1
  121. package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
  122. package/dist/esm/tools/TriggerDonobuFlowTool.d.ts +2 -0
  123. package/dist/esm/tools/TriggerDonobuFlowTool.d.ts.map +1 -1
  124. package/dist/esm/utils/BrowserUtils.d.ts +17 -18
  125. package/dist/esm/utils/BrowserUtils.d.ts.map +1 -1
  126. package/dist/esm/utils/BrowserUtils.js +43 -40
  127. package/dist/esm/utils/BrowserUtils.js.map +1 -1
  128. package/dist/esm/utils/MiscUtils.js +1 -1
  129. package/dist/esm/utils/MiscUtils.js.map +1 -1
  130. package/dist/exceptions/DonobuException.d.ts.map +1 -1
  131. package/dist/exceptions/DonobuException.js +1 -3
  132. package/dist/exceptions/DonobuException.js.map +1 -1
  133. package/dist/lib/DonobuExtendedPage.d.ts +1 -1
  134. package/dist/lib/DonobuExtendedPage.d.ts.map +1 -1
  135. package/dist/lib/fixtures/gptClients.d.ts.map +1 -1
  136. package/dist/lib/fixtures/gptClients.js +24 -26
  137. package/dist/lib/fixtures/gptClients.js.map +1 -1
  138. package/dist/lib/testExtension.d.ts.map +1 -1
  139. package/dist/lib/testExtension.js +3 -2
  140. package/dist/lib/testExtension.js.map +1 -1
  141. package/dist/main.d.ts.map +1 -1
  142. package/dist/main.js +1 -1
  143. package/dist/main.js.map +1 -1
  144. package/dist/managers/AdminApiController.d.ts +6 -0
  145. package/dist/managers/AdminApiController.d.ts.map +1 -1
  146. package/dist/managers/AdminApiController.js +27 -1
  147. package/dist/managers/AdminApiController.js.map +1 -1
  148. package/dist/managers/AgentsManager.js +1 -1
  149. package/dist/managers/AgentsManager.js.map +1 -1
  150. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  151. package/dist/managers/DonobuFlow.js +16 -9
  152. package/dist/managers/DonobuFlow.js.map +1 -1
  153. package/dist/managers/DonobuFlowsManager.d.ts +3 -7
  154. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  155. package/dist/managers/DonobuFlowsManager.js +59 -67
  156. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  157. package/dist/managers/DonobuStack.d.ts +2 -0
  158. package/dist/managers/DonobuStack.d.ts.map +1 -1
  159. package/dist/managers/DonobuStack.js +5 -2
  160. package/dist/managers/DonobuStack.js.map +1 -1
  161. package/dist/managers/EnvDataManager.d.ts +5 -5
  162. package/dist/managers/EnvDataManager.d.ts.map +1 -1
  163. package/dist/managers/EnvDataManager.js +19 -26
  164. package/dist/managers/EnvDataManager.js.map +1 -1
  165. package/dist/managers/FlowDependencyAnalyzer.d.ts.map +1 -1
  166. package/dist/managers/FlowDependencyAnalyzer.js +0 -1
  167. package/dist/managers/FlowDependencyAnalyzer.js.map +1 -1
  168. package/dist/managers/GptConfigsManager.d.ts +3 -1
  169. package/dist/managers/GptConfigsManager.d.ts.map +1 -1
  170. package/dist/managers/GptConfigsManager.js +10 -12
  171. package/dist/managers/GptConfigsManager.js.map +1 -1
  172. package/dist/managers/InteractionVisualizer.d.ts +25 -0
  173. package/dist/managers/InteractionVisualizer.d.ts.map +1 -1
  174. package/dist/managers/InteractionVisualizer.js +108 -50
  175. package/dist/managers/InteractionVisualizer.js.map +1 -1
  176. package/dist/managers/PluginLoader.d.ts +24 -1
  177. package/dist/managers/PluginLoader.d.ts.map +1 -1
  178. package/dist/managers/PluginLoader.js +62 -38
  179. package/dist/managers/PluginLoader.js.map +1 -1
  180. package/dist/managers/ToolManager.d.ts +1 -0
  181. package/dist/managers/ToolManager.d.ts.map +1 -1
  182. package/dist/managers/ToolManager.js +4 -1
  183. package/dist/managers/ToolManager.js.map +1 -1
  184. package/dist/models/CreateDonobuFlow.d.ts +1 -0
  185. package/dist/models/CreateDonobuFlow.d.ts.map +1 -1
  186. package/dist/models/CreateDonobuFlow.js +1 -0
  187. package/dist/models/CreateDonobuFlow.js.map +1 -1
  188. package/dist/models/FlowMetadata.d.ts +1 -0
  189. package/dist/models/FlowMetadata.d.ts.map +1 -1
  190. package/dist/models/FlowMetadata.js +5 -0
  191. package/dist/models/FlowMetadata.js.map +1 -1
  192. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts +2 -1
  193. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -1
  194. package/dist/persistence/env/EnvPersistenceFactoryImpl.js +6 -5
  195. package/dist/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -1
  196. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -1
  197. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js +4 -4
  198. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -1
  199. package/dist/tools/DetectBrokenLinksTool.js +1 -1
  200. package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
  201. package/dist/tools/TriggerDonobuFlowTool.d.ts +2 -0
  202. package/dist/tools/TriggerDonobuFlowTool.d.ts.map +1 -1
  203. package/dist/utils/BrowserUtils.d.ts +17 -18
  204. package/dist/utils/BrowserUtils.d.ts.map +1 -1
  205. package/dist/utils/BrowserUtils.js +43 -40
  206. package/dist/utils/BrowserUtils.js.map +1 -1
  207. package/dist/utils/MiscUtils.js +1 -1
  208. package/dist/utils/MiscUtils.js.map +1 -1
  209. package/package.json +16 -16
@@ -0,0 +1,1483 @@
1
+ openapi: '3.0.0'
2
+ info:
3
+ title: 'Donobu API'
4
+ version: '1.0.0'
5
+ description: "The Donobu API provides a comprehensive suite of tools for automating web browser interactions. It allows you to create, manage, and execute 'flows,' which are sequences of actions performed in a browser, driven either by an AI agent or by a predefined script. This API is designed for a wide range of use cases, from simple website navigation and data extraction to complex, multi-step process automation and testing.\n\nKey features include:\n- **Flow Management**: Create, run, monitor, and delete automation flows.\n- **AI-Powered Automation**: Leverage powerful GPT models to drive flows autonomously based on a high-level objective.\n- **Deterministic Replay**: Rerun past flows exactly as they occurred or generate Playwright scripts for integration into testing pipelines.\n- **Configuration Management**: Manage GPT configurations, agent assignments, and environment variables used by your flows.\n- **Rich Data Access**: Retrieve detailed information about flow execution, including tool calls, screenshots, and video recordings."
6
+ servers:
7
+ - url: 'http://localhost:31000'
8
+ description: 'Local Donobu app server'
9
+ tags:
10
+ - name: 'flows'
11
+ description: 'Endpoints for creating, managing, and inspecting automation flows. Flows are the core resource in Donobu, representing a sequence of browser interactions to achieve a specific objective.'
12
+ - name: 'configs'
13
+ description: 'Endpoints for managing configurations used by flows, including GPT model settings and environment variables.'
14
+ - name: 'agents'
15
+ description: 'Endpoints for managing AI agents and assigning them specific GPT configurations to use for decision-making in autonomous flows.'
16
+ - name: 'tools'
17
+ description: 'Endpoints for discovering the browser automation tools available for use within flows.'
18
+ - name: 'system'
19
+ description: 'Endpoints for system-level operations, such as health checks and version information.'
20
+ paths:
21
+ /api/flows:
22
+ get:
23
+ tags:
24
+ - 'flows'
25
+ summary: 'List all flows'
26
+ description: 'Retrieves a paginated list of flows, with options for filtering by name, date, run mode, and state. Results are ordered by creation date, with the newest flows appearing first.'
27
+ operationId: 'getFlows'
28
+ parameters:
29
+ - name: 'name'
30
+ in: 'query'
31
+ description: 'Filter flows by exact name match.'
32
+ required: false
33
+ schema:
34
+ type: 'string'
35
+ - name: 'startedAfter'
36
+ in: 'query'
37
+ description: 'Filter for flows that started at or after this Unix epoch timestamp (in milliseconds).'
38
+ required: false
39
+ schema:
40
+ type: 'integer'
41
+ format: 'int64'
42
+ - name: 'startedBefore'
43
+ in: 'query'
44
+ description: 'Filter for flows that started at or before this Unix epoch timestamp (in milliseconds).'
45
+ required: false
46
+ schema:
47
+ type: 'integer'
48
+ format: 'int64'
49
+ - name: 'runMode'
50
+ in: 'query'
51
+ description: 'Filter flows by their run mode.'
52
+ required: false
53
+ schema:
54
+ $ref: '#/components/schemas/RunMode'
55
+ - name: 'state'
56
+ in: 'query'
57
+ description: 'Filter flows by their current state.'
58
+ required: false
59
+ schema:
60
+ $ref: '#/components/schemas/State'
61
+ - name: 'limit'
62
+ in: 'query'
63
+ description: 'The maximum number of flows to return. Must be between 1 and 100. Defaults to 100.'
64
+ required: false
65
+ schema:
66
+ type: 'integer'
67
+ minimum: 1
68
+ maximum: 100
69
+ default: 100
70
+ - name: 'pageToken'
71
+ in: 'query'
72
+ description: 'A token for fetching the next page of results.'
73
+ required: false
74
+ schema:
75
+ type: 'string'
76
+ responses:
77
+ '200':
78
+ description: 'A paginated list of flow metadata.'
79
+ content:
80
+ application/json:
81
+ schema:
82
+ $ref: '#/components/schemas/PaginatedFlowMetadata'
83
+ '400':
84
+ description: 'The request contains invalid query parameters.'
85
+ content:
86
+ application/json:
87
+ schema:
88
+ $ref: '#/components/schemas/ErrorResponse'
89
+ post:
90
+ tags:
91
+ - 'flows'
92
+ summary: 'Create a new flow'
93
+ description: 'Creates and initiates a new automation flow based on the provided configuration. The flow will start executing immediately.'
94
+ operationId: 'createFlow'
95
+ requestBody:
96
+ description: 'Configuration for the new flow.'
97
+ required: true
98
+ content:
99
+ application/json:
100
+ schema:
101
+ $ref: '#/components/schemas/CreateDonobuFlow'
102
+ responses:
103
+ '201':
104
+ description: 'The flow was created successfully. The response body contains the initial metadata of the newly created flow.'
105
+ content:
106
+ application/json:
107
+ schema:
108
+ $ref: '#/components/schemas/FlowMetadata'
109
+ '400':
110
+ description: 'The request body is invalid or contains conflicting parameters.'
111
+ content:
112
+ application/json:
113
+ schema:
114
+ $ref: '#/components/schemas/ErrorResponse'
115
+ /api/flows/{flowId}:
116
+ get:
117
+ tags:
118
+ - 'flows'
119
+ summary: 'Get flow metadata'
120
+ description: 'Retrieves the complete metadata for a specific flow by its unique ID. This includes its current state, configuration, and results if completed.'
121
+ operationId: 'getFlowMetadata'
122
+ parameters:
123
+ - name: 'flowId'
124
+ in: 'path'
125
+ description: 'The unique identifier of the flow.'
126
+ required: true
127
+ schema:
128
+ type: 'string'
129
+ format: 'uuid'
130
+ responses:
131
+ '200':
132
+ description: 'Successfully retrieved the flow metadata.'
133
+ content:
134
+ application/json:
135
+ schema:
136
+ $ref: '#/components/schemas/FlowMetadata'
137
+ '404':
138
+ description: 'A flow with the specified ID was not found.'
139
+ content:
140
+ application/json:
141
+ schema:
142
+ $ref: '#/components/schemas/ErrorResponse'
143
+ delete:
144
+ tags:
145
+ - 'flows'
146
+ summary: 'Delete a flow'
147
+ description: 'Deletes a completed flow and all its associated data, including screenshots, videos, and tool call history. A flow cannot be deleted while it is still running.'
148
+ operationId: 'deleteFlow'
149
+ parameters:
150
+ - name: 'flowId'
151
+ in: 'path'
152
+ description: 'The unique identifier of the flow to delete.'
153
+ required: true
154
+ schema:
155
+ type: 'string'
156
+ format: 'uuid'
157
+ responses:
158
+ '204':
159
+ description: 'The flow was successfully deleted.'
160
+ '404':
161
+ description: 'A flow with the specified ID was not found.'
162
+ content:
163
+ application/json:
164
+ schema:
165
+ $ref: '#/components/schemas/ErrorResponse'
166
+ '405':
167
+ description: 'The flow is currently running and cannot be deleted.'
168
+ content:
169
+ application/json:
170
+ schema:
171
+ $ref: '#/components/schemas/ErrorResponse'
172
+ /api/flows/{flowId}/rename:
173
+ post:
174
+ tags:
175
+ - 'flows'
176
+ summary: 'Rename a flow'
177
+ description: 'Updates the name of a specific flow. The name is used for display and can be used to look up flows.'
178
+ operationId: 'renameFlow'
179
+ parameters:
180
+ - name: 'flowId'
181
+ in: 'path'
182
+ description: 'The unique identifier of the flow to rename.'
183
+ required: true
184
+ schema:
185
+ type: 'string'
186
+ format: 'uuid'
187
+ requestBody:
188
+ required: true
189
+ content:
190
+ application/json:
191
+ schema:
192
+ type: 'object'
193
+ properties:
194
+ name:
195
+ type: 'string'
196
+ description: 'The new name for the flow. Can be set to null to remove the name.'
197
+ nullable: true
198
+ required:
199
+ - 'name'
200
+ responses:
201
+ '200':
202
+ description: 'The flow was successfully renamed. The response body contains the updated flow metadata.'
203
+ content:
204
+ application/json:
205
+ schema:
206
+ $ref: '#/components/schemas/FlowMetadata'
207
+ '400':
208
+ description: 'The provided name is invalid (e.g., too long).'
209
+ content:
210
+ application/json:
211
+ schema:
212
+ $ref: '#/components/schemas/ErrorResponse'
213
+ '404':
214
+ description: 'A flow with the specified ID was not found.'
215
+ content:
216
+ application/json:
217
+ schema:
218
+ $ref: '#/components/schemas/ErrorResponse'
219
+ /api/flows/{flowId}/rerun:
220
+ get:
221
+ tags:
222
+ - 'flows'
223
+ summary: 'Get flow as a rerun configuration'
224
+ description: 'Generates a `CreateDonobuFlow` configuration object based on a previously executed flow. This configuration can be used to rerun the flow in `DETERMINISTIC` mode, replaying its exact sequence of successful actions.'
225
+ operationId: 'getFlowAsRerun'
226
+ parameters:
227
+ - name: 'flowId'
228
+ in: 'path'
229
+ description: 'The unique identifier of the flow to use as a template.'
230
+ required: true
231
+ schema:
232
+ type: 'string'
233
+ format: 'uuid'
234
+ - $ref: '#/components/parameters/areElementIdsVolatile'
235
+ - $ref: '#/components/parameters/disableSelectorFailover'
236
+ responses:
237
+ '200':
238
+ description: 'A configuration object for rerunning the flow.'
239
+ content:
240
+ application/json:
241
+ schema:
242
+ $ref: '#/components/schemas/CreateDonobuFlow'
243
+ '404':
244
+ description: 'A flow with the specified ID was not found.'
245
+ content:
246
+ application/json:
247
+ schema:
248
+ $ref: '#/components/schemas/ErrorResponse'
249
+ /api/flows/{flowId}/code:
250
+ get:
251
+ tags:
252
+ - 'flows'
253
+ summary: 'Get flow as Playwright script'
254
+ description: 'Generates a Node.js Playwright script that replays the successful actions of a specified flow. This is useful for exporting automations into a standard testing framework.'
255
+ operationId: 'getFlowAsCode'
256
+ parameters:
257
+ - name: 'flowId'
258
+ in: 'path'
259
+ description: 'The unique identifier of the flow to convert to code.'
260
+ required: true
261
+ schema:
262
+ type: 'string'
263
+ format: 'uuid'
264
+ - $ref: '#/components/parameters/areElementIdsVolatile'
265
+ - $ref: '#/components/parameters/disableSelectorFailover'
266
+ - $ref: '#/components/parameters/disableSelfHealingTests'
267
+ - $ref: '#/components/parameters/disablePullRequestCreation'
268
+ - $ref: '#/components/parameters/runInHeadedMode'
269
+ - $ref: '#/components/parameters/slowMotionDelay'
270
+ responses:
271
+ '200':
272
+ description: 'The generated Playwright script.'
273
+ content:
274
+ text/plain:
275
+ schema:
276
+ type: 'string'
277
+ example: "const { chromium } = require('playwright');\n\n(async () => {\n const browser = await chromium.launch();\n const page = await browser.newPage();\n await page.goto('https://example.com');\n // ... more actions\n await browser.close();\n})();"
278
+ '404':
279
+ description: 'A flow with the specified ID was not found.'
280
+ content:
281
+ application/json:
282
+ schema:
283
+ $ref: '#/components/schemas/ErrorResponse'
284
+ /api/flows/project:
285
+ post:
286
+ tags:
287
+ - 'flows'
288
+ summary: 'Get flows as Playwright project'
289
+ description: 'Generates a complete, runnable Playwright project from a list of flow IDs. The project includes all necessary test files, configurations, and resolved dependencies, making it easy to export and run a suite of automations.'
290
+ operationId: 'getFlowsAsProject'
291
+ requestBody:
292
+ description: 'A list of flow IDs to include in the project and code generation options.'
293
+ required: true
294
+ content:
295
+ application/json:
296
+ schema:
297
+ type: 'object'
298
+ properties:
299
+ flowIds:
300
+ type: 'array'
301
+ items:
302
+ type: 'string'
303
+ format: 'uuid'
304
+ description: 'An array of flow IDs to include in the generated project.'
305
+ options:
306
+ $ref: '#/components/schemas/CodeGenerationOptions'
307
+ required:
308
+ - 'flowIds'
309
+ responses:
310
+ '200':
311
+ description: 'A zip archive containing the generated Playwright project.'
312
+ content:
313
+ application/zip:
314
+ schema:
315
+ type: 'string'
316
+ format: 'binary'
317
+ '400':
318
+ description: 'The request body is invalid.'
319
+ content:
320
+ application/json:
321
+ schema:
322
+ $ref: '#/components/schemas/ErrorResponse'
323
+ '404':
324
+ description: 'One or more of the specified flow IDs were not found.'
325
+ content:
326
+ application/json:
327
+ schema:
328
+ $ref: '#/components/schemas/ErrorResponse'
329
+ /api/flows/{flowId}/images/{imageId}:
330
+ get:
331
+ tags:
332
+ - 'flows'
333
+ summary: 'Get a flow screenshot'
334
+ description: 'Retrieves a specific screenshot image (in PNG format) associated with a flow, identified by its image ID. Screenshots are typically captured after each tool call.'
335
+ operationId: 'getFlowImage'
336
+ parameters:
337
+ - name: 'flowId'
338
+ in: 'path'
339
+ description: 'The unique identifier of the flow.'
340
+ required: true
341
+ schema:
342
+ type: 'string'
343
+ format: 'uuid'
344
+ - name: 'imageId'
345
+ in: 'path'
346
+ description: 'The unique identifier of the image.'
347
+ required: true
348
+ schema:
349
+ type: 'string'
350
+ responses:
351
+ '200':
352
+ description: 'The screenshot image file.'
353
+ content:
354
+ image/png:
355
+ schema:
356
+ type: 'string'
357
+ format: 'binary'
358
+ '404':
359
+ description: 'The specified flow or image was not found.'
360
+ content:
361
+ application/json:
362
+ schema:
363
+ $ref: '#/components/schemas/ErrorResponse'
364
+ /api/flows/{flowId}/video:
365
+ get:
366
+ tags:
367
+ - 'flows'
368
+ summary: 'Get flow video recording'
369
+ description: 'Retrieves the video recording (in WebM format) of a flow run. Videos are available for flows that were run with a visible browser window.'
370
+ operationId: 'getFlowVideo'
371
+ parameters:
372
+ - name: 'flowId'
373
+ in: 'path'
374
+ description: 'The unique identifier of the flow.'
375
+ required: true
376
+ schema:
377
+ type: 'string'
378
+ format: 'uuid'
379
+ responses:
380
+ '200':
381
+ description: 'The video recording file.'
382
+ content:
383
+ video/webm:
384
+ schema:
385
+ type: 'string'
386
+ format: 'binary'
387
+ '404':
388
+ description: 'The specified flow or its video was not found.'
389
+ content:
390
+ application/json:
391
+ schema:
392
+ $ref: '#/components/schemas/ErrorResponse'
393
+ /api/flows/{flowId}/tool-calls:
394
+ get:
395
+ tags:
396
+ - 'flows'
397
+ summary: 'List tool calls for a flow'
398
+ description: 'Retrieves a list of all tool calls that were executed during a specific flow run, in the order they were performed.'
399
+ operationId: 'getFlowToolCalls'
400
+ parameters:
401
+ - name: 'flowId'
402
+ in: 'path'
403
+ description: 'The unique identifier of the flow.'
404
+ required: true
405
+ schema:
406
+ type: 'string'
407
+ format: 'uuid'
408
+ responses:
409
+ '200':
410
+ description: 'An array of tool call objects.'
411
+ content:
412
+ application/json:
413
+ schema:
414
+ type: 'array'
415
+ items:
416
+ $ref: '#/components/schemas/ToolCall'
417
+ '404':
418
+ description: 'A flow with the specified ID was not found.'
419
+ content:
420
+ application/json:
421
+ schema:
422
+ $ref: '#/components/schemas/ErrorResponse'
423
+ /api/flows/{flowId}/tool-calls/{toolCallId}:
424
+ get:
425
+ tags:
426
+ - 'flows'
427
+ summary: 'Get a specific tool call'
428
+ description: 'Retrieves the details of a single tool call from a flow run, identified by its unique tool call ID.'
429
+ operationId: 'getFlowToolCall'
430
+ parameters:
431
+ - name: 'flowId'
432
+ in: 'path'
433
+ description: 'The unique identifier of the flow.'
434
+ required: true
435
+ schema:
436
+ type: 'string'
437
+ format: 'uuid'
438
+ - name: 'toolCallId'
439
+ in: 'path'
440
+ description: 'The unique identifier of the tool call.'
441
+ required: true
442
+ schema:
443
+ type: 'string'
444
+ responses:
445
+ '200':
446
+ description: 'The tool call object.'
447
+ content:
448
+ application/json:
449
+ schema:
450
+ $ref: '#/components/schemas/ToolCall'
451
+ '404':
452
+ description: 'The specified flow or tool call was not found.'
453
+ content:
454
+ application/json:
455
+ schema:
456
+ $ref: '#/components/schemas/ErrorResponse'
457
+ /api/gpt-configs:
458
+ get:
459
+ tags:
460
+ - 'configs'
461
+ summary: 'List all GPT configurations'
462
+ description: 'Retrieves a list of all saved GPT configurations. API keys and other secrets are redacted from the response.'
463
+ operationId: 'listGptConfigs'
464
+ responses:
465
+ '200':
466
+ description: 'A list of GPT configurations.'
467
+ content:
468
+ application/json:
469
+ schema:
470
+ type: 'array'
471
+ items:
472
+ $ref: '#/components/schemas/GptConfig'
473
+ /api/gpt-configs/{name}:
474
+ get:
475
+ tags:
476
+ - 'configs'
477
+ summary: 'Get a GPT configuration'
478
+ description: 'Retrieves a specific GPT configuration by its name. API keys and other secrets are redacted from the response.'
479
+ operationId: 'getGptConfig'
480
+ parameters:
481
+ - name: 'name'
482
+ in: 'path'
483
+ description: 'The unique name of the GPT configuration.'
484
+ required: true
485
+ schema:
486
+ type: 'string'
487
+ responses:
488
+ '200':
489
+ description: 'The requested GPT configuration.'
490
+ content:
491
+ application/json:
492
+ schema:
493
+ $ref: '#/components/schemas/GptConfig'
494
+ '404':
495
+ description: 'A GPT configuration with the specified name was not found.'
496
+ content:
497
+ application/json:
498
+ schema:
499
+ $ref: '#/components/schemas/ErrorResponse'
500
+ post:
501
+ tags:
502
+ - 'configs'
503
+ summary: 'Create or update a GPT configuration'
504
+ description: 'Creates a new GPT configuration or updates an existing one with the same name. This is used to define connection details for different AI models and platforms.'
505
+ operationId: 'setGptConfig'
506
+ parameters:
507
+ - name: 'name'
508
+ in: 'path'
509
+ description: 'The unique name for the GPT configuration.'
510
+ required: true
511
+ schema:
512
+ type: 'string'
513
+ requestBody:
514
+ description: 'The GPT configuration object.'
515
+ required: true
516
+ content:
517
+ application/json:
518
+ schema:
519
+ $ref: '#/components/schemas/GptConfig'
520
+ responses:
521
+ '200':
522
+ description: 'The GPT configuration was successfully created or updated. The response body contains the saved configuration with secrets redacted.'
523
+ content:
524
+ application/json:
525
+ schema:
526
+ $ref: '#/components/schemas/GptConfig'
527
+ '400':
528
+ description: 'The request body is invalid.'
529
+ content:
530
+ application/json:
531
+ schema:
532
+ $ref: '#/components/schemas/ErrorResponse'
533
+ delete:
534
+ tags:
535
+ - 'configs'
536
+ summary: 'Delete a GPT configuration'
537
+ description: 'Deletes a GPT configuration by its name. This action cannot be undone.'
538
+ operationId: 'deleteGptConfig'
539
+ parameters:
540
+ - name: 'name'
541
+ in: 'path'
542
+ description: 'The name of the GPT configuration to delete.'
543
+ required: true
544
+ schema:
545
+ type: 'string'
546
+ responses:
547
+ '204':
548
+ description: 'The GPT configuration was successfully deleted.'
549
+ '404':
550
+ description: 'A GPT configuration with the specified name was not found.'
551
+ content:
552
+ application/json:
553
+ schema:
554
+ $ref: '#/components/schemas/ErrorResponse'
555
+ /api/env:
556
+ get:
557
+ tags:
558
+ - 'configs'
559
+ summary: 'List all environment data'
560
+ description: 'Retrieves all stored environment variables as a key-value map. These variables can be referenced within flows.'
561
+ operationId: 'getEnvironmentData'
562
+ responses:
563
+ '200':
564
+ description: 'A map of all environment variables.'
565
+ content:
566
+ application/json:
567
+ schema:
568
+ type: 'object'
569
+ additionalProperties:
570
+ type: 'string'
571
+ /api/env/{key}:
572
+ get:
573
+ tags:
574
+ - 'configs'
575
+ summary: 'Get an environment datum'
576
+ description: 'Retrieves the value of a specific environment variable by its key.'
577
+ operationId: 'getEnvironmentDatum'
578
+ parameters:
579
+ - name: 'key'
580
+ in: 'path'
581
+ description: 'The key of the environment variable.'
582
+ required: true
583
+ schema:
584
+ type: 'string'
585
+ responses:
586
+ '200':
587
+ description: 'The value of the environment variable.'
588
+ content:
589
+ application/json:
590
+ schema:
591
+ type: 'object'
592
+ properties:
593
+ value:
594
+ type: 'string'
595
+ '404':
596
+ description: 'An environment variable with the specified key was not found.'
597
+ content:
598
+ application/json:
599
+ schema:
600
+ $ref: '#/components/schemas/ErrorResponse'
601
+ post:
602
+ tags:
603
+ - 'configs'
604
+ summary: 'Set an environment datum'
605
+ description: 'Creates or updates an environment variable with a specified key and value.'
606
+ operationId: 'setEnvironmentDatum'
607
+ parameters:
608
+ - name: 'key'
609
+ in: 'path'
610
+ description: 'The key of the environment variable to set.'
611
+ required: true
612
+ schema:
613
+ type: 'string'
614
+ requestBody:
615
+ required: true
616
+ content:
617
+ application/json:
618
+ schema:
619
+ type: 'object'
620
+ properties:
621
+ value:
622
+ type: 'string'
623
+ description: 'The value to assign to the environment variable.'
624
+ required:
625
+ - 'value'
626
+ responses:
627
+ '204':
628
+ description: 'The environment variable was successfully set.'
629
+ delete:
630
+ tags:
631
+ - 'configs'
632
+ summary: 'Delete an environment datum'
633
+ description: 'Deletes an environment variable by its key.'
634
+ operationId: 'deleteEnvironmentDatum'
635
+ parameters:
636
+ - name: 'key'
637
+ in: 'path'
638
+ description: 'The key of the environment variable to delete.'
639
+ required: true
640
+ schema:
641
+ type: 'string'
642
+ responses:
643
+ '204':
644
+ description: 'The environment variable was successfully deleted.'
645
+ /api/agents:
646
+ get:
647
+ tags:
648
+ - 'agents'
649
+ summary: 'List all agent assignments'
650
+ description: 'Retrieves a map of all agents and their assigned GPT configurations.'
651
+ operationId: 'listAgents'
652
+ responses:
653
+ '200':
654
+ description: 'A map of agent names to their assigned GPT configuration names.'
655
+ content:
656
+ application/json:
657
+ schema:
658
+ type: 'object'
659
+ additionalProperties:
660
+ type: 'string'
661
+ /api/agents/{name}:
662
+ get:
663
+ tags:
664
+ - 'agents'
665
+ summary: "Get an agent's assigned GPT configuration"
666
+ description: 'Retrieves the name of the GPT configuration assigned to a specific agent.'
667
+ operationId: 'getAgent'
668
+ parameters:
669
+ - name: 'name'
670
+ in: 'path'
671
+ description: 'The name of the agent.'
672
+ required: true
673
+ schema:
674
+ $ref: '#/components/schemas/DonobuAgent'
675
+ responses:
676
+ '200':
677
+ description: "The agent's assigned GPT configuration name."
678
+ content:
679
+ application/json:
680
+ schema:
681
+ type: 'object'
682
+ properties:
683
+ gptConfigName:
684
+ type: 'string'
685
+ '404':
686
+ description: 'The specified agent or its assignment was not found.'
687
+ content:
688
+ application/json:
689
+ schema:
690
+ $ref: '#/components/schemas/ErrorResponse'
691
+ post:
692
+ tags:
693
+ - 'agents'
694
+ summary: 'Assign a GPT configuration to an agent'
695
+ description: 'Assigns a specific GPT configuration to an agent, determining which AI model the agent will use for its tasks.'
696
+ operationId: 'setAgent'
697
+ parameters:
698
+ - name: 'name'
699
+ in: 'path'
700
+ description: 'The name of the agent to configure.'
701
+ required: true
702
+ schema:
703
+ $ref: '#/components/schemas/DonobuAgent'
704
+ requestBody:
705
+ required: true
706
+ content:
707
+ application/json:
708
+ schema:
709
+ type: 'object'
710
+ properties:
711
+ gptConfigName:
712
+ type: 'string'
713
+ description: 'The name of the GPT configuration to assign to the agent.'
714
+ required:
715
+ - 'gptConfigName'
716
+ responses:
717
+ '200':
718
+ description: 'The assignment was successful.'
719
+ content:
720
+ application/json:
721
+ schema:
722
+ type: 'object'
723
+ properties:
724
+ name:
725
+ $ref: '#/components/schemas/DonobuAgent'
726
+ gptConfigName:
727
+ type: 'string'
728
+ '404':
729
+ description: 'The specified GPT configuration was not found.'
730
+ content:
731
+ application/json:
732
+ schema:
733
+ $ref: '#/components/schemas/ErrorResponse'
734
+ /api/tools:
735
+ get:
736
+ tags:
737
+ - 'tools'
738
+ summary: 'List available tools'
739
+ description: 'Retrieves a list of all built-in tools that can be used within a flow to interact with web pages and control the automation process.'
740
+ operationId: 'listTools'
741
+ responses:
742
+ '200':
743
+ description: 'A list of available tools.'
744
+ content:
745
+ application/json:
746
+ schema:
747
+ type: 'array'
748
+ items:
749
+ $ref: '#/components/schemas/ToolDefinition'
750
+ /api/version:
751
+ get:
752
+ tags:
753
+ - 'system'
754
+ summary: 'Get API version'
755
+ description: 'Retrieves the current version of the Donobu application.'
756
+ operationId: 'getVersion'
757
+ responses:
758
+ '200':
759
+ description: 'The application version.'
760
+ content:
761
+ application/json:
762
+ schema:
763
+ type: 'object'
764
+ properties:
765
+ version:
766
+ type: 'string'
767
+ description: 'The semantic version of the application.'
768
+ example: '1.0.0'
769
+ /api/ping:
770
+ get:
771
+ tags:
772
+ - 'system'
773
+ summary: 'Ping the API'
774
+ description: 'A simple health check endpoint to verify that the API server is running and responsive.'
775
+ operationId: 'ping'
776
+ responses:
777
+ '200':
778
+ description: 'The server is alive.'
779
+ content:
780
+ application/json:
781
+ schema:
782
+ type: 'object'
783
+ properties:
784
+ status:
785
+ type: 'string'
786
+ example: 'pong'
787
+ components:
788
+ parameters:
789
+ areElementIdsVolatile:
790
+ name: 'areElementIdsVolatile'
791
+ in: 'query'
792
+ description: "If true, ID-only selectors (e.g. '#submit-btn') are dropped because the element's 'id' attribute is considered volatile. When every candidate is ID-based the list is left unchanged."
793
+ schema:
794
+ type: 'boolean'
795
+ disableSelectorFailover:
796
+ name: 'disableSelectorFailover'
797
+ in: 'query'
798
+ description: 'If false, only the most specific selector is used, disabling automatic fail-over to broader selectors.'
799
+ schema:
800
+ type: 'boolean'
801
+ disableSelfHealingTests:
802
+ name: 'disableSelfHealingTests'
803
+ in: 'query'
804
+ description: 'Disable self-healing tests.'
805
+ schema:
806
+ type: 'boolean'
807
+ disablePullRequestCreation:
808
+ name: 'disablePullRequestCreation'
809
+ in: 'query'
810
+ description: 'Disable the automatic creation of pull requests for tests that have self healed.'
811
+ schema:
812
+ type: 'boolean'
813
+ runInHeadedMode:
814
+ name: 'runInHeadedMode'
815
+ in: 'query'
816
+ description: 'Run tests with visible browser windows instead of headless mode.'
817
+ schema:
818
+ type: 'boolean'
819
+ slowMotionDelay:
820
+ name: 'slowMotionDelay'
821
+ in: 'query'
822
+ description: 'Delay in milliseconds between actions. Set to 0 to disable slow motion.'
823
+ schema:
824
+ type: 'number'
825
+ minimum: 0
826
+ schemas:
827
+ CreateDonobuFlow:
828
+ type: 'object'
829
+ description: 'This is the expected payload for a request to create a new Donobu flow.'
830
+ properties:
831
+ name:
832
+ type: 'string'
833
+ description: 'The name for this Donobu flow; if present, must be fewer than 256 characters.'
834
+ maxLength: 255
835
+ nullable: true
836
+ browser:
837
+ $ref: '#/components/schemas/BrowserConfig'
838
+ nullable: true
839
+ envVars:
840
+ type: 'array'
841
+ items:
842
+ type: 'string'
843
+ description: 'The names of environment variables made available for use by the flow.'
844
+ nullable: true
845
+ customTools:
846
+ type: 'array'
847
+ items:
848
+ $ref: '#/components/schemas/CustomTool'
849
+ description: 'Custom tools available for the flow.'
850
+ nullable: true
851
+ defaultMessageDuration:
852
+ type: 'number'
853
+ description: "The default amount of time the Donobu flow agent's messaging for the user should show (in milliseconds)."
854
+ nullable: true
855
+ callbackUrl:
856
+ type: 'string'
857
+ description: 'The URL to HTTP POST to when the flow completes. The body will contain a JSON object with single field, "id", of which is the ID of the flow that completed.'
858
+ nullable: true
859
+ targetWebsite:
860
+ type: 'string'
861
+ description: 'The website URL to start the flow at.'
862
+ overallObjective:
863
+ type: 'string'
864
+ description: "The overall objective to pursue; can only be omitted if initialRunMode has an effective value of 'INSTRUCT' or 'DETERMINISTIC'."
865
+ nullable: true
866
+ allowedTools:
867
+ type: 'array'
868
+ items:
869
+ type: 'string'
870
+ description: 'The complete set of tools (by name) that this flow is permitted to use. This list is automatically populated by combining any explicitly specified allowedTools with tools from customTools and any tools referenced in toolCallsOnStart. Tools not in this list cannot be invoked during flow execution.'
871
+ nullable: true
872
+ resultJsonSchema:
873
+ type: 'object'
874
+ description: 'If non-null, the JSON schema that the result field will conform to.'
875
+ additionalProperties: true
876
+ nullable: true
877
+ maxToolCalls:
878
+ type: 'number'
879
+ description: "Set the maximum number of actions that can be taken in a flow. This setting is only used if the initialRunMode has an effective value of 'AUTONOMOUS'."
880
+ nullable: true
881
+ gptConfigNameOverride:
882
+ type: 'string'
883
+ description: 'The name of a specific GPT configuration to use. If the corresponding GPT configuration is not defined or unresolvable, the default flow agent configuration will be used.'
884
+ nullable: true
885
+ initialRunMode:
886
+ $ref: '#/components/schemas/RunMode'
887
+ nullable: true
888
+ isControlPanelEnabled:
889
+ type: 'boolean'
890
+ description: 'Set to true if the in-browser control panel should be enabled. If the headless parameter is true, then this parameter is ignored.'
891
+ nullable: true
892
+ toolCallsOnStart:
893
+ type: 'array'
894
+ items:
895
+ $ref: '#/components/schemas/ProposedToolCall'
896
+ description: 'An ordered series of tool calls to invoke when starting the flow.'
897
+ nullable: true
898
+ FlowMetadata:
899
+ type: 'object'
900
+ properties:
901
+ id:
902
+ type: 'string'
903
+ description: 'The unique ID of this flow.'
904
+ name:
905
+ type: 'string'
906
+ description: 'The name of this flow.'
907
+ nullable: true
908
+ createdWithDonobuVersion:
909
+ type: 'string'
910
+ description: 'The version of Donobu that created the flow.'
911
+ browser:
912
+ $ref: '#/components/schemas/BrowserConfig'
913
+ envVars:
914
+ type: 'array'
915
+ items:
916
+ type: 'string'
917
+ description: 'The names of environment variables made available for use by the flow.'
918
+ nullable: true
919
+ gptConfigName:
920
+ type: 'string'
921
+ description: 'The name of the specific GPT configuration used for the flow.'
922
+ nullable: true
923
+ hasGptConfigNameOverride:
924
+ type: 'boolean'
925
+ description: 'If true, means that the `gptConfigName` was explicitly overwritten when the flow was created.'
926
+ customTools:
927
+ type: 'array'
928
+ items:
929
+ $ref: '#/components/schemas/CustomTool'
930
+ description: 'Custom tools available for the flow.'
931
+ nullable: true
932
+ defaultMessageDuration:
933
+ type: 'number'
934
+ description: "The default amount of time the Donobu flow agent's messaging for the user should show (in milliseconds)."
935
+ nullable: true
936
+ runMode:
937
+ $ref: '#/components/schemas/RunMode'
938
+ isControlPanelEnabled:
939
+ type: 'boolean'
940
+ description: 'Set to true if the in-browser control panel should be enabled.'
941
+ callbackUrl:
942
+ type: 'string'
943
+ description: 'The URL to HTTP POST to when the flow completes. The body will contain a JSON object with single field, "id", of which is the ID of the flow that completed.'
944
+ nullable: true
945
+ targetWebsite:
946
+ type: 'string'
947
+ description: 'The website URL to start the flow at.'
948
+ overallObjective:
949
+ type: 'string'
950
+ description: 'The overall objective to pursue.'
951
+ nullable: true
952
+ allowedTools:
953
+ type: 'array'
954
+ items:
955
+ type: 'string'
956
+ description: 'The complete set of tools (by name) that this flow is permitted to use. This list is automatically populated by combining any explicitly specified allowedTools with tools from customTools and any tools referenced in toolCallsOnStart. Tools not in this list cannot be invoked during flow execution.'
957
+ resultJsonSchema:
958
+ type: 'object'
959
+ description: 'If non-null, the JSON schema that the result field will conform to.'
960
+ additionalProperties: true
961
+ nullable: true
962
+ result:
963
+ type: 'object'
964
+ description: "The final output of the flow, populated when the flow reaches a terminal state. The content depends on how the flow completes:\n(1) If the flow succeeds and resultJsonSchema is specified, contains an object conforming to that schema extracted from the flow context;\n(2) If resultJsonSchema extraction fails, contains error details about the extraction failure;\n(3) Otherwise, contains the metadata from the final tool call, or null if no tools were executed."
965
+ additionalProperties: true
966
+ nullable: true
967
+ inputTokensUsed:
968
+ type: 'number'
969
+ description: 'The number of LLM input tokens used during this flow.'
970
+ completionTokensUsed:
971
+ type: 'number'
972
+ description: 'The number of LLM completion tokens used during this flow.'
973
+ maxToolCalls:
974
+ type: 'number'
975
+ description: 'If non-null, the maximum number of tool calls allowed for this flow.'
976
+ nullable: true
977
+ startedAt:
978
+ type: 'number'
979
+ description: 'The Unix epoch millisecond timestamp of when the flow started.'
980
+ nullable: true
981
+ completedAt:
982
+ type: 'number'
983
+ description: 'The Unix epoch millisecond timestamp of when the flow completed.'
984
+ nullable: true
985
+ state:
986
+ $ref: '#/components/schemas/State'
987
+ nextState:
988
+ $ref: '#/components/schemas/State'
989
+ nullable: true
990
+ PaginatedFlowMetadata:
991
+ type: 'object'
992
+ description: 'A paginated list of flow metadata objects.'
993
+ properties:
994
+ items:
995
+ type: 'array'
996
+ items:
997
+ $ref: '#/components/schemas/FlowMetadata'
998
+ nextPageToken:
999
+ type: 'string'
1000
+ description: 'A token that can be used to retrieve the next page of results. If absent, there are no more results.'
1001
+ State:
1002
+ type: 'string'
1003
+ description: "Represents the possible states of a flow:\n - UNSTARTED: Flow created but not yet initialized.\n - INITIALIZING: Setting up browser context and initial state.\n - RUNNING_ACTION: Executing a tool call.\n - QUERYING_LLM_FOR_NEXT_ACTION: AI determining next action (AUTONOMOUS mode).\n - WAITING_ON_USER_FOR_NEXT_ACTION: Waiting for user input (INSTRUCT mode).\n - PAUSED: Flow execution temporarily suspended.\n - RESUMING: Transitioning from paused to active state.\n - FAILED: Flow terminated unsuccessfully.\n - SUCCESS: Flow completed successfully."
1004
+ enum:
1005
+ - 'UNSTARTED'
1006
+ - 'INITIALIZING'
1007
+ - 'QUERYING_LLM_FOR_NEXT_ACTION'
1008
+ - 'WAITING_ON_USER_FOR_NEXT_ACTION'
1009
+ - 'PAUSED'
1010
+ - 'RESUMING'
1011
+ - 'RUNNING_ACTION'
1012
+ - 'FAILED'
1013
+ - 'SUCCESS'
1014
+ RunMode:
1015
+ type: 'string'
1016
+ description: "The execution mode that determines how a flow operates and makes decisions:\n\n- AUTONOMOUS: The flow is driven by an AI agent (GPT) that autonomously decides what actions to\n take based on the overall objective. The AI analyzes the current page state,\n determines the next appropriate action, and executes it without human intervention.\n This mode requires a valid GPT client configuration.\n\n- INSTRUCT: The flow waits for explicit user instructions for each action. The user manually\n directs what tools to call and when, making this mode suitable for guided walkthroughs\n or when human oversight is required for each step. No GPT client is required.\n\n- DETERMINISTIC: The flow executes a predetermined sequence of actions without any decision-making.\n It runs through a fixed list of tool calls (typically from toolCallsOnStart) and\n completes when all actions are finished. This mode is commonly used for replaying\n previously recorded flows or executing scripted sequences."
1017
+ enum:
1018
+ - 'AUTONOMOUS'
1019
+ - 'INSTRUCT'
1020
+ - 'DETERMINISTIC'
1021
+ BrowserConfig:
1022
+ type: 'object'
1023
+ properties:
1024
+ initialState:
1025
+ $ref: '#/components/schemas/BrowserStateReference'
1026
+ description: 'When starting the flow, initialize the browser state from here.'
1027
+ persistState:
1028
+ type: 'boolean'
1029
+ description: 'If set to true, saves the browser state at the end of the flow.'
1030
+ using:
1031
+ description: 'Browser configuration type and settings.'
1032
+ oneOf:
1033
+ - $ref: '#/components/schemas/DeviceBrowser'
1034
+ - $ref: '#/components/schemas/RemoteInstanceBrowser'
1035
+ - $ref: '#/components/schemas/BrowserBaseBrowser'
1036
+ discriminator:
1037
+ propertyName: 'type'
1038
+ DeviceBrowser:
1039
+ type: 'object'
1040
+ description: 'Configuration for using a local device browser.'
1041
+ properties:
1042
+ type:
1043
+ type: 'string'
1044
+ description: 'Use a local device browser.'
1045
+ enum: ['device']
1046
+ deviceName:
1047
+ type: 'string'
1048
+ description: "The name of the device to run the flow with. See devices.json for details. If not specified, defaults to 'Desktop Chromium'."
1049
+ headless:
1050
+ type: 'boolean'
1051
+ description: 'If true, will not open a real browser window to perform the flow.'
1052
+ proxy:
1053
+ type: 'object'
1054
+ description: 'Optional network proxy configuration.'
1055
+ properties:
1056
+ server:
1057
+ type: 'string'
1058
+ bypass:
1059
+ type: 'string'
1060
+ username:
1061
+ type: 'string'
1062
+ description: 'Will default to process.env.PROXY_USERNAME.'
1063
+ password:
1064
+ type: 'string'
1065
+ description: 'Will default to process.env.PROXY_PASSWORD.'
1066
+ required:
1067
+ - 'type'
1068
+ RemoteInstanceBrowser:
1069
+ type: 'object'
1070
+ description: 'Configuration for connecting to a remote browser instance.'
1071
+ properties:
1072
+ type:
1073
+ type: 'string'
1074
+ description: 'Connect to a remote browser instance.'
1075
+ enum: ['remoteInstance']
1076
+ url:
1077
+ type: 'string'
1078
+ description: 'The URL of a remote browser instance to connect to using the Chrome DevTools Protocol (CDP).'
1079
+ required:
1080
+ - 'type'
1081
+ - 'url'
1082
+ BrowserBaseBrowser:
1083
+ type: 'object'
1084
+ description: 'Configuration for using the BrowserBase cloud browser service.'
1085
+ properties:
1086
+ type:
1087
+ type: 'string'
1088
+ description: 'Use BrowserBase cloud browser service.'
1089
+ enum: ['browserBase']
1090
+ sessionArgs:
1091
+ $ref: '#/components/schemas/BrowserBaseSessionArgs'
1092
+ required:
1093
+ - 'type'
1094
+ - 'sessionArgs'
1095
+ BrowserBaseSessionArgs:
1096
+ type: 'object'
1097
+ description: 'Configuration arguments for the BrowserBase session.'
1098
+ properties:
1099
+ projectId:
1100
+ type: 'string'
1101
+ description: 'The project ID for the BrowserBase session.'
1102
+ extensionId:
1103
+ type: 'string'
1104
+ description: 'Optional extension ID.'
1105
+ browserSettings:
1106
+ type: 'object'
1107
+ description: 'Browser-specific settings.'
1108
+ properties:
1109
+ context:
1110
+ type: 'object'
1111
+ description: 'Browser context settings.'
1112
+ properties:
1113
+ id:
1114
+ type: 'string'
1115
+ description: 'Context ID.'
1116
+ extensionId:
1117
+ type: 'string'
1118
+ description: 'Extension ID in browser settings.'
1119
+ viewport:
1120
+ type: 'object'
1121
+ description: 'Viewport dimensions.'
1122
+ properties:
1123
+ width:
1124
+ type: 'number'
1125
+ description: 'Viewport width in pixels.'
1126
+ height:
1127
+ type: 'number'
1128
+ description: 'Viewport height in pixels.'
1129
+ blockAds:
1130
+ type: 'boolean'
1131
+ description: 'Whether to block advertisements.'
1132
+ solveCaptchas:
1133
+ type: 'boolean'
1134
+ description: 'Whether to automatically solve captchas.'
1135
+ advancedStealth:
1136
+ type: 'boolean'
1137
+ description: 'Whether to enable advanced stealth mode.'
1138
+ timeout:
1139
+ type: 'number'
1140
+ description: 'Duration in seconds after which the session will automatically end.'
1141
+ keepAlive:
1142
+ type: 'boolean'
1143
+ description: 'Set to true to keep the session alive even after disconnections. Available on the Hobby Plan and above.'
1144
+ proxies:
1145
+ type: 'boolean'
1146
+ description: 'Whether to use proxies.'
1147
+ region:
1148
+ type: 'string'
1149
+ description: 'Geographic region for the browser session.'
1150
+ userMetadata:
1151
+ type: 'object'
1152
+ description: 'Custom user metadata as key-value pairs.'
1153
+ additionalProperties:
1154
+ type: 'string'
1155
+ required:
1156
+ - 'projectId'
1157
+ BrowserStateReference:
1158
+ description: 'Specifies how to reference a flow from which to restore browser state.'
1159
+ oneOf:
1160
+ - $ref: '#/components/schemas/BrowserStateReferenceById'
1161
+ - $ref: '#/components/schemas/BrowserStateReferenceByName'
1162
+ - $ref: '#/components/schemas/BrowserStateReferenceByJson'
1163
+ discriminator:
1164
+ propertyName: 'type'
1165
+ BrowserStateReferenceById:
1166
+ type: 'object'
1167
+ properties:
1168
+ type:
1169
+ type: 'string'
1170
+ enum: ['id']
1171
+ value:
1172
+ type: 'string'
1173
+ format: 'uuid'
1174
+ description: 'The ID of the flow to restore state from.'
1175
+ required:
1176
+ - 'type'
1177
+ - 'value'
1178
+ BrowserStateReferenceByName:
1179
+ type: 'object'
1180
+ properties:
1181
+ type:
1182
+ type: 'string'
1183
+ enum: ['name']
1184
+ value:
1185
+ type: 'string'
1186
+ description: 'The name of the flow to restore state from.'
1187
+ required:
1188
+ - 'type'
1189
+ - 'value'
1190
+ BrowserStateReferenceByJson:
1191
+ type: 'object'
1192
+ properties:
1193
+ type:
1194
+ type: 'string'
1195
+ enum: ['json']
1196
+ value:
1197
+ $ref: '#/components/schemas/BrowserStorageState'
1198
+ required:
1199
+ - 'type'
1200
+ - 'value'
1201
+ BrowserStorageState:
1202
+ type: 'object'
1203
+ description: 'Represents the storage state of a browser, including cookies and local/session storage for various origins.'
1204
+ properties:
1205
+ cookies:
1206
+ type: 'array'
1207
+ items:
1208
+ type: 'object'
1209
+ properties:
1210
+ name:
1211
+ type: 'string'
1212
+ value:
1213
+ type: 'string'
1214
+ domain:
1215
+ type: 'string'
1216
+ path:
1217
+ type: 'string'
1218
+ expires:
1219
+ type: 'number'
1220
+ description: 'Epoch seconds, or -1 for session cookies.'
1221
+ httpOnly:
1222
+ type: 'boolean'
1223
+ secure:
1224
+ type: 'boolean'
1225
+ sameSite:
1226
+ type: 'string'
1227
+ enum: ['Strict', 'Lax', 'None']
1228
+ origins:
1229
+ type: 'array'
1230
+ items:
1231
+ type: 'object'
1232
+ properties:
1233
+ origin:
1234
+ type: 'string'
1235
+ localStorage:
1236
+ type: 'array'
1237
+ items:
1238
+ type: 'object'
1239
+ properties:
1240
+ name:
1241
+ type: 'string'
1242
+ value:
1243
+ type: 'string'
1244
+ sessionStorage:
1245
+ type: 'array'
1246
+ items:
1247
+ type: 'object'
1248
+ properties:
1249
+ name:
1250
+ type: 'string'
1251
+ value:
1252
+ type: 'string'
1253
+ CustomTool:
1254
+ type: 'object'
1255
+ description: 'A definition of a user-defined tool to use for a DonobuFlow.'
1256
+ properties:
1257
+ name:
1258
+ type: 'string'
1259
+ description: 'The name of the user-defined tool.'
1260
+ description:
1261
+ type: 'string'
1262
+ description: 'A description of what the tool does.'
1263
+ inputSchema:
1264
+ type: 'object'
1265
+ description: 'The input schema definition for the tool as a JSON object.'
1266
+ additionalProperties: true
1267
+ javascript:
1268
+ type: 'string'
1269
+ description: 'The JavaScript code that implements the tool functionality.'
1270
+ required:
1271
+ - 'name'
1272
+ - 'description'
1273
+ - 'inputSchema'
1274
+ - 'javascript'
1275
+ ProposedToolCall:
1276
+ type: 'object'
1277
+ description: 'A proposed (i.e., yet to be executed) tool call.'
1278
+ properties:
1279
+ name:
1280
+ type: 'string'
1281
+ description: 'The name of the tool to call.'
1282
+ parameters:
1283
+ type: 'object'
1284
+ description: "The parameters to supply to the tool's call method. Must conform to the tool's expected parameters type."
1285
+ additionalProperties: true
1286
+ toolCallId:
1287
+ type: 'string'
1288
+ description: 'The ID used by the GPT model to track a proposed tool call to a tool call result.'
1289
+ nullable: true
1290
+ required:
1291
+ - 'name'
1292
+ - 'parameters'
1293
+ ToolCall:
1294
+ type: 'object'
1295
+ description: 'The record for a singular, completed, call for a tool. This is used for persistence and APIs.'
1296
+ properties:
1297
+ id:
1298
+ type: 'string'
1299
+ description: 'The ID for this singular call.'
1300
+ toolName:
1301
+ type: 'string'
1302
+ description: 'The tool name of the tool called.'
1303
+ parameters:
1304
+ type: 'object'
1305
+ description: 'The parameters supplied to the tool.'
1306
+ additionalProperties: true
1307
+ outcome:
1308
+ $ref: '#/components/schemas/ToolCallResult'
1309
+ postCallImageId:
1310
+ type: 'string'
1311
+ description: 'The ID of the image of the page after the tool was called. If the page was closed during the tool call, this will be null.'
1312
+ nullable: true
1313
+ page:
1314
+ type: 'string'
1315
+ description: 'The URL of the webpage that the tool had focus on when running.'
1316
+ startedAt:
1317
+ type: 'number'
1318
+ description: 'The Unix epoch millisecond timestamp of the instant the tool was called.'
1319
+ completedAt:
1320
+ type: 'number'
1321
+ description: 'The Unix epoch millisecond timestamp of the instant the tool completed.'
1322
+ ToolCallResult:
1323
+ type: 'object'
1324
+ description: 'Response wrapper object for a tool call.'
1325
+ properties:
1326
+ isSuccessful:
1327
+ type: 'boolean'
1328
+ description: 'Indicates if the tool call should be considered a success.'
1329
+ forLlm:
1330
+ type: 'string'
1331
+ description: 'The data to return back to the LLM so that it knows the outcome of this tool call.'
1332
+ metadata:
1333
+ type: 'object'
1334
+ description: 'Metadata to record, but will not be shared with the LLM.'
1335
+ additionalProperties: true
1336
+ nullable: true
1337
+ CodeGenerationOptions:
1338
+ type: 'object'
1339
+ properties:
1340
+ areElementIdsVolatile:
1341
+ type: 'boolean'
1342
+ description: "If true, ID-only selectors (e.g. '#submit-btn') are *dropped* because the element's 'id' attribute is considered volatile. When every candidate is ID-based the list is left unchanged (something is better than nothing)."
1343
+ disableSelectorFailover:
1344
+ type: 'boolean'
1345
+ description: 'If false, only the **first** selector (the most specific one) is used, disabling automatic fail-over to broader selectors.'
1346
+ disableSelfHealingTests:
1347
+ type: 'boolean'
1348
+ description: 'Disable self-healing tests.'
1349
+ disablePullRequestCreation:
1350
+ type: 'boolean'
1351
+ description: 'Disable the automatic creation of pull requests for tests that have self healed.'
1352
+ runInHeadedMode:
1353
+ type: 'boolean'
1354
+ description: 'Run tests with visible browser windows instead of headless mode. Useful for debugging and demos.'
1355
+ slowMotionDelay:
1356
+ type: 'number'
1357
+ description: 'Delay in milliseconds between actions. Set to 0 to disable slow motion. Useful for debugging and demos.'
1358
+ minimum: 0
1359
+ GptConfig:
1360
+ description: 'A resource structure that can be used to establish connectivity with a particular GPT platform and model. If there are an `apiKey`, and/or a `secretAccessKey` fields, they will be redacted before being returned through the API.'
1361
+ oneOf:
1362
+ - $ref: '#/components/schemas/AnthropicConfig'
1363
+ - $ref: '#/components/schemas/AnthropicAwsBedrockConfig'
1364
+ - $ref: '#/components/schemas/GoogleGenerativeAiConfig'
1365
+ - $ref: '#/components/schemas/GoogleVertexConfig'
1366
+ - $ref: '#/components/schemas/OpenAiConfig'
1367
+ discriminator:
1368
+ propertyName: 'type'
1369
+ AnthropicConfig:
1370
+ type: 'object'
1371
+ properties:
1372
+ type:
1373
+ type: 'string'
1374
+ enum: ['ANTHROPIC']
1375
+ apiKey:
1376
+ type: 'string'
1377
+ writeOnly: true
1378
+ modelName:
1379
+ type: 'string'
1380
+ required:
1381
+ - 'type'
1382
+ - 'apiKey'
1383
+ - 'modelName'
1384
+ AnthropicAwsBedrockConfig:
1385
+ type: 'object'
1386
+ properties:
1387
+ type:
1388
+ type: 'string'
1389
+ enum: ['ANTHROPIC_AWS_BEDROCK']
1390
+ region:
1391
+ type: 'string'
1392
+ accessKeyId:
1393
+ type: 'string'
1394
+ writeOnly: true
1395
+ secretAccessKey:
1396
+ type: 'string'
1397
+ writeOnly: true
1398
+ modelName:
1399
+ type: 'string'
1400
+ required:
1401
+ - 'type'
1402
+ - 'modelName'
1403
+ GoogleGenerativeAiConfig:
1404
+ type: 'object'
1405
+ properties:
1406
+ type:
1407
+ type: 'string'
1408
+ enum: ['GOOGLE_GEMINI']
1409
+ apiKey:
1410
+ type: 'string'
1411
+ writeOnly: true
1412
+ modelName:
1413
+ type: 'string'
1414
+ required:
1415
+ - 'type'
1416
+ - 'apiKey'
1417
+ - 'modelName'
1418
+ GoogleVertexConfig:
1419
+ type: 'object'
1420
+ properties:
1421
+ type:
1422
+ type: 'string'
1423
+ enum: ['GOOGLE_VERTEX']
1424
+ modelName:
1425
+ type: 'string'
1426
+ project:
1427
+ type: 'string'
1428
+ location:
1429
+ type: 'string'
1430
+ baseURL:
1431
+ type: 'string'
1432
+ required:
1433
+ - 'type'
1434
+ - 'modelName'
1435
+ OpenAiConfig:
1436
+ type: 'object'
1437
+ properties:
1438
+ type:
1439
+ type: 'string'
1440
+ enum: ['OPENAI']
1441
+ apiKey:
1442
+ type: 'string'
1443
+ writeOnly: true
1444
+ modelName:
1445
+ type: 'string'
1446
+ required:
1447
+ - 'type'
1448
+ - 'apiKey'
1449
+ - 'modelName'
1450
+ DonobuAgent:
1451
+ type: 'string'
1452
+ enum:
1453
+ - 'flow-runner'
1454
+ ToolDefinition:
1455
+ type: 'object'
1456
+ description: 'Defines an available tool.'
1457
+ properties:
1458
+ name:
1459
+ type: 'string'
1460
+ description: 'The unique name of the tool.'
1461
+ description:
1462
+ type: 'string'
1463
+ description: 'A description of what the tool does and when to use it.'
1464
+ inputSchema:
1465
+ type: 'object'
1466
+ description: 'A JSON Schema defining the input parameters for the tool.'
1467
+ additionalProperties: true
1468
+ requiresGpt:
1469
+ type: 'boolean'
1470
+ description: 'Whether this tool requires a configured GPT client to function.'
1471
+ ErrorResponse:
1472
+ type: 'object'
1473
+ description: 'A standardized error response.'
1474
+ properties:
1475
+ code:
1476
+ type: 'string'
1477
+ description: 'A machine-readable error code.'
1478
+ message:
1479
+ type: 'string'
1480
+ description: 'A human-readable description of the error.'
1481
+ required:
1482
+ - 'code'
1483
+ - 'message'