@boatdev/sdk 1.10.0 → 1.12.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 (282) hide show
  1. package/.openapi-generator/FILES +64 -0
  2. package/dist/apis/BoatApi.d.ts +283 -26
  3. package/dist/apis/BoatApi.js +662 -29
  4. package/dist/esm/apis/BoatApi.d.ts +283 -26
  5. package/dist/esm/apis/BoatApi.js +662 -29
  6. package/dist/esm/models/CreateSandboxRequest.d.ts +38 -4
  7. package/dist/esm/models/CreateSandboxRequest.js +17 -0
  8. package/dist/esm/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  9. package/dist/esm/models/CreateSandboxRequestFilesInner.js +56 -0
  10. package/dist/esm/models/CreateSandboxResponse.d.ts +7 -0
  11. package/dist/esm/models/CreateSandboxResponse.js +3 -0
  12. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  13. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.js +64 -0
  14. package/dist/esm/models/CredentialId.d.ts +3 -0
  15. package/dist/esm/models/CredentialId.js +3 -0
  16. package/dist/esm/models/CredentialProfile.d.ts +7 -0
  17. package/dist/esm/models/CredentialProfile.js +3 -0
  18. package/dist/esm/models/DeletionOperation.d.ts +1 -1
  19. package/dist/esm/models/FileDeleteResponse.d.ts +57 -0
  20. package/dist/esm/models/FileDeleteResponse.js +59 -0
  21. package/dist/esm/models/FileEntry.d.ts +68 -0
  22. package/dist/esm/models/FileEntry.js +67 -0
  23. package/dist/esm/models/FileFindResponse.d.ts +70 -0
  24. package/dist/esm/models/FileFindResponse.js +66 -0
  25. package/dist/esm/models/FileFindResponseAllOfMatches.d.ts +44 -0
  26. package/dist/esm/models/FileFindResponseAllOfMatches.js +51 -0
  27. package/dist/esm/models/FileFolderRequest.d.ts +38 -0
  28. package/dist/esm/models/FileFolderRequest.js +45 -0
  29. package/dist/esm/models/FileInfoResponse.d.ts +95 -0
  30. package/dist/esm/models/FileInfoResponse.js +85 -0
  31. package/dist/esm/models/FileListResponse.d.ts +70 -0
  32. package/dist/esm/models/FileListResponse.js +68 -0
  33. package/dist/esm/models/FileMoveRequest.d.ts +44 -0
  34. package/dist/esm/models/FileMoveRequest.js +49 -0
  35. package/dist/esm/models/FileMoveResponse.d.ts +63 -0
  36. package/dist/esm/models/FileMoveResponse.js +63 -0
  37. package/dist/esm/models/FilePermissionsRequest.d.ts +38 -0
  38. package/dist/esm/models/FilePermissionsRequest.js +47 -0
  39. package/dist/esm/models/FileReplaceRequest.d.ts +44 -0
  40. package/dist/esm/models/FileReplaceRequest.js +51 -0
  41. package/dist/esm/models/FileReplaceResponse.d.ts +58 -0
  42. package/dist/esm/models/FileReplaceResponse.js +60 -0
  43. package/dist/esm/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  44. package/dist/esm/models/FileReplaceResponseAllOfResults.js +51 -0
  45. package/dist/esm/models/FileSearchResponse.d.ts +69 -0
  46. package/dist/esm/models/FileSearchResponse.js +65 -0
  47. package/dist/esm/models/LimitsFields.d.ts +54 -16
  48. package/dist/esm/models/LimitsFields.js +16 -2
  49. package/dist/esm/models/LimitsFieldsOveragePrices.d.ts +51 -0
  50. package/dist/esm/models/LimitsFieldsOveragePrices.js +48 -0
  51. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  52. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.js +45 -0
  53. package/dist/esm/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  54. package/dist/esm/models/LimitsFieldsPlanIncluded.js +45 -0
  55. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  56. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.js +45 -0
  57. package/dist/esm/models/LimitsFieldsWallet.d.ts +32 -0
  58. package/dist/esm/models/LimitsFieldsWallet.js +41 -0
  59. package/dist/esm/models/LimitsResponse.d.ts +54 -16
  60. package/dist/esm/models/LimitsResponse.js +16 -2
  61. package/dist/esm/models/NamedSnapshotAllowance.d.ts +9 -3
  62. package/dist/esm/models/NamedSnapshotAllowance.js +2 -0
  63. package/dist/esm/models/ResourceAccess.d.ts +38 -0
  64. package/dist/esm/models/ResourceAccess.js +47 -0
  65. package/dist/esm/models/ResourceAccessUpdate.d.ts +38 -0
  66. package/dist/esm/models/ResourceAccessUpdate.js +45 -0
  67. package/dist/esm/models/Sandbox.d.ts +7 -0
  68. package/dist/esm/models/Sandbox.js +3 -0
  69. package/dist/esm/models/SandboxEnvironment.d.ts +7 -0
  70. package/dist/esm/models/SandboxEnvironment.js +3 -0
  71. package/dist/esm/models/SandboxLastReboot.d.ts +47 -0
  72. package/dist/esm/models/SandboxLastReboot.js +51 -0
  73. package/dist/esm/models/SandboxListResponse.d.ts +7 -0
  74. package/dist/esm/models/SandboxListResponse.js +3 -0
  75. package/dist/esm/models/SandboxListResponseAllOfDeletedCost.d.ts +44 -0
  76. package/dist/esm/models/SandboxListResponseAllOfDeletedCost.js +51 -0
  77. package/dist/esm/models/SavedSnapshot.d.ts +83 -0
  78. package/dist/esm/models/SavedSnapshot.js +71 -0
  79. package/dist/esm/models/SavedSnapshotAllowance.d.ts +87 -0
  80. package/dist/esm/models/SavedSnapshotAllowance.js +59 -0
  81. package/dist/esm/models/SavedSnapshotDeletedResponse.d.ts +64 -0
  82. package/dist/esm/models/SavedSnapshotDeletedResponse.js +67 -0
  83. package/dist/esm/models/SavedSnapshotInfoResponse.d.ts +52 -0
  84. package/dist/esm/models/SavedSnapshotInfoResponse.js +58 -0
  85. package/dist/esm/models/SavedSnapshotListResponse.d.ts +59 -0
  86. package/dist/esm/models/SavedSnapshotListResponse.js +61 -0
  87. package/dist/esm/models/SavedSnapshotSaveRequest.d.ts +38 -0
  88. package/dist/esm/models/SavedSnapshotSaveRequest.js +47 -0
  89. package/dist/esm/models/SavedSnapshotSavingResponse.d.ts +65 -0
  90. package/dist/esm/models/SavedSnapshotSavingResponse.js +68 -0
  91. package/dist/esm/models/SnapshotSummary.d.ts +1 -1
  92. package/dist/esm/models/UpdateCredentialProfileRequest.d.ts +7 -0
  93. package/dist/esm/models/UpdateCredentialProfileRequest.js +3 -0
  94. package/dist/esm/models/UpdateSandboxEnvironmentRequest.d.ts +7 -0
  95. package/dist/esm/models/UpdateSandboxEnvironmentRequest.js +3 -0
  96. package/dist/esm/models/index.d.ts +32 -0
  97. package/dist/esm/models/index.js +32 -0
  98. package/dist/models/CreateSandboxRequest.d.ts +38 -4
  99. package/dist/models/CreateSandboxRequest.js +18 -1
  100. package/dist/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  101. package/dist/models/CreateSandboxRequestFilesInner.js +64 -0
  102. package/dist/models/CreateSandboxResponse.d.ts +7 -0
  103. package/dist/models/CreateSandboxResponse.js +3 -0
  104. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  105. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.js +72 -0
  106. package/dist/models/CredentialId.d.ts +3 -0
  107. package/dist/models/CredentialId.js +3 -0
  108. package/dist/models/CredentialProfile.d.ts +7 -0
  109. package/dist/models/CredentialProfile.js +3 -0
  110. package/dist/models/DeletionOperation.d.ts +1 -1
  111. package/dist/models/FileDeleteResponse.d.ts +57 -0
  112. package/dist/models/FileDeleteResponse.js +67 -0
  113. package/dist/models/FileEntry.d.ts +68 -0
  114. package/dist/models/FileEntry.js +74 -0
  115. package/dist/models/FileFindResponse.d.ts +70 -0
  116. package/dist/models/FileFindResponse.js +74 -0
  117. package/dist/models/FileFindResponseAllOfMatches.d.ts +44 -0
  118. package/dist/models/FileFindResponseAllOfMatches.js +58 -0
  119. package/dist/models/FileFolderRequest.d.ts +38 -0
  120. package/dist/models/FileFolderRequest.js +52 -0
  121. package/dist/models/FileInfoResponse.d.ts +95 -0
  122. package/dist/models/FileInfoResponse.js +93 -0
  123. package/dist/models/FileListResponse.d.ts +70 -0
  124. package/dist/models/FileListResponse.js +76 -0
  125. package/dist/models/FileMoveRequest.d.ts +44 -0
  126. package/dist/models/FileMoveRequest.js +56 -0
  127. package/dist/models/FileMoveResponse.d.ts +63 -0
  128. package/dist/models/FileMoveResponse.js +71 -0
  129. package/dist/models/FilePermissionsRequest.d.ts +38 -0
  130. package/dist/models/FilePermissionsRequest.js +54 -0
  131. package/dist/models/FileReplaceRequest.d.ts +44 -0
  132. package/dist/models/FileReplaceRequest.js +58 -0
  133. package/dist/models/FileReplaceResponse.d.ts +58 -0
  134. package/dist/models/FileReplaceResponse.js +68 -0
  135. package/dist/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  136. package/dist/models/FileReplaceResponseAllOfResults.js +58 -0
  137. package/dist/models/FileSearchResponse.d.ts +69 -0
  138. package/dist/models/FileSearchResponse.js +73 -0
  139. package/dist/models/LimitsFields.d.ts +54 -16
  140. package/dist/models/LimitsFields.js +16 -2
  141. package/dist/models/LimitsFieldsOveragePrices.d.ts +51 -0
  142. package/dist/models/LimitsFieldsOveragePrices.js +55 -0
  143. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  144. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.js +52 -0
  145. package/dist/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  146. package/dist/models/LimitsFieldsPlanIncluded.js +52 -0
  147. package/dist/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  148. package/dist/models/LimitsFieldsStartLimitsWithWallet.js +52 -0
  149. package/dist/models/LimitsFieldsWallet.d.ts +32 -0
  150. package/dist/models/LimitsFieldsWallet.js +48 -0
  151. package/dist/models/LimitsResponse.d.ts +54 -16
  152. package/dist/models/LimitsResponse.js +16 -2
  153. package/dist/models/NamedSnapshotAllowance.d.ts +9 -3
  154. package/dist/models/NamedSnapshotAllowance.js +2 -0
  155. package/dist/models/ResourceAccess.d.ts +38 -0
  156. package/dist/models/ResourceAccess.js +54 -0
  157. package/dist/models/ResourceAccessUpdate.d.ts +38 -0
  158. package/dist/models/ResourceAccessUpdate.js +52 -0
  159. package/dist/models/Sandbox.d.ts +7 -0
  160. package/dist/models/Sandbox.js +3 -0
  161. package/dist/models/SandboxEnvironment.d.ts +7 -0
  162. package/dist/models/SandboxEnvironment.js +3 -0
  163. package/dist/models/SandboxLastReboot.d.ts +47 -0
  164. package/dist/models/SandboxLastReboot.js +59 -0
  165. package/dist/models/SandboxListResponse.d.ts +7 -0
  166. package/dist/models/SandboxListResponse.js +3 -0
  167. package/dist/models/SandboxListResponseAllOfDeletedCost.d.ts +44 -0
  168. package/dist/models/SandboxListResponseAllOfDeletedCost.js +58 -0
  169. package/dist/models/SavedSnapshot.d.ts +83 -0
  170. package/dist/models/SavedSnapshot.js +79 -0
  171. package/dist/models/SavedSnapshotAllowance.d.ts +87 -0
  172. package/dist/models/SavedSnapshotAllowance.js +66 -0
  173. package/dist/models/SavedSnapshotDeletedResponse.d.ts +64 -0
  174. package/dist/models/SavedSnapshotDeletedResponse.js +75 -0
  175. package/dist/models/SavedSnapshotInfoResponse.d.ts +52 -0
  176. package/dist/models/SavedSnapshotInfoResponse.js +66 -0
  177. package/dist/models/SavedSnapshotListResponse.d.ts +59 -0
  178. package/dist/models/SavedSnapshotListResponse.js +69 -0
  179. package/dist/models/SavedSnapshotSaveRequest.d.ts +38 -0
  180. package/dist/models/SavedSnapshotSaveRequest.js +54 -0
  181. package/dist/models/SavedSnapshotSavingResponse.d.ts +65 -0
  182. package/dist/models/SavedSnapshotSavingResponse.js +76 -0
  183. package/dist/models/SnapshotSummary.d.ts +1 -1
  184. package/dist/models/UpdateCredentialProfileRequest.d.ts +7 -0
  185. package/dist/models/UpdateCredentialProfileRequest.js +3 -0
  186. package/dist/models/UpdateSandboxEnvironmentRequest.d.ts +7 -0
  187. package/dist/models/UpdateSandboxEnvironmentRequest.js +3 -0
  188. package/dist/models/index.d.ts +32 -0
  189. package/dist/models/index.js +32 -0
  190. package/docs/BoatApi.md +1049 -61
  191. package/docs/CreateSandboxRequest.md +8 -0
  192. package/docs/CreateSandboxRequestFilesInner.md +36 -0
  193. package/docs/CreateSandboxResponse.md +2 -0
  194. package/docs/CreateSandboxResponseAllOfHostedPortsInner.md +44 -0
  195. package/docs/CredentialProfile.md +2 -0
  196. package/docs/FileDeleteResponse.md +38 -0
  197. package/docs/FileEntry.md +44 -0
  198. package/docs/FileFindResponse.md +42 -0
  199. package/docs/FileFindResponseAllOfMatches.md +36 -0
  200. package/docs/FileFolderRequest.md +34 -0
  201. package/docs/FileInfoResponse.md +50 -0
  202. package/docs/FileListResponse.md +42 -0
  203. package/docs/FileMoveRequest.md +36 -0
  204. package/docs/FileMoveResponse.md +40 -0
  205. package/docs/FilePermissionsRequest.md +34 -0
  206. package/docs/FileReplaceRequest.md +36 -0
  207. package/docs/FileReplaceResponse.md +38 -0
  208. package/docs/FileReplaceResponseAllOfResults.md +38 -0
  209. package/docs/FileSearchResponse.md +42 -0
  210. package/docs/LimitsFields.md +12 -2
  211. package/docs/LimitsFieldsOveragePrices.md +39 -0
  212. package/docs/LimitsFieldsOveragePricesStartBracketsInner.md +36 -0
  213. package/docs/LimitsFieldsPlanIncluded.md +37 -0
  214. package/docs/LimitsFieldsStartLimitsWithWallet.md +37 -0
  215. package/docs/LimitsFieldsWallet.md +33 -0
  216. package/docs/LimitsResponse.md +12 -2
  217. package/docs/NamedSnapshotAllowance.md +3 -1
  218. package/docs/ResourceAccess.md +35 -0
  219. package/docs/ResourceAccessUpdate.md +35 -0
  220. package/docs/Sandbox.md +2 -0
  221. package/docs/SandboxEnvironment.md +2 -0
  222. package/docs/SandboxLastReboot.md +35 -0
  223. package/docs/SandboxListResponse.md +2 -0
  224. package/docs/SandboxListResponseAllOfDeletedCost.md +37 -0
  225. package/docs/SavedSnapshot.md +47 -0
  226. package/docs/SavedSnapshotAllowance.md +51 -0
  227. package/docs/SavedSnapshotDeletedResponse.md +38 -0
  228. package/docs/SavedSnapshotInfoResponse.md +36 -0
  229. package/docs/SavedSnapshotListResponse.md +38 -0
  230. package/docs/SavedSnapshotSaveRequest.md +34 -0
  231. package/docs/SavedSnapshotSavingResponse.md +38 -0
  232. package/docs/UpdateCredentialProfileRequest.md +2 -0
  233. package/docs/UpdateSandboxEnvironmentRequest.md +2 -0
  234. package/package.json +1 -1
  235. package/src/apis/BoatApi.ts +999 -30
  236. package/src/models/CreateSandboxRequest.ts +60 -4
  237. package/src/models/CreateSandboxRequestFilesInner.ts +94 -0
  238. package/src/models/CreateSandboxResponse.ts +15 -0
  239. package/src/models/CreateSandboxResponseAllOfHostedPortsInner.ts +128 -0
  240. package/src/models/CredentialId.ts +3 -0
  241. package/src/models/CredentialProfile.ts +15 -0
  242. package/src/models/DeletionOperation.ts +1 -1
  243. package/src/models/FileDeleteResponse.ts +102 -0
  244. package/src/models/FileEntry.ts +120 -0
  245. package/src/models/FileFindResponse.ts +127 -0
  246. package/src/models/FileFindResponseAllOfMatches.ts +84 -0
  247. package/src/models/FileFolderRequest.ts +74 -0
  248. package/src/models/FileInfoResponse.ts +158 -0
  249. package/src/models/FileListResponse.ts +128 -0
  250. package/src/models/FileMoveRequest.ts +83 -0
  251. package/src/models/FileMoveResponse.ts +111 -0
  252. package/src/models/FilePermissionsRequest.ts +75 -0
  253. package/src/models/FileReplaceRequest.ts +84 -0
  254. package/src/models/FileReplaceResponse.ts +110 -0
  255. package/src/models/FileReplaceResponseAllOfResults.ts +91 -0
  256. package/src/models/FileSearchResponse.ts +119 -0
  257. package/src/models/LimitsFields.ts +90 -16
  258. package/src/models/LimitsFieldsOveragePrices.ts +97 -0
  259. package/src/models/LimitsFieldsOveragePricesStartBracketsInner.ts +81 -0
  260. package/src/models/LimitsFieldsPlanIncluded.ts +81 -0
  261. package/src/models/LimitsFieldsStartLimitsWithWallet.ts +81 -0
  262. package/src/models/LimitsFieldsWallet.ts +65 -0
  263. package/src/models/LimitsResponse.ts +90 -16
  264. package/src/models/NamedSnapshotAllowance.ts +11 -3
  265. package/src/models/ResourceAccess.ts +75 -0
  266. package/src/models/ResourceAccessUpdate.ts +74 -0
  267. package/src/models/Sandbox.ts +15 -0
  268. package/src/models/SandboxEnvironment.ts +15 -0
  269. package/src/models/SandboxLastReboot.ts +85 -0
  270. package/src/models/SandboxListResponse.ts +15 -0
  271. package/src/models/SandboxListResponseAllOfDeletedCost.ts +84 -0
  272. package/src/models/SavedSnapshot.ts +137 -0
  273. package/src/models/SavedSnapshotAllowance.ts +138 -0
  274. package/src/models/SavedSnapshotDeletedResponse.ts +111 -0
  275. package/src/models/SavedSnapshotInfoResponse.ts +102 -0
  276. package/src/models/SavedSnapshotListResponse.ts +117 -0
  277. package/src/models/SavedSnapshotSaveRequest.ts +75 -0
  278. package/src/models/SavedSnapshotSavingResponse.ts +119 -0
  279. package/src/models/SnapshotSummary.ts +1 -1
  280. package/src/models/UpdateCredentialProfileRequest.ts +16 -0
  281. package/src/models/UpdateSandboxEnvironmentRequest.ts +15 -0
  282. package/src/models/index.ts +32 -0
package/docs/BoatApi.md CHANGED
@@ -19,8 +19,9 @@ All URIs are relative to *https://boat.dev/api/v1*
19
19
  | [**createCredentialProfile**](BoatApi.md#createcredentialprofileoperation) | **POST** /credential-profiles | Create a credential profile |
20
20
  | [**createDownloadUrl**](BoatApi.md#createdownloadurl) | **POST** /sandboxes/{sandboxId}/files/download-url | Get a download URL for a sandbox file |
21
21
  | [**createEnvironment**](BoatApi.md#createenvironment) | **POST** /environments | Create a sandbox environment |
22
+ | [**createFolder**](BoatApi.md#createfolder) | **POST** /sandboxes/{sandboxId}/files/folder | Create a directory in a sandbox |
22
23
  | [**createScopedApiKey**](BoatApi.md#createscopedapikeyoperation) | **POST** /api-keys/scoped | Create a scoped API key |
23
- | [**createSnapshotShare**](BoatApi.md#createsnapshotshare) | **POST** /named-snapshots/{name}/shares | Share a named snapshot |
24
+ | [**createSnapshotShare**](BoatApi.md#createsnapshotshare) | **POST** /saved-snapshots/{name}/shares | Share a saved snapshot |
24
25
  | [**createUploadUrl**](BoatApi.md#createuploadurl) | **POST** /sandboxes/{sandboxId}/files/upload-url | Get an upload URL for a sandbox file |
25
26
  | [**createWebhook**](BoatApi.md#createwebhook) | **POST** /webhooks | Create webhook |
26
27
  | [**deleteCredentialAccount**](BoatApi.md#deletecredentialaccount) | **DELETE** /credential-profiles/{profile}/accounts/{credential}/{account} | Forget an account of a credential |
@@ -31,15 +32,18 @@ All URIs are relative to *https://boat.dev/api/v1*
31
32
  | [**deleteEnvironmentRepo**](BoatApi.md#deleteenvironmentrepo) | **DELETE** /environments/{environmentId}/repos/{repositoryId} | Remove a repository from an environment |
32
33
  | [**deleteEnvironmentSecretFile**](BoatApi.md#deleteenvironmentsecretfile) | **DELETE** /environments/{environmentId}/secret-files | Remove one secret file |
33
34
  | [**deleteEnvironmentVar**](BoatApi.md#deleteenvironmentvar) | **DELETE** /environments/{environmentId}/vars/{key} | Remove one environment variable |
35
+ | [**deleteFile**](BoatApi.md#deletefile) | **DELETE** /sandboxes/{sandboxId}/files | Delete a file or directory in a sandbox |
34
36
  | [**deleteNamedSnapshot**](BoatApi.md#deletenamedsnapshot) | **DELETE** /named-snapshots/{name} | Remove a named snapshot |
35
37
  | [**deleteSandbox**](BoatApi.md#deletesandbox) | **DELETE** /sandboxes/{sandboxId} | Permanently delete sandbox data |
36
38
  | [**deleteSandboxSnapshots**](BoatApi.md#deletesandboxsnapshots) | **DELETE** /sandboxes/{sandboxId}/snapshots | Permanently delete all snapshots of a sandbox |
39
+ | [**deleteSavedSnapshot**](BoatApi.md#deletesavedsnapshot) | **DELETE** /saved-snapshots/{name} | Remove a saved snapshot |
37
40
  | [**deleteSnapshot**](BoatApi.md#deletesnapshot) | **DELETE** /snapshots/{snapshotId} | Permanently delete snapshot data |
38
41
  | [**deleteTelemetry**](BoatApi.md#deletetelemetry) | **DELETE** /telemetry | Remove OpenTelemetry export |
39
42
  | [**deleteWebhook**](BoatApi.md#deletewebhook) | **DELETE** /webhooks/{webhookId} | Delete webhook |
40
43
  | [**desktop**](BoatApi.md#desktopoperation) | **POST** /sandboxes/{sandboxId}/desktop | Get desktop streaming URL |
41
44
  | [**environments**](BoatApi.md#environments) | **GET** /environments | List Sandbox environments |
42
45
  | [**events**](BoatApi.md#events) | **GET** /sandboxes/{sandboxId}/events | List boat events |
46
+ | [**findInFiles**](BoatApi.md#findinfiles) | **GET** /sandboxes/{sandboxId}/files/find | Find text in sandbox files |
43
47
  | [**fork**](BoatApi.md#forkoperation) | **POST** /sandboxes/{sandboxId}/fork | Fork sandbox |
44
48
  | [**get**](BoatApi.md#get) | **GET** /sandboxes/{sandboxId} | Get sandbox |
45
49
  | [**getAiProxy**](BoatApi.md#getaiproxy) | **GET** /ai-proxy | Get AI credentials proxy |
@@ -47,9 +51,11 @@ All URIs are relative to *https://boat.dev/api/v1*
47
51
  | [**getCommand**](BoatApi.md#getcommand) | **GET** /sandboxes/{sandboxId}/command-history/{commandId} | Get one command from the history |
48
52
  | [**getDataRetention**](BoatApi.md#getdataretention) | **GET** /account/data-retention | Get account data-retention policy |
49
53
  | [**getDeletionOperation**](BoatApi.md#getdeletionoperation) | **GET** /deletion-operations/{operationId} | Get deletion operation |
54
+ | [**getFileInfo**](BoatApi.md#getfileinfo) | **GET** /sandboxes/{sandboxId}/files/info | Get file or directory details in a sandbox |
50
55
  | [**getLatestSandboxSnapshot**](BoatApi.md#getlatestsandboxsnapshot) | **GET** /sandboxes/{sandboxId}/snapshots/latest | Get latest boat snapshot |
51
56
  | [**getNamedSnapshot**](BoatApi.md#getnamedsnapshot) | **GET** /named-snapshots/{name} | Get a named snapshot |
52
57
  | [**getSandboxAiUsage**](BoatApi.md#getsandboxaiusage) | **GET** /sandboxes/{sandboxId}/ai-usage | Get sandbox AI usage |
58
+ | [**getSavedSnapshot**](BoatApi.md#getsavedsnapshot) | **GET** /saved-snapshots/{name} | Get a saved snapshot |
53
59
  | [**getSnapshotDownload**](BoatApi.md#getsnapshotdownload) | **GET** /snapshots/{snapshotId}/download | Get snapshot download |
54
60
  | [**getSnapshotFile**](BoatApi.md#getsnapshotfile) | **GET** /snapshots/{snapshotId}/files | Download a file or folder from a snapshot |
55
61
  | [**getSnapshotTree**](BoatApi.md#getsnapshottree) | **GET** /snapshots/{snapshotId}/tree | Get snapshot file tree |
@@ -61,26 +67,32 @@ All URIs are relative to *https://boat.dev/api/v1*
61
67
  | [**limits**](BoatApi.md#limits) | **GET** /limits | Get Boat limits |
62
68
  | [**listCredentialAccounts**](BoatApi.md#listcredentialaccounts) | **GET** /credential-profiles/{profile}/accounts/{credential} | List the accounts of a credential |
63
69
  | [**listCredentialProfiles**](BoatApi.md#listcredentialprofiles) | **GET** /credential-profiles | List credential profiles |
70
+ | [**listFiles**](BoatApi.md#listfiles) | **GET** /sandboxes/{sandboxId}/files/list | List a directory in a sandbox |
64
71
  | [**listNamedSnapshots**](BoatApi.md#listnamedsnapshots) | **GET** /named-snapshots | List named snapshots |
65
72
  | [**listOrganizations**](BoatApi.md#listorganizations) | **GET** /orgs | List organizations |
66
73
  | [**listSandboxSnapshots**](BoatApi.md#listsandboxsnapshots) | **GET** /sandboxes/{sandboxId}/snapshots | List boat snapshots |
67
- | [**listSnapshotShares**](BoatApi.md#listsnapshotshares) | **GET** /named-snapshots/{name}/shares | List share codes of a named snapshot |
74
+ | [**listSavedSnapshots**](BoatApi.md#listsavedsnapshots) | **GET** /saved-snapshots | List saved snapshots |
75
+ | [**listSnapshotShares**](BoatApi.md#listsnapshotshares) | **GET** /saved-snapshots/{name}/shares | List share codes of a saved snapshot |
68
76
  | [**listSnapshots**](BoatApi.md#listsnapshots) | **GET** /snapshots | List snapshots |
69
77
  | [**listWebhooks**](BoatApi.md#listwebhooks) | **GET** /webhooks | List webhooks |
70
78
  | [**me**](BoatApi.md#me) | **GET** /me | Get current Boat user |
79
+ | [**moveFile**](BoatApi.md#movefile) | **POST** /sandboxes/{sandboxId}/files/move | Move or rename a file or directory in a sandbox |
71
80
  | [**processes**](BoatApi.md#processes) | **GET** /sandboxes/{sandboxId}/processes | List the processes in a sandbox |
72
81
  | [**prompt**](BoatApi.md#promptoperation) | **POST** /sandboxes/{sandboxId}/prompt | Prompt Sandbox |
73
82
  | [**promptRunStatus**](BoatApi.md#promptrunstatus) | **GET** /sandboxes/{sandboxId}/prompts/{promptId} | Get prompt run status |
74
83
  | [**readFile**](BoatApi.md#readfile) | **GET** /sandboxes/{sandboxId}/files | Read a file from a sandbox |
75
84
  | [**recover**](BoatApi.md#recover) | **POST** /sandboxes/{sandboxId}/recover | Recover a sandbox that stopped responding |
85
+ | [**replaceInFiles**](BoatApi.md#replaceinfiles) | **POST** /sandboxes/{sandboxId}/files/replace | Replace text in sandbox files |
76
86
  | [**repos**](BoatApi.md#repos) | **GET** /repos | List GitHub repositories available to Boat |
77
87
  | [**resume**](BoatApi.md#resumeoperation) | **POST** /sandboxes/{sandboxId}/resume | Resume sandbox |
78
88
  | [**revokeApiKey**](BoatApi.md#revokeapikey) | **DELETE** /api-keys/{apiKeyId} | Revoke an API key |
79
- | [**revokeSnapshotShare**](BoatApi.md#revokesnapshotshare) | **DELETE** /named-snapshots/{name}/shares/{shareId} | Revoke a share code |
89
+ | [**revokeSnapshotShare**](BoatApi.md#revokesnapshotshare) | **DELETE** /saved-snapshots/{name}/shares/{shareId} | Revoke a share code |
80
90
  | [**rotateApiKey**](BoatApi.md#rotateapikey) | **POST** /api-keys/{apiKeyId}/rotate | Rotate an API key |
81
91
  | [**rotateWebhookSigningSecret**](BoatApi.md#rotatewebhooksigningsecret) | **POST** /webhooks/{webhookId}/rotate | Rotate webhook signing secret |
82
92
  | [**sandboxes**](BoatApi.md#sandboxes) | **GET** /sandboxes | List sandboxes |
83
93
  | [**saveNamedSnapshot**](BoatApi.md#savenamedsnapshot) | **POST** /named-snapshots | Save a named snapshot |
94
+ | [**saveSavedSnapshot**](BoatApi.md#savesavedsnapshot) | **POST** /saved-snapshots | Save a saved snapshot |
95
+ | [**searchFiles**](BoatApi.md#searchfiles) | **GET** /sandboxes/{sandboxId}/files/search | Search files by name in a sandbox |
84
96
  | [**secrets**](BoatApi.md#secrets) | **GET** /secrets | Get Boat secrets setup |
85
97
  | [**selectRepo**](BoatApi.md#selectrepo) | **POST** /repos | Select repository for sandboxes |
86
98
  | [**setActiveOrganization**](BoatApi.md#setactiveorganization) | **PATCH** /orgs/active | Set the active organization |
@@ -88,6 +100,7 @@ All URIs are relative to *https://boat.dev/api/v1*
88
100
  | [**setCredentialProfileKey**](BoatApi.md#setcredentialprofilekey) | **PUT** /credential-profiles/{profile}/keys/{credential} | Set a credential profile API key |
89
101
  | [**setEnvironmentSecretFile**](BoatApi.md#setenvironmentsecretfileoperation) | **PUT** /environments/{environmentId}/secret-files | Write one secret file |
90
102
  | [**setEnvironmentVar**](BoatApi.md#setenvironmentvaroperation) | **PUT** /environments/{environmentId}/vars/{key} | Set one environment variable |
103
+ | [**setFilePermissions**](BoatApi.md#setfilepermissions) | **POST** /sandboxes/{sandboxId}/files/permissions | Set file permissions in a sandbox |
91
104
  | [**setSandboxAiAccess**](BoatApi.md#setsandboxaiaccessoperation) | **PUT** /sandboxes/{sandboxId}/ai-access | Block or unblock sandbox AI access |
92
105
  | [**setTelemetry**](BoatApi.md#settelemetry) | **PUT** /telemetry | Set OpenTelemetry export |
93
106
  | [**share**](BoatApi.md#share) | **POST** /sandboxes/{sandboxId}/share | Share sandbox with the organization |
@@ -163,7 +176,7 @@ example().catch(console.error);
163
176
  | Name | Type | Description | Notes |
164
177
  |------------- | ------------- | ------------- | -------------|
165
178
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
166
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
179
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
167
180
  | **setCredentialKeyRequest** | [SetCredentialKeyRequest](SetCredentialKeyRequest.md) | | |
168
181
 
169
182
  ### Return type
@@ -1060,8 +1073,9 @@ example().catch(console.error);
1060
1073
  | **202** | Boat accepted for provisioning. | - |
1061
1074
  | **401** | Missing or invalid bearer token. | - |
1062
1075
  | **402** | Account cannot currently create or operate sandboxes. The error body may include a dashboard billing URL, but billing actions are not part of the v1 API. | - |
1076
+ | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
1063
1077
  | **409** | Request conflicts with current account or sandbox state. | - |
1064
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
1078
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
1065
1079
  | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
1066
1080
 
1067
1081
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -1297,13 +1311,88 @@ example().catch(console.error);
1297
1311
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1298
1312
 
1299
1313
 
1314
+ ## createFolder
1315
+
1316
+ > FileInfoResponse createFolder(sandboxId, fileFolderRequest)
1317
+
1318
+ Create a directory in a sandbox
1319
+
1320
+ Missing parent directories are created. An existing directory is not an error. Needs `file.write`.
1321
+
1322
+ ### Example
1323
+
1324
+ ```ts
1325
+ import {
1326
+ Configuration,
1327
+ BoatApi,
1328
+ } from '@boatdev/sdk';
1329
+ import type { CreateFolderRequest } from '@boatdev/sdk';
1330
+
1331
+ async function example() {
1332
+ console.log("🚀 Testing @boatdev/sdk SDK...");
1333
+ const config = new Configuration({
1334
+ // Configure HTTP bearer authorization: BoatBearerAuth
1335
+ accessToken: "YOUR BEARER TOKEN",
1336
+ });
1337
+ const api = new BoatApi(config);
1338
+
1339
+ const body = {
1340
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
1341
+ sandboxId: sandboxId_example,
1342
+ // FileFolderRequest
1343
+ fileFolderRequest: ...,
1344
+ } satisfies CreateFolderRequest;
1345
+
1346
+ try {
1347
+ const data = await api.createFolder(body);
1348
+ console.log(data);
1349
+ } catch (error) {
1350
+ console.error(error);
1351
+ }
1352
+ }
1353
+
1354
+ // Run the test
1355
+ example().catch(console.error);
1356
+ ```
1357
+
1358
+ ### Parameters
1359
+
1360
+
1361
+ | Name | Type | Description | Notes |
1362
+ |------------- | ------------- | ------------- | -------------|
1363
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
1364
+ | **fileFolderRequest** | [FileFolderRequest](FileFolderRequest.md) | | |
1365
+
1366
+ ### Return type
1367
+
1368
+ [**FileInfoResponse**](FileInfoResponse.md)
1369
+
1370
+ ### Authorization
1371
+
1372
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
1373
+
1374
+ ### HTTP request headers
1375
+
1376
+ - **Content-Type**: `application/json`
1377
+ - **Accept**: `application/json`
1378
+
1379
+
1380
+ ### HTTP response details
1381
+ | Status code | Description | Response headers |
1382
+ |-------------|-------------|------------------|
1383
+ | **200** | Directory created. | - |
1384
+ | **400** | Invalid request body or parameters. | - |
1385
+
1386
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1387
+
1388
+
1300
1389
  ## createScopedApiKey
1301
1390
 
1302
1391
  > ApiKeySecretResponse createScopedApiKey(createScopedApiKeyRequest)
1303
1392
 
1304
1393
  Create a scoped API key
1305
1394
 
1306
- Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. This dedicated path returns a typed 503 until scoped credential creation is activated.
1395
+ Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. An unknown field is a 400, so a misspelled scope never creates a full-access key. environmentIds takes your own environments and the org environments you can use. This dedicated path returns a typed 503 until scoped credential creation is activated.
1307
1396
 
1308
1397
  ### Example
1309
1398
 
@@ -1376,9 +1465,9 @@ example().catch(console.error);
1376
1465
 
1377
1466
  > NamedSnapshotShareCreatedResponse createSnapshotShare(name)
1378
1467
 
1379
- Share a named snapshot
1468
+ Share a saved snapshot
1380
1469
 
1381
- Make a secret code that lets any Boat account create a sandbox from this named snapshot (`boat snapshot share <name>` in the CLI). The response shows the code once; Boat stores only a hash. Re-saving the name changes what the code deploys. Removing the name removes its codes. Everything on the disk is shared, so do not keep secrets in files on it. Needs `snapshot.write`.
1470
+ Make a secret code that lets any Boat account create a sandbox from this saved snapshot (`boat snapshot share <name>` in the CLI). The response shows the code once; Boat stores only a hash. Re-saving the name changes what the code deploys. Removing the name removes its codes. Everything on the disk is shared, so do not keep secrets in files on it. Needs `snapshot.write`.
1382
1471
 
1383
1472
  ### Example
1384
1473
 
@@ -1649,7 +1738,7 @@ example().catch(console.error);
1649
1738
  | Name | Type | Description | Notes |
1650
1739
  |------------- | ------------- | ------------- | -------------|
1651
1740
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1652
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
1741
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
1653
1742
  | **account** | `string` | The account id from the list. | [Defaults to `undefined`] |
1654
1743
 
1655
1744
  ### Return type
@@ -1880,7 +1969,7 @@ example().catch(console.error);
1880
1969
  | Name | Type | Description | Notes |
1881
1970
  |------------- | ------------- | ------------- | -------------|
1882
1971
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1883
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
1972
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
1884
1973
 
1885
1974
  ### Return type
1886
1975
 
@@ -2222,6 +2311,84 @@ example().catch(console.error);
2222
2311
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2223
2312
 
2224
2313
 
2314
+ ## deleteFile
2315
+
2316
+ > FileDeleteResponse deleteFile(sandboxId, path, recursive)
2317
+
2318
+ Delete a file or directory in a sandbox
2319
+
2320
+ A directory needs `recursive=true`. A symlink is deleted itself, never its target. /home/user and /tmp themselves cannot be deleted. Needs `file.write`.
2321
+
2322
+ ### Example
2323
+
2324
+ ```ts
2325
+ import {
2326
+ Configuration,
2327
+ BoatApi,
2328
+ } from '@boatdev/sdk';
2329
+ import type { DeleteFileRequest } from '@boatdev/sdk';
2330
+
2331
+ async function example() {
2332
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2333
+ const config = new Configuration({
2334
+ // Configure HTTP bearer authorization: BoatBearerAuth
2335
+ accessToken: "YOUR BEARER TOKEN",
2336
+ });
2337
+ const api = new BoatApi(config);
2338
+
2339
+ const body = {
2340
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
2341
+ sandboxId: sandboxId_example,
2342
+ // string
2343
+ path: path_example,
2344
+ // boolean (optional)
2345
+ recursive: true,
2346
+ } satisfies DeleteFileRequest;
2347
+
2348
+ try {
2349
+ const data = await api.deleteFile(body);
2350
+ console.log(data);
2351
+ } catch (error) {
2352
+ console.error(error);
2353
+ }
2354
+ }
2355
+
2356
+ // Run the test
2357
+ example().catch(console.error);
2358
+ ```
2359
+
2360
+ ### Parameters
2361
+
2362
+
2363
+ | Name | Type | Description | Notes |
2364
+ |------------- | ------------- | ------------- | -------------|
2365
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2366
+ | **path** | `string` | | [Defaults to `undefined`] |
2367
+ | **recursive** | `boolean` | | [Optional] [Defaults to `false`] |
2368
+
2369
+ ### Return type
2370
+
2371
+ [**FileDeleteResponse**](FileDeleteResponse.md)
2372
+
2373
+ ### Authorization
2374
+
2375
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2376
+
2377
+ ### HTTP request headers
2378
+
2379
+ - **Content-Type**: Not defined
2380
+ - **Accept**: `application/json`
2381
+
2382
+
2383
+ ### HTTP response details
2384
+ | Status code | Description | Response headers |
2385
+ |-------------|-------------|------------------|
2386
+ | **200** | Deleted. | - |
2387
+ | **400** | Invalid request body or parameters. | - |
2388
+
2389
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2390
+
2391
+
2225
2392
  ## deleteNamedSnapshot
2226
2393
 
2227
2394
  > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
@@ -2302,7 +2469,7 @@ example().catch(console.error);
2302
2469
 
2303
2470
  Permanently delete sandbox data
2304
2471
 
2305
- Accept irreversible background deletion of the sandbox machine, snapshots, and content-bearing records. This is not archive: the sandbox cannot be resumed. Named snapshots and other shared artifacts remain independent. Poll the returned operation until `completed`.
2472
+ Accept irreversible background deletion of the sandbox machine, snapshots, and content-bearing records. This is not archive: the sandbox cannot be resumed. Saved snapshots and other shared artifacts remain independent. Poll the returned operation until `completed`.
2306
2473
 
2307
2474
  ### Example
2308
2475
 
@@ -2380,7 +2547,7 @@ example().catch(console.error);
2380
2547
 
2381
2548
  Permanently delete all snapshots of a sandbox
2382
2549
 
2383
- Accept irreversible deletion of every unpinned snapshot of this sandbox. The sandbox itself and its named snapshots stay. Snapshots disappear from lists, restores and forks immediately; their stored data is purged in the background. Set `X-Ascii-Confirm-Delete` to the sandbox id.
2550
+ Accept irreversible deletion of every unpinned snapshot of this sandbox. The sandbox itself and its saved snapshots stay. Snapshots disappear from lists, restores and forks immediately; their stored data is purged in the background. Set `X-Ascii-Confirm-Delete` to the sandbox id.
2384
2551
 
2385
2552
  ### Example
2386
2553
 
@@ -2452,6 +2619,80 @@ example().catch(console.error);
2452
2619
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2453
2620
 
2454
2621
 
2622
+ ## deleteSavedSnapshot
2623
+
2624
+ > SavedSnapshotDeletedResponse deleteSavedSnapshot(name)
2625
+
2626
+ Remove a saved snapshot
2627
+
2628
+ Remove a saved snapshot and release its storage (`boat snapshot rm <name>` in the CLI). Sandboxes already deployed from it are unaffected.
2629
+
2630
+ ### Example
2631
+
2632
+ ```ts
2633
+ import {
2634
+ Configuration,
2635
+ BoatApi,
2636
+ } from '@boatdev/sdk';
2637
+ import type { DeleteSavedSnapshotRequest } from '@boatdev/sdk';
2638
+
2639
+ async function example() {
2640
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2641
+ const config = new Configuration({
2642
+ // Configure HTTP bearer authorization: BoatBearerAuth
2643
+ accessToken: "YOUR BEARER TOKEN",
2644
+ });
2645
+ const api = new BoatApi(config);
2646
+
2647
+ const body = {
2648
+ // string
2649
+ name: name_example,
2650
+ } satisfies DeleteSavedSnapshotRequest;
2651
+
2652
+ try {
2653
+ const data = await api.deleteSavedSnapshot(body);
2654
+ console.log(data);
2655
+ } catch (error) {
2656
+ console.error(error);
2657
+ }
2658
+ }
2659
+
2660
+ // Run the test
2661
+ example().catch(console.error);
2662
+ ```
2663
+
2664
+ ### Parameters
2665
+
2666
+
2667
+ | Name | Type | Description | Notes |
2668
+ |------------- | ------------- | ------------- | -------------|
2669
+ | **name** | `string` | | [Defaults to `undefined`] |
2670
+
2671
+ ### Return type
2672
+
2673
+ [**SavedSnapshotDeletedResponse**](SavedSnapshotDeletedResponse.md)
2674
+
2675
+ ### Authorization
2676
+
2677
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2678
+
2679
+ ### HTTP request headers
2680
+
2681
+ - **Content-Type**: Not defined
2682
+ - **Accept**: `application/json`
2683
+
2684
+
2685
+ ### HTTP response details
2686
+ | Status code | Description | Response headers |
2687
+ |-------------|-------------|------------------|
2688
+ | **200** | Removed. | - |
2689
+ | **401** | Missing or invalid bearer token. | - |
2690
+ | **404** | Resource not found. | - |
2691
+ | **409** | `save_in_progress`: a save under this name is still running. Wait for it to settle before removing it. | - |
2692
+
2693
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2694
+
2695
+
2455
2696
  ## deleteSnapshot
2456
2697
 
2457
2698
  > DeletionOperationResponse deleteSnapshot(snapshotId, xAsciiConfirmDelete)
@@ -2913,13 +3154,13 @@ example().catch(console.error);
2913
3154
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2914
3155
 
2915
3156
 
2916
- ## fork
3157
+ ## findInFiles
2917
3158
 
2918
- > SandboxActionResponse fork(sandboxId, idempotencyKey, forkRequest)
3159
+ > FileFindResponse findInFiles(sandboxId, pattern, path, regex)
2919
3160
 
2920
- Fork sandbox
3161
+ Find text in sandbox files
2921
3162
 
2922
- Provision a new sandbox from an existing one. Send an `Idempotency-Key` header to make this call safe to retry after a lost response without creating a second billable fork.
3163
+ Every line under `path` that contains `pattern`. `pattern` is plain text; with `regex=true` it is an extended regular expression. Binary files are skipped and symlinks are not followed. Needs `file.read`.
2923
3164
 
2924
3165
  ### Example
2925
3166
 
@@ -2928,7 +3169,7 @@ import {
2928
3169
  Configuration,
2929
3170
  BoatApi,
2930
3171
  } from '@boatdev/sdk';
2931
- import type { ForkOperationRequest } from '@boatdev/sdk';
3172
+ import type { FindInFilesRequest } from '@boatdev/sdk';
2932
3173
 
2933
3174
  async function example() {
2934
3175
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -2941,14 +3182,16 @@ async function example() {
2941
3182
  const body = {
2942
3183
  // string | Public Sandbox id returned by create/list/get sandbox calls.
2943
3184
  sandboxId: sandboxId_example,
2944
- // string | Optional exactly-once key for creating a sandbox. Send your own opaque, account-unique value (a UUID) to make `POST /sandboxes` safe to retry when the response is lost (network timeout, 5xx): the first request creates the sandbox and binds it to the key; every later request with the **same account, key, and request body** returns that same sandbox instead of creating a second, billable one. Behavior: keys are retained for **24 hours**; a concurrent or early retry while the first sandbox is still being minted returns `409` `idempotency_in_progress` (retry shortly, same key); reusing a key with a **different body** returns `409` `idempotency_key_reused`; timeouts and 5xx are safe to retry with the same key; a create that fails before the sandbox exists releases the key within ~2 minutes so a retry can create the sandbox. Omit the header to keep the default (non-idempotent) behavior. (optional)
2945
- idempotencyKey: idempotencyKey_example,
2946
- // ForkRequest (optional)
2947
- forkRequest: ...,
2948
- } satisfies ForkOperationRequest;
3185
+ // string
3186
+ pattern: pattern_example,
3187
+ // string (optional)
3188
+ path: path_example,
3189
+ // boolean (optional)
3190
+ regex: true,
3191
+ } satisfies FindInFilesRequest;
2949
3192
 
2950
3193
  try {
2951
- const data = await api.fork(body);
3194
+ const data = await api.findInFiles(body);
2952
3195
  console.log(data);
2953
3196
  } catch (error) {
2954
3197
  console.error(error);
@@ -2965,12 +3208,13 @@ example().catch(console.error);
2965
3208
  | Name | Type | Description | Notes |
2966
3209
  |------------- | ------------- | ------------- | -------------|
2967
3210
  | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2968
- | **idempotencyKey** | `string` | Optional exactly-once key for creating a sandbox. Send your own opaque, account-unique value (a UUID) to make `POST /sandboxes` safe to retry when the response is lost (network timeout, 5xx): the first request creates the sandbox and binds it to the key; every later request with the **same account, key, and request body** returns that same sandbox instead of creating a second, billable one. Behavior: keys are retained for **24 hours**; a concurrent or early retry while the first sandbox is still being minted returns `409` `idempotency_in_progress` (retry shortly, same key); reusing a key with a **different body** returns `409` `idempotency_key_reused`; timeouts and 5xx are safe to retry with the same key; a create that fails before the sandbox exists releases the key within ~2 minutes so a retry can create the sandbox. Omit the header to keep the default (non-idempotent) behavior. | [Optional] [Defaults to `undefined`] |
2969
- | **forkRequest** | [ForkRequest](ForkRequest.md) | | [Optional] |
3211
+ | **pattern** | `string` | | [Defaults to `undefined`] |
3212
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
3213
+ | **regex** | `boolean` | | [Optional] [Defaults to `false`] |
2970
3214
 
2971
3215
  ### Return type
2972
3216
 
2973
- [**SandboxActionResponse**](SandboxActionResponse.md)
3217
+ [**FileFindResponse**](FileFindResponse.md)
2974
3218
 
2975
3219
  ### Authorization
2976
3220
 
@@ -2978,31 +3222,26 @@ example().catch(console.error);
2978
3222
 
2979
3223
  ### HTTP request headers
2980
3224
 
2981
- - **Content-Type**: `application/json`
3225
+ - **Content-Type**: Not defined
2982
3226
  - **Accept**: `application/json`
2983
3227
 
2984
3228
 
2985
3229
  ### HTTP response details
2986
3230
  | Status code | Description | Response headers |
2987
3231
  |-------------|-------------|------------------|
2988
- | **202** | Fork started. The response `id` is the new forked sandbox id. | - |
2989
- | **401** | Missing or invalid bearer token. | - |
2990
- | **402** | Account cannot currently create or operate sandboxes. The error body may include a dashboard billing URL, but billing actions are not part of the v1 API. | - |
2991
- | **404** | Resource not found. | - |
2992
- | **409** | Request conflicts with current account or sandbox state. | - |
2993
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
2994
- | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
3232
+ | **200** | Matching lines. | - |
3233
+ | **400** | Invalid request body or parameters. | - |
2995
3234
 
2996
3235
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2997
3236
 
2998
3237
 
2999
- ## get
3238
+ ## fork
3000
3239
 
3001
- > SandboxInfoResponse get(sandboxId)
3240
+ > SandboxActionResponse fork(sandboxId, idempotencyKey, forkRequest)
3002
3241
 
3003
- Get sandbox
3242
+ Fork sandbox
3004
3243
 
3005
- Poll this endpoint after create, stop, resume, or fork operations.
3244
+ Provision a new sandbox from an existing one. Send an `Idempotency-Key` header to make this call safe to retry after a lost response without creating a second billable fork.
3006
3245
 
3007
3246
  ### Example
3008
3247
 
@@ -3011,7 +3250,7 @@ import {
3011
3250
  Configuration,
3012
3251
  BoatApi,
3013
3252
  } from '@boatdev/sdk';
3014
- import type { GetRequest } from '@boatdev/sdk';
3253
+ import type { ForkOperationRequest } from '@boatdev/sdk';
3015
3254
 
3016
3255
  async function example() {
3017
3256
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3024,10 +3263,14 @@ async function example() {
3024
3263
  const body = {
3025
3264
  // string | Public Sandbox id returned by create/list/get sandbox calls.
3026
3265
  sandboxId: sandboxId_example,
3027
- } satisfies GetRequest;
3266
+ // string | Optional exactly-once key for creating a sandbox. Send your own opaque, account-unique value (a UUID) to make `POST /sandboxes` safe to retry when the response is lost (network timeout, 5xx): the first request creates the sandbox and binds it to the key; every later request with the **same account, key, and request body** returns that same sandbox instead of creating a second, billable one. Behavior: keys are retained for **24 hours**; a concurrent or early retry while the first sandbox is still being minted returns `409` `idempotency_in_progress` (retry shortly, same key); reusing a key with a **different body** returns `409` `idempotency_key_reused`; timeouts and 5xx are safe to retry with the same key; a create that fails before the sandbox exists releases the key within ~2 minutes so a retry can create the sandbox. Omit the header to keep the default (non-idempotent) behavior. (optional)
3267
+ idempotencyKey: idempotencyKey_example,
3268
+ // ForkRequest (optional)
3269
+ forkRequest: ...,
3270
+ } satisfies ForkOperationRequest;
3028
3271
 
3029
3272
  try {
3030
- const data = await api.get(body);
3273
+ const data = await api.fork(body);
3031
3274
  console.log(data);
3032
3275
  } catch (error) {
3033
3276
  console.error(error);
@@ -3044,10 +3287,12 @@ example().catch(console.error);
3044
3287
  | Name | Type | Description | Notes |
3045
3288
  |------------- | ------------- | ------------- | -------------|
3046
3289
  | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3290
+ | **idempotencyKey** | `string` | Optional exactly-once key for creating a sandbox. Send your own opaque, account-unique value (a UUID) to make `POST /sandboxes` safe to retry when the response is lost (network timeout, 5xx): the first request creates the sandbox and binds it to the key; every later request with the **same account, key, and request body** returns that same sandbox instead of creating a second, billable one. Behavior: keys are retained for **24 hours**; a concurrent or early retry while the first sandbox is still being minted returns `409` `idempotency_in_progress` (retry shortly, same key); reusing a key with a **different body** returns `409` `idempotency_key_reused`; timeouts and 5xx are safe to retry with the same key; a create that fails before the sandbox exists releases the key within ~2 minutes so a retry can create the sandbox. Omit the header to keep the default (non-idempotent) behavior. | [Optional] [Defaults to `undefined`] |
3291
+ | **forkRequest** | [ForkRequest](ForkRequest.md) | | [Optional] |
3047
3292
 
3048
3293
  ### Return type
3049
3294
 
3050
- [**SandboxInfoResponse**](SandboxInfoResponse.md)
3295
+ [**SandboxActionResponse**](SandboxActionResponse.md)
3051
3296
 
3052
3297
  ### Authorization
3053
3298
 
@@ -3055,27 +3300,105 @@ example().catch(console.error);
3055
3300
 
3056
3301
  ### HTTP request headers
3057
3302
 
3058
- - **Content-Type**: Not defined
3303
+ - **Content-Type**: `application/json`
3059
3304
  - **Accept**: `application/json`
3060
3305
 
3061
3306
 
3062
3307
  ### HTTP response details
3063
3308
  | Status code | Description | Response headers |
3064
3309
  |-------------|-------------|------------------|
3065
- | **200** | Boat details. | - |
3310
+ | **202** | Fork started. The response `id` is the new forked sandbox id. | - |
3066
3311
  | **401** | Missing or invalid bearer token. | - |
3312
+ | **402** | Account cannot currently create or operate sandboxes. The error body may include a dashboard billing URL, but billing actions are not part of the v1 API. | - |
3313
+ | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
3067
3314
  | **404** | Resource not found. | - |
3315
+ | **409** | Request conflicts with current account or sandbox state. | - |
3316
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
3317
+ | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
3068
3318
 
3069
3319
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3070
3320
 
3071
3321
 
3072
- ## getAiProxy
3322
+ ## get
3073
3323
 
3074
- > AiProxySettings getAiProxy(org, xBoatOrg)
3324
+ > SandboxInfoResponse get(sandboxId)
3075
3325
 
3076
- Get AI credentials proxy
3326
+ Get sandbox
3077
3327
 
3078
- Returns the AI credentials proxy switch of the account in scope, a person or an organization, with its price. Needs an API key with `account.admin`.
3328
+ Poll this endpoint after create, stop, resume, or fork operations.
3329
+
3330
+ ### Example
3331
+
3332
+ ```ts
3333
+ import {
3334
+ Configuration,
3335
+ BoatApi,
3336
+ } from '@boatdev/sdk';
3337
+ import type { GetRequest } from '@boatdev/sdk';
3338
+
3339
+ async function example() {
3340
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3341
+ const config = new Configuration({
3342
+ // Configure HTTP bearer authorization: BoatBearerAuth
3343
+ accessToken: "YOUR BEARER TOKEN",
3344
+ });
3345
+ const api = new BoatApi(config);
3346
+
3347
+ const body = {
3348
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3349
+ sandboxId: sandboxId_example,
3350
+ } satisfies GetRequest;
3351
+
3352
+ try {
3353
+ const data = await api.get(body);
3354
+ console.log(data);
3355
+ } catch (error) {
3356
+ console.error(error);
3357
+ }
3358
+ }
3359
+
3360
+ // Run the test
3361
+ example().catch(console.error);
3362
+ ```
3363
+
3364
+ ### Parameters
3365
+
3366
+
3367
+ | Name | Type | Description | Notes |
3368
+ |------------- | ------------- | ------------- | -------------|
3369
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3370
+
3371
+ ### Return type
3372
+
3373
+ [**SandboxInfoResponse**](SandboxInfoResponse.md)
3374
+
3375
+ ### Authorization
3376
+
3377
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3378
+
3379
+ ### HTTP request headers
3380
+
3381
+ - **Content-Type**: Not defined
3382
+ - **Accept**: `application/json`
3383
+
3384
+
3385
+ ### HTTP response details
3386
+ | Status code | Description | Response headers |
3387
+ |-------------|-------------|------------------|
3388
+ | **200** | Boat details. | - |
3389
+ | **401** | Missing or invalid bearer token. | - |
3390
+ | **404** | Resource not found. | - |
3391
+
3392
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3393
+
3394
+
3395
+ ## getAiProxy
3396
+
3397
+ > AiProxySettings getAiProxy(org, xBoatOrg)
3398
+
3399
+ Get AI credentials proxy
3400
+
3401
+ Returns the AI credentials proxy switch of the account in scope, a person or an organization, with its price. Needs an API key with `account.admin`.
3079
3402
 
3080
3403
  ### Example
3081
3404
 
@@ -3437,6 +3760,81 @@ example().catch(console.error);
3437
3760
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3438
3761
 
3439
3762
 
3763
+ ## getFileInfo
3764
+
3765
+ > FileInfoResponse getFileInfo(sandboxId, path)
3766
+
3767
+ Get file or directory details in a sandbox
3768
+
3769
+ Size, permission bits, type and modification time. Needs `file.read`.
3770
+
3771
+ ### Example
3772
+
3773
+ ```ts
3774
+ import {
3775
+ Configuration,
3776
+ BoatApi,
3777
+ } from '@boatdev/sdk';
3778
+ import type { GetFileInfoRequest } from '@boatdev/sdk';
3779
+
3780
+ async function example() {
3781
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3782
+ const config = new Configuration({
3783
+ // Configure HTTP bearer authorization: BoatBearerAuth
3784
+ accessToken: "YOUR BEARER TOKEN",
3785
+ });
3786
+ const api = new BoatApi(config);
3787
+
3788
+ const body = {
3789
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3790
+ sandboxId: sandboxId_example,
3791
+ // string
3792
+ path: path_example,
3793
+ } satisfies GetFileInfoRequest;
3794
+
3795
+ try {
3796
+ const data = await api.getFileInfo(body);
3797
+ console.log(data);
3798
+ } catch (error) {
3799
+ console.error(error);
3800
+ }
3801
+ }
3802
+
3803
+ // Run the test
3804
+ example().catch(console.error);
3805
+ ```
3806
+
3807
+ ### Parameters
3808
+
3809
+
3810
+ | Name | Type | Description | Notes |
3811
+ |------------- | ------------- | ------------- | -------------|
3812
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3813
+ | **path** | `string` | | [Defaults to `undefined`] |
3814
+
3815
+ ### Return type
3816
+
3817
+ [**FileInfoResponse**](FileInfoResponse.md)
3818
+
3819
+ ### Authorization
3820
+
3821
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3822
+
3823
+ ### HTTP request headers
3824
+
3825
+ - **Content-Type**: Not defined
3826
+ - **Accept**: `application/json`
3827
+
3828
+
3829
+ ### HTTP response details
3830
+ | Status code | Description | Response headers |
3831
+ |-------------|-------------|------------------|
3832
+ | **200** | File details. | - |
3833
+ | **400** | Invalid request body or parameters. | - |
3834
+
3835
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3836
+
3837
+
3440
3838
  ## getLatestSandboxSnapshot
3441
3839
 
3442
3840
  > SnapshotLatestResponse getLatestSandboxSnapshot(sandboxId)
@@ -3657,6 +4055,77 @@ example().catch(console.error);
3657
4055
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3658
4056
 
3659
4057
 
4058
+ ## getSavedSnapshot
4059
+
4060
+ > SavedSnapshotInfoResponse getSavedSnapshot(name)
4061
+
4062
+ Get a saved snapshot
4063
+
4064
+ ### Example
4065
+
4066
+ ```ts
4067
+ import {
4068
+ Configuration,
4069
+ BoatApi,
4070
+ } from '@boatdev/sdk';
4071
+ import type { GetSavedSnapshotRequest } from '@boatdev/sdk';
4072
+
4073
+ async function example() {
4074
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4075
+ const config = new Configuration({
4076
+ // Configure HTTP bearer authorization: BoatBearerAuth
4077
+ accessToken: "YOUR BEARER TOKEN",
4078
+ });
4079
+ const api = new BoatApi(config);
4080
+
4081
+ const body = {
4082
+ // string
4083
+ name: name_example,
4084
+ } satisfies GetSavedSnapshotRequest;
4085
+
4086
+ try {
4087
+ const data = await api.getSavedSnapshot(body);
4088
+ console.log(data);
4089
+ } catch (error) {
4090
+ console.error(error);
4091
+ }
4092
+ }
4093
+
4094
+ // Run the test
4095
+ example().catch(console.error);
4096
+ ```
4097
+
4098
+ ### Parameters
4099
+
4100
+
4101
+ | Name | Type | Description | Notes |
4102
+ |------------- | ------------- | ------------- | -------------|
4103
+ | **name** | `string` | | [Defaults to `undefined`] |
4104
+
4105
+ ### Return type
4106
+
4107
+ [**SavedSnapshotInfoResponse**](SavedSnapshotInfoResponse.md)
4108
+
4109
+ ### Authorization
4110
+
4111
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
4112
+
4113
+ ### HTTP request headers
4114
+
4115
+ - **Content-Type**: Not defined
4116
+ - **Accept**: `application/json`
4117
+
4118
+
4119
+ ### HTTP response details
4120
+ | Status code | Description | Response headers |
4121
+ |-------------|-------------|------------------|
4122
+ | **200** | The saved snapshot. | - |
4123
+ | **401** | Missing or invalid bearer token. | - |
4124
+ | **404** | Resource not found. | - |
4125
+
4126
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4127
+
4128
+
3660
4129
  ## getSnapshotDownload
3661
4130
 
3662
4131
  > SnapshotDownloadResponse getSnapshotDownload(snapshotId)
@@ -4255,7 +4724,7 @@ example().catch(console.error);
4255
4724
 
4256
4725
  Get Boat limits
4257
4726
 
4258
- Check remaining machine starts, compute time, credits, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
4727
+ Check remaining machine starts, included VM time, the wallet, overage prices, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
4259
4728
 
4260
4729
  ### Example
4261
4730
 
@@ -4377,7 +4846,7 @@ example().catch(console.error);
4377
4846
  | Name | Type | Description | Notes |
4378
4847
  |------------- | ------------- | ------------- | -------------|
4379
4848
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
4380
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
4849
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
4381
4850
 
4382
4851
  ### Return type
4383
4852
 
@@ -4469,6 +4938,81 @@ This endpoint does not need any parameter.
4469
4938
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4470
4939
 
4471
4940
 
4941
+ ## listFiles
4942
+
4943
+ > FileListResponse listFiles(sandboxId, path)
4944
+
4945
+ List a directory in a sandbox
4946
+
4947
+ One level, sorted by name. A symlink is listed as a symlink, not followed. Defaults to /home/user. Needs `file.read`.
4948
+
4949
+ ### Example
4950
+
4951
+ ```ts
4952
+ import {
4953
+ Configuration,
4954
+ BoatApi,
4955
+ } from '@boatdev/sdk';
4956
+ import type { ListFilesRequest } from '@boatdev/sdk';
4957
+
4958
+ async function example() {
4959
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4960
+ const config = new Configuration({
4961
+ // Configure HTTP bearer authorization: BoatBearerAuth
4962
+ accessToken: "YOUR BEARER TOKEN",
4963
+ });
4964
+ const api = new BoatApi(config);
4965
+
4966
+ const body = {
4967
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
4968
+ sandboxId: sandboxId_example,
4969
+ // string (optional)
4970
+ path: path_example,
4971
+ } satisfies ListFilesRequest;
4972
+
4973
+ try {
4974
+ const data = await api.listFiles(body);
4975
+ console.log(data);
4976
+ } catch (error) {
4977
+ console.error(error);
4978
+ }
4979
+ }
4980
+
4981
+ // Run the test
4982
+ example().catch(console.error);
4983
+ ```
4984
+
4985
+ ### Parameters
4986
+
4987
+
4988
+ | Name | Type | Description | Notes |
4989
+ |------------- | ------------- | ------------- | -------------|
4990
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4991
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
4992
+
4993
+ ### Return type
4994
+
4995
+ [**FileListResponse**](FileListResponse.md)
4996
+
4997
+ ### Authorization
4998
+
4999
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5000
+
5001
+ ### HTTP request headers
5002
+
5003
+ - **Content-Type**: Not defined
5004
+ - **Accept**: `application/json`
5005
+
5006
+
5007
+ ### HTTP response details
5008
+ | Status code | Description | Response headers |
5009
+ |-------------|-------------|------------------|
5010
+ | **200** | Directory entries. | - |
5011
+ | **400** | Invalid request body or parameters. | - |
5012
+
5013
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5014
+
5015
+
4472
5016
  ## listNamedSnapshots
4473
5017
 
4474
5018
  > NamedSnapshotListResponse listNamedSnapshots()
@@ -4680,13 +5224,77 @@ example().catch(console.error);
4680
5224
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4681
5225
 
4682
5226
 
5227
+ ## listSavedSnapshots
5228
+
5229
+ > SavedSnapshotListResponse listSavedSnapshots()
5230
+
5231
+ List saved snapshots
5232
+
5233
+ List your saved snapshots, newest first.
5234
+
5235
+ ### Example
5236
+
5237
+ ```ts
5238
+ import {
5239
+ Configuration,
5240
+ BoatApi,
5241
+ } from '@boatdev/sdk';
5242
+ import type { ListSavedSnapshotsRequest } from '@boatdev/sdk';
5243
+
5244
+ async function example() {
5245
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5246
+ const config = new Configuration({
5247
+ // Configure HTTP bearer authorization: BoatBearerAuth
5248
+ accessToken: "YOUR BEARER TOKEN",
5249
+ });
5250
+ const api = new BoatApi(config);
5251
+
5252
+ try {
5253
+ const data = await api.listSavedSnapshots();
5254
+ console.log(data);
5255
+ } catch (error) {
5256
+ console.error(error);
5257
+ }
5258
+ }
5259
+
5260
+ // Run the test
5261
+ example().catch(console.error);
5262
+ ```
5263
+
5264
+ ### Parameters
5265
+
5266
+ This endpoint does not need any parameter.
5267
+
5268
+ ### Return type
5269
+
5270
+ [**SavedSnapshotListResponse**](SavedSnapshotListResponse.md)
5271
+
5272
+ ### Authorization
5273
+
5274
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5275
+
5276
+ ### HTTP request headers
5277
+
5278
+ - **Content-Type**: Not defined
5279
+ - **Accept**: `application/json`
5280
+
5281
+
5282
+ ### HTTP response details
5283
+ | Status code | Description | Response headers |
5284
+ |-------------|-------------|------------------|
5285
+ | **200** | Saved snapshots owned by the authenticated Boat user. | - |
5286
+ | **401** | Missing or invalid bearer token. | - |
5287
+
5288
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5289
+
5290
+
4683
5291
  ## listSnapshotShares
4684
5292
 
4685
5293
  > NamedSnapshotShareListResponse listSnapshotShares(name)
4686
5294
 
4687
- List share codes of a named snapshot
5295
+ List share codes of a saved snapshot
4688
5296
 
4689
- List the share codes of a named snapshot, active and revoked (`boat snapshot shares <name>` in the CLI). The full codes are not returned. Needs `snapshot.read`.
5297
+ List the share codes of a saved snapshot, active and revoked (`boat snapshot shares <name>` in the CLI). The full codes are not returned. Needs `snapshot.read`.
4690
5298
 
4691
5299
  ### Example
4692
5300
 
@@ -4960,6 +5568,81 @@ This endpoint does not need any parameter.
4960
5568
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4961
5569
 
4962
5570
 
5571
+ ## moveFile
5572
+
5573
+ > FileMoveResponse moveFile(sandboxId, fileMoveRequest)
5574
+
5575
+ Move or rename a file or directory in a sandbox
5576
+
5577
+ Works across /home/user and /tmp. A symlink is moved itself, never its target. Needs `file.write`.
5578
+
5579
+ ### Example
5580
+
5581
+ ```ts
5582
+ import {
5583
+ Configuration,
5584
+ BoatApi,
5585
+ } from '@boatdev/sdk';
5586
+ import type { MoveFileRequest } from '@boatdev/sdk';
5587
+
5588
+ async function example() {
5589
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5590
+ const config = new Configuration({
5591
+ // Configure HTTP bearer authorization: BoatBearerAuth
5592
+ accessToken: "YOUR BEARER TOKEN",
5593
+ });
5594
+ const api = new BoatApi(config);
5595
+
5596
+ const body = {
5597
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
5598
+ sandboxId: sandboxId_example,
5599
+ // FileMoveRequest
5600
+ fileMoveRequest: ...,
5601
+ } satisfies MoveFileRequest;
5602
+
5603
+ try {
5604
+ const data = await api.moveFile(body);
5605
+ console.log(data);
5606
+ } catch (error) {
5607
+ console.error(error);
5608
+ }
5609
+ }
5610
+
5611
+ // Run the test
5612
+ example().catch(console.error);
5613
+ ```
5614
+
5615
+ ### Parameters
5616
+
5617
+
5618
+ | Name | Type | Description | Notes |
5619
+ |------------- | ------------- | ------------- | -------------|
5620
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
5621
+ | **fileMoveRequest** | [FileMoveRequest](FileMoveRequest.md) | | |
5622
+
5623
+ ### Return type
5624
+
5625
+ [**FileMoveResponse**](FileMoveResponse.md)
5626
+
5627
+ ### Authorization
5628
+
5629
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5630
+
5631
+ ### HTTP request headers
5632
+
5633
+ - **Content-Type**: `application/json`
5634
+ - **Accept**: `application/json`
5635
+
5636
+
5637
+ ### HTTP response details
5638
+ | Status code | Description | Response headers |
5639
+ |-------------|-------------|------------------|
5640
+ | **200** | Moved. | - |
5641
+ | **400** | Invalid request body or parameters. | - |
5642
+
5643
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5644
+
5645
+
4963
5646
  ## processes
4964
5647
 
4965
5648
  > ProcessListResponse processes(sandboxId)
@@ -5194,7 +5877,7 @@ example().catch(console.error);
5194
5877
 
5195
5878
  Read a file from a sandbox
5196
5879
 
5197
- Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`.
5880
+ Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command), so it reads the sandbox\'s own disk and never the machine\'s stock one.
5198
5881
 
5199
5882
  ### Example
5200
5883
 
@@ -5340,6 +6023,81 @@ example().catch(console.error);
5340
6023
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5341
6024
 
5342
6025
 
6026
+ ## replaceInFiles
6027
+
6028
+ > FileReplaceResponse replaceInFiles(sandboxId, fileReplaceRequest)
6029
+
6030
+ Replace text in sandbox files
6031
+
6032
+ Replaces every occurrence of `pattern` with `newValue` in each file. Needs `file.write`.
6033
+
6034
+ ### Example
6035
+
6036
+ ```ts
6037
+ import {
6038
+ Configuration,
6039
+ BoatApi,
6040
+ } from '@boatdev/sdk';
6041
+ import type { ReplaceInFilesRequest } from '@boatdev/sdk';
6042
+
6043
+ async function example() {
6044
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6045
+ const config = new Configuration({
6046
+ // Configure HTTP bearer authorization: BoatBearerAuth
6047
+ accessToken: "YOUR BEARER TOKEN",
6048
+ });
6049
+ const api = new BoatApi(config);
6050
+
6051
+ const body = {
6052
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6053
+ sandboxId: sandboxId_example,
6054
+ // FileReplaceRequest
6055
+ fileReplaceRequest: ...,
6056
+ } satisfies ReplaceInFilesRequest;
6057
+
6058
+ try {
6059
+ const data = await api.replaceInFiles(body);
6060
+ console.log(data);
6061
+ } catch (error) {
6062
+ console.error(error);
6063
+ }
6064
+ }
6065
+
6066
+ // Run the test
6067
+ example().catch(console.error);
6068
+ ```
6069
+
6070
+ ### Parameters
6071
+
6072
+
6073
+ | Name | Type | Description | Notes |
6074
+ |------------- | ------------- | ------------- | -------------|
6075
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6076
+ | **fileReplaceRequest** | [FileReplaceRequest](FileReplaceRequest.md) | | |
6077
+
6078
+ ### Return type
6079
+
6080
+ [**FileReplaceResponse**](FileReplaceResponse.md)
6081
+
6082
+ ### Authorization
6083
+
6084
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6085
+
6086
+ ### HTTP request headers
6087
+
6088
+ - **Content-Type**: `application/json`
6089
+ - **Accept**: `application/json`
6090
+
6091
+
6092
+ ### HTTP response details
6093
+ | Status code | Description | Response headers |
6094
+ |-------------|-------------|------------------|
6095
+ | **200** | Per-file results. | - |
6096
+ | **400** | Invalid request body or parameters. | - |
6097
+
6098
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6099
+
6100
+
5343
6101
  ## repos
5344
6102
 
5345
6103
  > ReposResponse repos(sync, limit, cursor, sort, q, selected)
@@ -5498,9 +6256,10 @@ example().catch(console.error);
5498
6256
  | **202** | Resume started. | - |
5499
6257
  | **401** | Missing or invalid bearer token. | - |
5500
6258
  | **402** | Account cannot currently create or operate sandboxes. The error body may include a dashboard billing URL, but billing actions are not part of the v1 API. | - |
6259
+ | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
5501
6260
  | **404** | Resource not found. | - |
5502
6261
  | **409** | Request conflicts with current account or sandbox state. | - |
5503
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
6262
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
5504
6263
  | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
5505
6264
 
5506
6265
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -5512,7 +6271,7 @@ example().catch(console.error);
5512
6271
 
5513
6272
  Revoke an API key
5514
6273
 
5515
- Revokes the key immediately. Requires a dashboard or CLI session.
6274
+ Revokes the key immediately. Requires a dashboard or CLI session, or an admin-scoped key. A key revokes itself or a key it could create (same or fewer actions, sandboxes and environments, no later expiry).
5516
6275
 
5517
6276
  ### Example
5518
6277
 
@@ -5662,7 +6421,7 @@ example().catch(console.error);
5662
6421
 
5663
6422
  Rotate an API key
5664
6423
 
5665
- Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session.
6424
+ Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session, or an admin-scoped key. A key rotates itself or a key it could create.
5666
6425
 
5667
6426
  ### Example
5668
6427
 
@@ -5964,12 +6723,166 @@ example().catch(console.error);
5964
6723
  | **400** | Invalid request body or parameters. | - |
5965
6724
  | **401** | Missing or invalid bearer token. | - |
5966
6725
  | **404** | Resource not found. | - |
5967
- | **402** | `credit_required`: the wallet already keeps 10 or more named snapshots and has no credit left. Each named snapshot above the free 10 costs $1.70 a month, charged daily. Add credit or remove one. | - |
6726
+ | **402** | `credit_required`: the wallet already keeps its included named snapshots and is empty. Each named snapshot above the included count costs $0.056 a day from the wallet. Add money to the wallet or remove one. | - |
6727
+ | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
6728
+
6729
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6730
+
6731
+
6732
+ ## saveSavedSnapshot
6733
+
6734
+ > SavedSnapshotSavingResponse saveSavedSnapshot(savedSnapshotSaveRequest)
6735
+
6736
+ Save a saved snapshot
6737
+
6738
+ Freeze a sandbox\'s current state under a name (`boat snapshot <id> <name>` in the CLI). Answers `202` immediately with the snapshot in `saving`; a running sandbox takes a fresh capture first, which can run minutes. Poll `GET /saved-snapshots/{name}` until the status settles at `ready` or `failed`. Reusing one of your existing names replaces that snapshot\'s artifact once the new save is ready.
6739
+
6740
+ ### Example
6741
+
6742
+ ```ts
6743
+ import {
6744
+ Configuration,
6745
+ BoatApi,
6746
+ } from '@boatdev/sdk';
6747
+ import type { SaveSavedSnapshotRequest } from '@boatdev/sdk';
6748
+
6749
+ async function example() {
6750
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6751
+ const config = new Configuration({
6752
+ // Configure HTTP bearer authorization: BoatBearerAuth
6753
+ accessToken: "YOUR BEARER TOKEN",
6754
+ });
6755
+ const api = new BoatApi(config);
6756
+
6757
+ const body = {
6758
+ // SavedSnapshotSaveRequest
6759
+ savedSnapshotSaveRequest: ...,
6760
+ } satisfies SaveSavedSnapshotRequest;
6761
+
6762
+ try {
6763
+ const data = await api.saveSavedSnapshot(body);
6764
+ console.log(data);
6765
+ } catch (error) {
6766
+ console.error(error);
6767
+ }
6768
+ }
6769
+
6770
+ // Run the test
6771
+ example().catch(console.error);
6772
+ ```
6773
+
6774
+ ### Parameters
6775
+
6776
+
6777
+ | Name | Type | Description | Notes |
6778
+ |------------- | ------------- | ------------- | -------------|
6779
+ | **savedSnapshotSaveRequest** | [SavedSnapshotSaveRequest](SavedSnapshotSaveRequest.md) | | |
6780
+
6781
+ ### Return type
6782
+
6783
+ [**SavedSnapshotSavingResponse**](SavedSnapshotSavingResponse.md)
6784
+
6785
+ ### Authorization
6786
+
6787
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6788
+
6789
+ ### HTTP request headers
6790
+
6791
+ - **Content-Type**: `application/json`
6792
+ - **Accept**: `application/json`
6793
+
6794
+
6795
+ ### HTTP response details
6796
+ | Status code | Description | Response headers |
6797
+ |-------------|-------------|------------------|
6798
+ | **202** | Save accepted and running in the background. | - |
6799
+ | **400** | Invalid request body or parameters. | - |
6800
+ | **401** | Missing or invalid bearer token. | - |
6801
+ | **404** | Resource not found. | - |
6802
+ | **402** | `credit_required`: the wallet already keeps its included saved snapshots and is empty. Each saved snapshot above the plan\'s included count costs $0.056 a day from the wallet. Add money to the wallet or remove one. | - |
5968
6803
  | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
5969
6804
 
5970
6805
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5971
6806
 
5972
6807
 
6808
+ ## searchFiles
6809
+
6810
+ > FileSearchResponse searchFiles(sandboxId, pattern, path)
6811
+
6812
+ Search files by name in a sandbox
6813
+
6814
+ Every file and directory under `path` whose name matches the glob `pattern` (for example `*.py`). Symlinks are not followed. Needs `file.read`.
6815
+
6816
+ ### Example
6817
+
6818
+ ```ts
6819
+ import {
6820
+ Configuration,
6821
+ BoatApi,
6822
+ } from '@boatdev/sdk';
6823
+ import type { SearchFilesRequest } from '@boatdev/sdk';
6824
+
6825
+ async function example() {
6826
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6827
+ const config = new Configuration({
6828
+ // Configure HTTP bearer authorization: BoatBearerAuth
6829
+ accessToken: "YOUR BEARER TOKEN",
6830
+ });
6831
+ const api = new BoatApi(config);
6832
+
6833
+ const body = {
6834
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6835
+ sandboxId: sandboxId_example,
6836
+ // string
6837
+ pattern: pattern_example,
6838
+ // string (optional)
6839
+ path: path_example,
6840
+ } satisfies SearchFilesRequest;
6841
+
6842
+ try {
6843
+ const data = await api.searchFiles(body);
6844
+ console.log(data);
6845
+ } catch (error) {
6846
+ console.error(error);
6847
+ }
6848
+ }
6849
+
6850
+ // Run the test
6851
+ example().catch(console.error);
6852
+ ```
6853
+
6854
+ ### Parameters
6855
+
6856
+
6857
+ | Name | Type | Description | Notes |
6858
+ |------------- | ------------- | ------------- | -------------|
6859
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6860
+ | **pattern** | `string` | | [Defaults to `undefined`] |
6861
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
6862
+
6863
+ ### Return type
6864
+
6865
+ [**FileSearchResponse**](FileSearchResponse.md)
6866
+
6867
+ ### Authorization
6868
+
6869
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6870
+
6871
+ ### HTTP request headers
6872
+
6873
+ - **Content-Type**: Not defined
6874
+ - **Accept**: `application/json`
6875
+
6876
+
6877
+ ### HTTP response details
6878
+ | Status code | Description | Response headers |
6879
+ |-------------|-------------|------------------|
6880
+ | **200** | Matching paths. | - |
6881
+ | **400** | Invalid request body or parameters. | - |
6882
+
6883
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6884
+
6885
+
5973
6886
  ## secrets
5974
6887
 
5975
6888
  > SecretsResponse secrets()
@@ -6316,7 +7229,7 @@ example().catch(console.error);
6316
7229
  | Name | Type | Description | Notes |
6317
7230
  |------------- | ------------- | ------------- | -------------|
6318
7231
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
6319
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
7232
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
6320
7233
  | **setCredentialKeyRequest** | [SetCredentialKeyRequest](SetCredentialKeyRequest.md) | | |
6321
7234
 
6322
7235
  ### Return type
@@ -6508,6 +7421,81 @@ example().catch(console.error);
6508
7421
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6509
7422
 
6510
7423
 
7424
+ ## setFilePermissions
7425
+
7426
+ > FileInfoResponse setFilePermissions(sandboxId, filePermissionsRequest)
7427
+
7428
+ Set file permissions in a sandbox
7429
+
7430
+ Sets the permission bits. Files belong to the sandbox user; the owner and group do not change. Needs `file.write`.
7431
+
7432
+ ### Example
7433
+
7434
+ ```ts
7435
+ import {
7436
+ Configuration,
7437
+ BoatApi,
7438
+ } from '@boatdev/sdk';
7439
+ import type { SetFilePermissionsRequest } from '@boatdev/sdk';
7440
+
7441
+ async function example() {
7442
+ console.log("🚀 Testing @boatdev/sdk SDK...");
7443
+ const config = new Configuration({
7444
+ // Configure HTTP bearer authorization: BoatBearerAuth
7445
+ accessToken: "YOUR BEARER TOKEN",
7446
+ });
7447
+ const api = new BoatApi(config);
7448
+
7449
+ const body = {
7450
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
7451
+ sandboxId: sandboxId_example,
7452
+ // FilePermissionsRequest
7453
+ filePermissionsRequest: ...,
7454
+ } satisfies SetFilePermissionsRequest;
7455
+
7456
+ try {
7457
+ const data = await api.setFilePermissions(body);
7458
+ console.log(data);
7459
+ } catch (error) {
7460
+ console.error(error);
7461
+ }
7462
+ }
7463
+
7464
+ // Run the test
7465
+ example().catch(console.error);
7466
+ ```
7467
+
7468
+ ### Parameters
7469
+
7470
+
7471
+ | Name | Type | Description | Notes |
7472
+ |------------- | ------------- | ------------- | -------------|
7473
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
7474
+ | **filePermissionsRequest** | [FilePermissionsRequest](FilePermissionsRequest.md) | | |
7475
+
7476
+ ### Return type
7477
+
7478
+ [**FileInfoResponse**](FileInfoResponse.md)
7479
+
7480
+ ### Authorization
7481
+
7482
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7483
+
7484
+ ### HTTP request headers
7485
+
7486
+ - **Content-Type**: `application/json`
7487
+ - **Accept**: `application/json`
7488
+
7489
+
7490
+ ### HTTP response details
7491
+ | Status code | Description | Response headers |
7492
+ |-------------|-------------|------------------|
7493
+ | **200** | Permissions set. | - |
7494
+ | **400** | Invalid request body or parameters. | - |
7495
+
7496
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7497
+
7498
+
6511
7499
  ## setSandboxAiAccess
6512
7500
 
6513
7501
  > SandboxAiAccessResponse setSandboxAiAccess(sandboxId, setSandboxAiAccessRequest)
@@ -7101,7 +8089,7 @@ example().catch(console.error);
7101
8089
  | Name | Type | Description | Notes |
7102
8090
  |------------- | ------------- | ------------- | -------------|
7103
8091
  | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
7104
- | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, claude-bedrock, codex-bedrock] |
8092
+ | **credential** | `CredentialId` | | [Defaults to `undefined`] [Enum: anthropic-api-key, openai-api-key, openrouter-api-key, llmgateway-api-key, deepseek-api-key, moonshot-api-key, mistral-api-key, xai-api-key, opencode-api-key, claude-subscription, chatgpt-subscription, kimi-subscription, mistral-vibe-subscription, grok-subscription, claude-bedrock, codex-bedrock] |
7105
8093
  | **account** | `string` | The account id from the list. | [Defaults to `undefined`] |
7106
8094
 
7107
8095
  ### Return type
@@ -7286,7 +8274,7 @@ example().catch(console.error);
7286
8274
 
7287
8275
  Turn the AI credentials proxy on or off
7288
8276
 
7289
- With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the account pays $1 of Boat time for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
8277
+ With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the wallet of the account pays $1 for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
7290
8278
 
7291
8279
  ### Example
7292
8280
 
@@ -7984,7 +8972,7 @@ example().catch(console.error);
7984
8972
 
7985
8973
  Write a file in a sandbox
7986
8974
 
7987
- Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`.
8975
+ Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command): a sandbox\'s files are in place only once it is ready, so a write any earlier would not stay. A `200` always means the file is on the sandbox\'s disk.
7988
8976
 
7989
8977
  ### Example
7990
8978