@boatdev/sdk 1.9.5 → 1.9.7

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 (160) hide show
  1. package/.openapi-generator/FILES +44 -0
  2. package/dist/apis/BoatApi.d.ts +339 -3
  3. package/dist/apis/BoatApi.js +865 -15
  4. package/dist/esm/apis/BoatApi.d.ts +339 -3
  5. package/dist/esm/apis/BoatApi.js +865 -15
  6. package/dist/esm/models/AccountAiUsageResponse.d.ts +83 -0
  7. package/dist/esm/models/AccountAiUsageResponse.js +78 -0
  8. package/dist/esm/models/AiProxySettings.d.ts +81 -0
  9. package/dist/esm/models/AiProxySettings.js +76 -0
  10. package/dist/esm/models/AiProxySettingsAllOfPricing.d.ts +38 -0
  11. package/dist/esm/models/AiProxySettingsAllOfPricing.js +47 -0
  12. package/dist/esm/models/AiUsageRow.d.ts +80 -0
  13. package/dist/esm/models/AiUsageRow.js +75 -0
  14. package/dist/esm/models/AiUsageTotals.d.ts +62 -0
  15. package/dist/esm/models/AiUsageTotals.js +63 -0
  16. package/dist/esm/models/CreateCredentialProfileRequest.d.ts +44 -0
  17. package/dist/esm/models/CreateCredentialProfileRequest.js +47 -0
  18. package/dist/esm/models/CredentialAccount.d.ts +50 -0
  19. package/dist/esm/models/CredentialAccount.js +53 -0
  20. package/dist/esm/models/CredentialAccountsResponse.d.ts +64 -0
  21. package/dist/esm/models/CredentialAccountsResponse.js +65 -0
  22. package/dist/esm/models/CredentialId.d.ts +36 -0
  23. package/dist/esm/models/CredentialId.js +54 -0
  24. package/dist/esm/models/CredentialProfile.d.ts +91 -0
  25. package/dist/esm/models/CredentialProfile.js +79 -0
  26. package/dist/esm/models/CredentialProfileDeletedResponse.d.ts +44 -0
  27. package/dist/esm/models/CredentialProfileDeletedResponse.js +51 -0
  28. package/dist/esm/models/CredentialProfileListResponse.d.ts +45 -0
  29. package/dist/esm/models/CredentialProfileListResponse.js +52 -0
  30. package/dist/esm/models/CredentialProfileOwner.d.ts +58 -0
  31. package/dist/esm/models/CredentialProfileOwner.js +62 -0
  32. package/dist/esm/models/CredentialProfileResponse.d.ts +51 -0
  33. package/dist/esm/models/CredentialProfileResponse.js +56 -0
  34. package/dist/esm/models/ProcessListResponse.d.ts +1 -1
  35. package/dist/esm/models/SandboxAiAccessResponse.d.ts +56 -0
  36. package/dist/esm/models/SandboxAiAccessResponse.js +59 -0
  37. package/dist/esm/models/SandboxAiUsage.d.ts +64 -0
  38. package/dist/esm/models/SandboxAiUsage.js +65 -0
  39. package/dist/esm/models/SandboxAiUsageResponse.d.ts +88 -0
  40. package/dist/esm/models/SandboxAiUsageResponse.js +81 -0
  41. package/dist/esm/models/SandboxEnvironment.d.ts +13 -1
  42. package/dist/esm/models/SandboxEnvironment.js +4 -0
  43. package/dist/esm/models/SetCredentialKeyRequest.d.ts +38 -0
  44. package/dist/esm/models/SetCredentialKeyRequest.js +45 -0
  45. package/dist/esm/models/SetCustomApiRequest.d.ts +38 -0
  46. package/dist/esm/models/SetCustomApiRequest.js +47 -0
  47. package/dist/esm/models/SetSandboxAiAccessRequest.d.ts +32 -0
  48. package/dist/esm/models/SetSandboxAiAccessRequest.js +43 -0
  49. package/dist/esm/models/UpdateAiProxyRequest.d.ts +32 -0
  50. package/dist/esm/models/UpdateAiProxyRequest.js +43 -0
  51. package/dist/esm/models/UpdateCredentialProfileRequest.d.ts +38 -0
  52. package/dist/esm/models/UpdateCredentialProfileRequest.js +43 -0
  53. package/dist/esm/models/UpdateSandboxEnvironmentRequest.d.ts +12 -0
  54. package/dist/esm/models/UpdateSandboxEnvironmentRequest.js +4 -0
  55. package/dist/esm/models/index.d.ts +22 -0
  56. package/dist/esm/models/index.js +22 -0
  57. package/dist/models/AccountAiUsageResponse.d.ts +83 -0
  58. package/dist/models/AccountAiUsageResponse.js +85 -0
  59. package/dist/models/AiProxySettings.d.ts +81 -0
  60. package/dist/models/AiProxySettings.js +83 -0
  61. package/dist/models/AiProxySettingsAllOfPricing.d.ts +38 -0
  62. package/dist/models/AiProxySettingsAllOfPricing.js +54 -0
  63. package/dist/models/AiUsageRow.d.ts +80 -0
  64. package/dist/models/AiUsageRow.js +82 -0
  65. package/dist/models/AiUsageTotals.d.ts +62 -0
  66. package/dist/models/AiUsageTotals.js +70 -0
  67. package/dist/models/CreateCredentialProfileRequest.d.ts +44 -0
  68. package/dist/models/CreateCredentialProfileRequest.js +54 -0
  69. package/dist/models/CredentialAccount.d.ts +50 -0
  70. package/dist/models/CredentialAccount.js +60 -0
  71. package/dist/models/CredentialAccountsResponse.d.ts +64 -0
  72. package/dist/models/CredentialAccountsResponse.js +72 -0
  73. package/dist/models/CredentialId.d.ts +36 -0
  74. package/dist/models/CredentialId.js +62 -0
  75. package/dist/models/CredentialProfile.d.ts +91 -0
  76. package/dist/models/CredentialProfile.js +86 -0
  77. package/dist/models/CredentialProfileDeletedResponse.d.ts +44 -0
  78. package/dist/models/CredentialProfileDeletedResponse.js +58 -0
  79. package/dist/models/CredentialProfileListResponse.d.ts +45 -0
  80. package/dist/models/CredentialProfileListResponse.js +59 -0
  81. package/dist/models/CredentialProfileOwner.d.ts +58 -0
  82. package/dist/models/CredentialProfileOwner.js +70 -0
  83. package/dist/models/CredentialProfileResponse.d.ts +51 -0
  84. package/dist/models/CredentialProfileResponse.js +63 -0
  85. package/dist/models/ProcessListResponse.d.ts +1 -1
  86. package/dist/models/SandboxAiAccessResponse.d.ts +56 -0
  87. package/dist/models/SandboxAiAccessResponse.js +66 -0
  88. package/dist/models/SandboxAiUsage.d.ts +64 -0
  89. package/dist/models/SandboxAiUsage.js +72 -0
  90. package/dist/models/SandboxAiUsageResponse.d.ts +88 -0
  91. package/dist/models/SandboxAiUsageResponse.js +88 -0
  92. package/dist/models/SandboxEnvironment.d.ts +13 -1
  93. package/dist/models/SandboxEnvironment.js +4 -0
  94. package/dist/models/SetCredentialKeyRequest.d.ts +38 -0
  95. package/dist/models/SetCredentialKeyRequest.js +52 -0
  96. package/dist/models/SetCustomApiRequest.d.ts +38 -0
  97. package/dist/models/SetCustomApiRequest.js +54 -0
  98. package/dist/models/SetSandboxAiAccessRequest.d.ts +32 -0
  99. package/dist/models/SetSandboxAiAccessRequest.js +50 -0
  100. package/dist/models/UpdateAiProxyRequest.d.ts +32 -0
  101. package/dist/models/UpdateAiProxyRequest.js +50 -0
  102. package/dist/models/UpdateCredentialProfileRequest.d.ts +38 -0
  103. package/dist/models/UpdateCredentialProfileRequest.js +50 -0
  104. package/dist/models/UpdateSandboxEnvironmentRequest.d.ts +12 -0
  105. package/dist/models/UpdateSandboxEnvironmentRequest.js +4 -0
  106. package/dist/models/index.d.ts +22 -0
  107. package/dist/models/index.js +22 -0
  108. package/docs/AccountAiUsageResponse.md +48 -0
  109. package/docs/AiProxySettings.md +48 -0
  110. package/docs/AiProxySettingsAllOfPricing.md +34 -0
  111. package/docs/AiUsageRow.md +48 -0
  112. package/docs/AiUsageTotals.md +43 -0
  113. package/docs/BoatApi.md +1588 -212
  114. package/docs/CreateCredentialProfileRequest.md +36 -0
  115. package/docs/CredentialAccount.md +39 -0
  116. package/docs/CredentialAccountsResponse.md +42 -0
  117. package/docs/CredentialId.md +31 -0
  118. package/docs/CredentialProfile.md +51 -0
  119. package/docs/CredentialProfileDeletedResponse.md +36 -0
  120. package/docs/CredentialProfileListResponse.md +36 -0
  121. package/docs/CredentialProfileOwner.md +38 -0
  122. package/docs/CredentialProfileResponse.md +38 -0
  123. package/docs/SandboxAiAccessResponse.md +40 -0
  124. package/docs/SandboxAiUsage.md +42 -0
  125. package/docs/SandboxAiUsageResponse.md +50 -0
  126. package/docs/SandboxEnvironment.md +4 -0
  127. package/docs/SetCredentialKeyRequest.md +34 -0
  128. package/docs/SetCustomApiRequest.md +34 -0
  129. package/docs/SetSandboxAiAccessRequest.md +32 -0
  130. package/docs/UpdateAiProxyRequest.md +32 -0
  131. package/docs/UpdateCredentialProfileRequest.md +34 -0
  132. package/docs/UpdateSandboxEnvironmentRequest.md +4 -0
  133. package/package.json +1 -1
  134. package/src/apis/BoatApi.ts +1440 -133
  135. package/src/models/AccountAiUsageResponse.ts +160 -0
  136. package/src/models/AiProxySettings.ts +146 -0
  137. package/src/models/AiProxySettingsAllOfPricing.ts +75 -0
  138. package/src/models/AiUsageRow.ts +138 -0
  139. package/src/models/AiUsageTotals.ts +111 -0
  140. package/src/models/CreateCredentialProfileRequest.ts +82 -0
  141. package/src/models/CredentialAccount.ts +92 -0
  142. package/src/models/CredentialAccountsResponse.ts +128 -0
  143. package/src/models/CredentialId.ts +64 -0
  144. package/src/models/CredentialProfile.ts +168 -0
  145. package/src/models/CredentialProfileDeletedResponse.ts +84 -0
  146. package/src/models/CredentialProfileListResponse.ts +92 -0
  147. package/src/models/CredentialProfileOwner.ts +104 -0
  148. package/src/models/CredentialProfileResponse.ts +101 -0
  149. package/src/models/ProcessListResponse.ts +1 -1
  150. package/src/models/SandboxAiAccessResponse.ts +102 -0
  151. package/src/models/SandboxAiUsage.ts +126 -0
  152. package/src/models/SandboxAiUsageResponse.ts +162 -0
  153. package/src/models/SandboxEnvironment.ts +17 -1
  154. package/src/models/SetCredentialKeyRequest.ts +74 -0
  155. package/src/models/SetCustomApiRequest.ts +75 -0
  156. package/src/models/SetSandboxAiAccessRequest.ts +66 -0
  157. package/src/models/UpdateAiProxyRequest.ts +66 -0
  158. package/src/models/UpdateCredentialProfileRequest.ts +73 -0
  159. package/src/models/UpdateSandboxEnvironmentRequest.ts +16 -0
  160. package/src/models/index.ts +22 -0
package/docs/BoatApi.md CHANGED
@@ -4,6 +4,7 @@ All URIs are relative to *https://boat.dev/api/v1*
4
4
 
5
5
  | Method | HTTP request | Description |
6
6
  |------------- | ------------- | -------------|
7
+ | [**addCredentialAccount**](BoatApi.md#addcredentialaccount) | **POST** /credential-profiles/{profile}/accounts/{credential} | Add another API key to a credential |
7
8
  | [**addEnvironmentRepo**](BoatApi.md#addenvironmentrepooperation) | **POST** /environments/{environmentId}/repos | Add a repository to an environment |
8
9
  | [**apiKeyUsage**](BoatApi.md#apikeyusage) | **GET** /api-keys/{apiKeyId}/usage | Get API key usage |
9
10
  | [**apiKeys**](BoatApi.md#apikeys) | **GET** /api-keys | List API keys |
@@ -15,12 +16,17 @@ All URIs are relative to *https://boat.dev/api/v1*
15
16
  | [**commandStatus**](BoatApi.md#commandstatus) | **GET** /sandboxes/{sandboxId}/commands/{processId} | Get detached command status and logs |
16
17
  | [**conversations**](BoatApi.md#conversations) | **GET** /sandboxes/{sandboxId}/conversations | List boat conversations |
17
18
  | [**create**](BoatApi.md#create) | **POST** /sandboxes | Create sandbox |
19
+ | [**createCredentialProfile**](BoatApi.md#createcredentialprofileoperation) | **POST** /credential-profiles | Create a credential profile |
18
20
  | [**createDownloadUrl**](BoatApi.md#createdownloadurl) | **POST** /sandboxes/{sandboxId}/files/download-url | Get a download URL for a sandbox file |
19
21
  | [**createEnvironment**](BoatApi.md#createenvironment) | **POST** /environments | Create a sandbox environment |
20
22
  | [**createScopedApiKey**](BoatApi.md#createscopedapikeyoperation) | **POST** /api-keys/scoped | Create a scoped API key |
21
23
  | [**createSnapshotShare**](BoatApi.md#createsnapshotshare) | **POST** /named-snapshots/{name}/shares | Share a named snapshot |
22
24
  | [**createUploadUrl**](BoatApi.md#createuploadurl) | **POST** /sandboxes/{sandboxId}/files/upload-url | Get an upload URL for a sandbox file |
23
25
  | [**createWebhook**](BoatApi.md#createwebhook) | **POST** /webhooks | Create webhook |
26
+ | [**deleteCredentialAccount**](BoatApi.md#deletecredentialaccount) | **DELETE** /credential-profiles/{profile}/accounts/{credential}/{account} | Forget an account of a credential |
27
+ | [**deleteCredentialProfile**](BoatApi.md#deletecredentialprofile) | **DELETE** /credential-profiles/{profile} | Delete a credential profile |
28
+ | [**deleteCredentialProfileCustomApi**](BoatApi.md#deletecredentialprofilecustomapi) | **DELETE** /credential-profiles/{profile}/custom-apis/{name} | Remove a custom API |
29
+ | [**deleteCredentialProfileKey**](BoatApi.md#deletecredentialprofilekey) | **DELETE** /credential-profiles/{profile}/keys/{credential} | Remove a credential profile credential |
24
30
  | [**deleteEnvironment**](BoatApi.md#deleteenvironment) | **DELETE** /environments/{environmentId} | Delete a sandbox environment |
25
31
  | [**deleteEnvironmentRepo**](BoatApi.md#deleteenvironmentrepo) | **DELETE** /environments/{environmentId}/repos/{repositoryId} | Remove a repository from an environment |
26
32
  | [**deleteEnvironmentSecretFile**](BoatApi.md#deleteenvironmentsecretfile) | **DELETE** /environments/{environmentId}/secret-files | Remove one secret file |
@@ -36,11 +42,14 @@ All URIs are relative to *https://boat.dev/api/v1*
36
42
  | [**events**](BoatApi.md#events) | **GET** /sandboxes/{sandboxId}/events | List boat events |
37
43
  | [**fork**](BoatApi.md#forkoperation) | **POST** /sandboxes/{sandboxId}/fork | Fork sandbox |
38
44
  | [**get**](BoatApi.md#get) | **GET** /sandboxes/{sandboxId} | Get sandbox |
45
+ | [**getAiProxy**](BoatApi.md#getaiproxy) | **GET** /ai-proxy | Get AI credentials proxy |
46
+ | [**getAiUsage**](BoatApi.md#getaiusage) | **GET** /ai-usage | Get AI usage |
39
47
  | [**getCommand**](BoatApi.md#getcommand) | **GET** /sandboxes/{sandboxId}/command-history/{commandId} | Get one command from the history |
40
48
  | [**getDataRetention**](BoatApi.md#getdataretention) | **GET** /account/data-retention | Get account data-retention policy |
41
49
  | [**getDeletionOperation**](BoatApi.md#getdeletionoperation) | **GET** /deletion-operations/{operationId} | Get deletion operation |
42
50
  | [**getLatestSandboxSnapshot**](BoatApi.md#getlatestsandboxsnapshot) | **GET** /sandboxes/{sandboxId}/snapshots/latest | Get latest boat snapshot |
43
51
  | [**getNamedSnapshot**](BoatApi.md#getnamedsnapshot) | **GET** /named-snapshots/{name} | Get a named snapshot |
52
+ | [**getSandboxAiUsage**](BoatApi.md#getsandboxaiusage) | **GET** /sandboxes/{sandboxId}/ai-usage | Get sandbox AI usage |
44
53
  | [**getSnapshotDownload**](BoatApi.md#getsnapshotdownload) | **GET** /snapshots/{snapshotId}/download | Get snapshot download |
45
54
  | [**getSnapshotFile**](BoatApi.md#getsnapshotfile) | **GET** /snapshots/{snapshotId}/files | Download a file or folder from a snapshot |
46
55
  | [**getSnapshotTree**](BoatApi.md#getsnapshottree) | **GET** /snapshots/{snapshotId}/tree | Get snapshot file tree |
@@ -50,6 +59,8 @@ All URIs are relative to *https://boat.dev/api/v1*
50
59
  | [**hostPort**](BoatApi.md#hostportoperation) | **POST** /sandboxes/{sandboxId}/host | Expose a sandbox port on a public HTTPS URL |
51
60
  | [**interrupt**](BoatApi.md#interrupt) | **POST** /sandboxes/{sandboxId}/interrupt | Interrupt running work |
52
61
  | [**limits**](BoatApi.md#limits) | **GET** /limits | Get Boat limits |
62
+ | [**listCredentialAccounts**](BoatApi.md#listcredentialaccounts) | **GET** /credential-profiles/{profile}/accounts/{credential} | List the accounts of a credential |
63
+ | [**listCredentialProfiles**](BoatApi.md#listcredentialprofiles) | **GET** /credential-profiles | List credential profiles |
53
64
  | [**listNamedSnapshots**](BoatApi.md#listnamedsnapshots) | **GET** /named-snapshots | List named snapshots |
54
65
  | [**listOrganizations**](BoatApi.md#listorganizations) | **GET** /orgs | List organizations |
55
66
  | [**listSandboxSnapshots**](BoatApi.md#listsandboxsnapshots) | **GET** /sandboxes/{sandboxId}/snapshots | List boat snapshots |
@@ -73,15 +84,21 @@ All URIs are relative to *https://boat.dev/api/v1*
73
84
  | [**secrets**](BoatApi.md#secrets) | **GET** /secrets | Get Boat secrets setup |
74
85
  | [**selectRepo**](BoatApi.md#selectrepo) | **POST** /repos | Select repository for sandboxes |
75
86
  | [**setActiveOrganization**](BoatApi.md#setactiveorganization) | **PATCH** /orgs/active | Set the active organization |
87
+ | [**setCredentialProfileCustomApi**](BoatApi.md#setcredentialprofilecustomapi) | **PUT** /credential-profiles/{profile}/custom-apis/{name} | Set a custom API |
88
+ | [**setCredentialProfileKey**](BoatApi.md#setcredentialprofilekey) | **PUT** /credential-profiles/{profile}/keys/{credential} | Set a credential profile API key |
76
89
  | [**setEnvironmentSecretFile**](BoatApi.md#setenvironmentsecretfileoperation) | **PUT** /environments/{environmentId}/secret-files | Write one secret file |
77
90
  | [**setEnvironmentVar**](BoatApi.md#setenvironmentvaroperation) | **PUT** /environments/{environmentId}/vars/{key} | Set one environment variable |
91
+ | [**setSandboxAiAccess**](BoatApi.md#setsandboxaiaccessoperation) | **PUT** /sandboxes/{sandboxId}/ai-access | Block or unblock sandbox AI access |
78
92
  | [**setTelemetry**](BoatApi.md#settelemetry) | **PUT** /telemetry | Set OpenTelemetry export |
79
93
  | [**share**](BoatApi.md#share) | **POST** /sandboxes/{sandboxId}/share | Share sandbox with the organization |
80
94
  | [**sshKey**](BoatApi.md#sshkeyoperation) | **POST** /sandboxes/{sandboxId}/sshkey | Configure sandbox SSH key |
81
95
  | [**steer**](BoatApi.md#steeroperation) | **POST** /sandboxes/{sandboxId}/steer | Steer a running turn |
82
96
  | [**stop**](BoatApi.md#stopoperation) | **POST** /sandboxes/{sandboxId}/stop | Stop and archive sandbox |
83
97
  | [**stopCommand**](BoatApi.md#stopcommand) | **DELETE** /sandboxes/{sandboxId}/commands/{processId} | Stop a detached command |
98
+ | [**switchCredentialAccount**](BoatApi.md#switchcredentialaccount) | **PUT** /credential-profiles/{profile}/accounts/{credential}/{account}/active | Switch a credential to another account |
84
99
  | [**update**](BoatApi.md#update) | **PATCH** /sandboxes/{sandboxId} | Update sandbox |
100
+ | [**updateAiProxy**](BoatApi.md#updateaiproxyoperation) | **PUT** /ai-proxy | Turn the AI credentials proxy on or off |
101
+ | [**updateCredentialProfile**](BoatApi.md#updatecredentialprofileoperation) | **PUT** /credential-profiles/{profile} | Update a credential profile |
85
102
  | [**updateDataRetention**](BoatApi.md#updatedataretention) | **PATCH** /account/data-retention | Update account data-retention policy |
86
103
  | [**updateEnvironment**](BoatApi.md#updateenvironment) | **PUT** /environments/{environmentId} | Update a sandbox environment |
87
104
  | [**updateSecrets**](BoatApi.md#updatesecrets) | **POST** /secrets | Update Boat secrets setup |
@@ -92,9 +109,90 @@ All URIs are relative to *https://boat.dev/api/v1*
92
109
 
93
110
 
94
111
 
112
+ ## addCredentialAccount
113
+
114
+ > CredentialAccountsResponse addCredentialAccount(profile, credential, setCredentialKeyRequest)
115
+
116
+ Add another API key to a credential
117
+
118
+ Adds an API key as another account of the credential, ready to switch to. The first key of a credential becomes the one in use. A sign-in returns `400 not_an_api_key`; add another sign-in with \"Add another account\" on the dashboard. Needs an API key with `account.admin`.
119
+
120
+ ### Example
121
+
122
+ ```ts
123
+ import {
124
+ Configuration,
125
+ BoatApi,
126
+ } from '@boatdev/sdk';
127
+ import type { AddCredentialAccountRequest } from '@boatdev/sdk';
128
+
129
+ async function example() {
130
+ console.log("🚀 Testing @boatdev/sdk SDK...");
131
+ const config = new Configuration({
132
+ // Configure HTTP bearer authorization: BoatBearerAuth
133
+ accessToken: "YOUR BEARER TOKEN",
134
+ });
135
+ const api = new BoatApi(config);
136
+
137
+ const body = {
138
+ // string | Profile id or name.
139
+ profile: profile_example,
140
+ // CredentialId
141
+ credential: ...,
142
+ // SetCredentialKeyRequest
143
+ setCredentialKeyRequest: ...,
144
+ } satisfies AddCredentialAccountRequest;
145
+
146
+ try {
147
+ const data = await api.addCredentialAccount(body);
148
+ console.log(data);
149
+ } catch (error) {
150
+ console.error(error);
151
+ }
152
+ }
153
+
154
+ // Run the test
155
+ example().catch(console.error);
156
+ ```
157
+
158
+ ### Parameters
159
+
160
+
161
+ | Name | Type | Description | Notes |
162
+ |------------- | ------------- | ------------- | -------------|
163
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
164
+ | **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] |
165
+ | **setCredentialKeyRequest** | [SetCredentialKeyRequest](SetCredentialKeyRequest.md) | | |
166
+
167
+ ### Return type
168
+
169
+ [**CredentialAccountsResponse**](CredentialAccountsResponse.md)
170
+
171
+ ### Authorization
172
+
173
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
174
+
175
+ ### HTTP request headers
176
+
177
+ - **Content-Type**: `application/json`
178
+ - **Accept**: `application/json`
179
+
180
+
181
+ ### HTTP response details
182
+ | Status code | Description | Response headers |
183
+ |-------------|-------------|------------------|
184
+ | **201** | The accounts, the new one included. | - |
185
+ | **400** | Invalid request body or parameters. | - |
186
+ | **401** | Missing or invalid bearer token. | - |
187
+ | **403** | Authenticated token is not allowed to perform this action. | - |
188
+ | **404** | Resource not found. | - |
189
+
190
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
191
+
192
+
95
193
  ## addEnvironmentRepo
96
194
 
97
- > EnvironmentItemChangeResponse addEnvironmentRepo(environmentId, addEnvironmentRepoRequest)
195
+ > EnvironmentItemChangeResponse addEnvironmentRepo(environmentId, addEnvironmentRepoRequest, org)
98
196
 
99
197
  Add a repository to an environment
100
198
 
@@ -122,6 +220,8 @@ async function example() {
122
220
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
123
221
  // AddEnvironmentRepoRequest
124
222
  addEnvironmentRepoRequest: ...,
223
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
224
+ org: org_example,
125
225
  } satisfies AddEnvironmentRepoOperationRequest;
126
226
 
127
227
  try {
@@ -143,6 +243,7 @@ example().catch(console.error);
143
243
  |------------- | ------------- | ------------- | -------------|
144
244
  | **environmentId** | `string` | | [Defaults to `undefined`] |
145
245
  | **addEnvironmentRepoRequest** | [AddEnvironmentRepoRequest](AddEnvironmentRepoRequest.md) | | |
246
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
146
247
 
147
248
  ### Return type
148
249
 
@@ -907,7 +1008,7 @@ async function example() {
907
1008
  const body = {
908
1009
  // 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)
909
1010
  idempotencyKey: idempotencyKey_example,
910
- // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. (optional)
1011
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
911
1012
  org: org_example,
912
1013
  // string | Same as the `org` query parameter. Query wins when both are set. (optional)
913
1014
  xBoatOrg: xBoatOrg_example,
@@ -933,7 +1034,7 @@ example().catch(console.error);
933
1034
  | Name | Type | Description | Notes |
934
1035
  |------------- | ------------- | ------------- | -------------|
935
1036
  | **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`] |
936
- | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. | [Optional] [Defaults to `undefined`] |
1037
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
937
1038
  | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
938
1039
  | **createSandboxRequest** | [CreateSandboxRequest](CreateSandboxRequest.md) | | [Optional] |
939
1040
 
@@ -964,6 +1065,81 @@ example().catch(console.error);
964
1065
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
965
1066
 
966
1067
 
1068
+ ## createCredentialProfile
1069
+
1070
+ > CredentialProfileResponse createCredentialProfile(createCredentialProfileRequest)
1071
+
1072
+ Create a credential profile
1073
+
1074
+ Creates an empty profile, or a copy of `copyFrom`. With `org`, the profile belongs to that organization and only its owners can create it. Needs an API key with `account.admin`.
1075
+
1076
+ ### Example
1077
+
1078
+ ```ts
1079
+ import {
1080
+ Configuration,
1081
+ BoatApi,
1082
+ } from '@boatdev/sdk';
1083
+ import type { CreateCredentialProfileOperationRequest } from '@boatdev/sdk';
1084
+
1085
+ async function example() {
1086
+ console.log("🚀 Testing @boatdev/sdk SDK...");
1087
+ const config = new Configuration({
1088
+ // Configure HTTP bearer authorization: BoatBearerAuth
1089
+ accessToken: "YOUR BEARER TOKEN",
1090
+ });
1091
+ const api = new BoatApi(config);
1092
+
1093
+ const body = {
1094
+ // CreateCredentialProfileRequest
1095
+ createCredentialProfileRequest: {"name":"work","copyFrom":"default"},
1096
+ } satisfies CreateCredentialProfileOperationRequest;
1097
+
1098
+ try {
1099
+ const data = await api.createCredentialProfile(body);
1100
+ console.log(data);
1101
+ } catch (error) {
1102
+ console.error(error);
1103
+ }
1104
+ }
1105
+
1106
+ // Run the test
1107
+ example().catch(console.error);
1108
+ ```
1109
+
1110
+ ### Parameters
1111
+
1112
+
1113
+ | Name | Type | Description | Notes |
1114
+ |------------- | ------------- | ------------- | -------------|
1115
+ | **createCredentialProfileRequest** | [CreateCredentialProfileRequest](CreateCredentialProfileRequest.md) | | |
1116
+
1117
+ ### Return type
1118
+
1119
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1120
+
1121
+ ### Authorization
1122
+
1123
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
1124
+
1125
+ ### HTTP request headers
1126
+
1127
+ - **Content-Type**: `application/json`
1128
+ - **Accept**: `application/json`
1129
+
1130
+
1131
+ ### HTTP response details
1132
+ | Status code | Description | Response headers |
1133
+ |-------------|-------------|------------------|
1134
+ | **201** | Profile created. | - |
1135
+ | **400** | Invalid request body or parameters. | - |
1136
+ | **401** | Missing or invalid bearer token. | - |
1137
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1138
+ | **409** | Request conflicts with current account or sandbox state. | - |
1139
+
1140
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1141
+
1142
+
967
1143
  ## createDownloadUrl
968
1144
 
969
1145
  > FileUrlResponse createDownloadUrl(sandboxId, fileUrlRequest)
@@ -1044,7 +1220,7 @@ example().catch(console.error);
1044
1220
 
1045
1221
  ## createEnvironment
1046
1222
 
1047
- > SandboxEnvironmentListResponse createEnvironment(createSandboxEnvironmentRequest)
1223
+ > SandboxEnvironmentListResponse createEnvironment(createSandboxEnvironmentRequest, org)
1048
1224
 
1049
1225
  Create a sandbox environment
1050
1226
 
@@ -1070,6 +1246,8 @@ async function example() {
1070
1246
  const body = {
1071
1247
  // CreateSandboxEnvironmentRequest
1072
1248
  createSandboxEnvironmentRequest: ...,
1249
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
1250
+ org: org_example,
1073
1251
  } satisfies CreateEnvironmentRequest;
1074
1252
 
1075
1253
  try {
@@ -1090,6 +1268,7 @@ example().catch(console.error);
1090
1268
  | Name | Type | Description | Notes |
1091
1269
  |------------- | ------------- | ------------- | -------------|
1092
1270
  | **createSandboxEnvironmentRequest** | [CreateSandboxEnvironmentRequest](CreateSandboxEnvironmentRequest.md) | | |
1271
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
1093
1272
 
1094
1273
  ### Return type
1095
1274
 
@@ -1416,13 +1595,13 @@ example().catch(console.error);
1416
1595
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1417
1596
 
1418
1597
 
1419
- ## deleteEnvironment
1598
+ ## deleteCredentialAccount
1420
1599
 
1421
- > SandboxEnvironmentResponse deleteEnvironment(environmentId)
1600
+ > CredentialAccountsResponse deleteCredentialAccount(profile, credential, account)
1422
1601
 
1423
- Delete a sandbox environment
1602
+ Forget an account of a credential
1424
1603
 
1425
- Soft-deletes an environment. The default environment cannot be deleted, and at least one environment is always kept.
1604
+ Deletes an account. For the account in use, the credential switches to another account first, or is removed when it was the last one. Needs an API key with `account.admin`.
1426
1605
 
1427
1606
  ### Example
1428
1607
 
@@ -1431,7 +1610,7 @@ import {
1431
1610
  Configuration,
1432
1611
  BoatApi,
1433
1612
  } from '@boatdev/sdk';
1434
- import type { DeleteEnvironmentRequest } from '@boatdev/sdk';
1613
+ import type { DeleteCredentialAccountRequest } from '@boatdev/sdk';
1435
1614
 
1436
1615
  async function example() {
1437
1616
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1442,12 +1621,16 @@ async function example() {
1442
1621
  const api = new BoatApi(config);
1443
1622
 
1444
1623
  const body = {
1445
- // string | Environment id returned by `GET /environments`.
1446
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1447
- } satisfies DeleteEnvironmentRequest;
1624
+ // string | Profile id or name.
1625
+ profile: profile_example,
1626
+ // CredentialId
1627
+ credential: ...,
1628
+ // string | The account id from the list.
1629
+ account: account_example,
1630
+ } satisfies DeleteCredentialAccountRequest;
1448
1631
 
1449
1632
  try {
1450
- const data = await api.deleteEnvironment(body);
1633
+ const data = await api.deleteCredentialAccount(body);
1451
1634
  console.log(data);
1452
1635
  } catch (error) {
1453
1636
  console.error(error);
@@ -1463,11 +1646,13 @@ example().catch(console.error);
1463
1646
 
1464
1647
  | Name | Type | Description | Notes |
1465
1648
  |------------- | ------------- | ------------- | -------------|
1466
- | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
1649
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1650
+ | **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] |
1651
+ | **account** | `string` | The account id from the list. | [Defaults to `undefined`] |
1467
1652
 
1468
1653
  ### Return type
1469
1654
 
1470
- [**SandboxEnvironmentResponse**](SandboxEnvironmentResponse.md)
1655
+ [**CredentialAccountsResponse**](CredentialAccountsResponse.md)
1471
1656
 
1472
1657
  ### Authorization
1473
1658
 
@@ -1482,21 +1667,22 @@ example().catch(console.error);
1482
1667
  ### HTTP response details
1483
1668
  | Status code | Description | Response headers |
1484
1669
  |-------------|-------------|------------------|
1485
- | **200** | Environment soft-deleted. | - |
1670
+ | **200** | The accounts left. | - |
1671
+ | **400** | Invalid request body or parameters. | - |
1486
1672
  | **401** | Missing or invalid bearer token. | - |
1673
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1487
1674
  | **404** | Resource not found. | - |
1488
- | **409** | Request conflicts with current account or sandbox state. | - |
1489
1675
 
1490
1676
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1491
1677
 
1492
1678
 
1493
- ## deleteEnvironmentRepo
1679
+ ## deleteCredentialProfile
1494
1680
 
1495
- > EnvironmentItemChangeResponse deleteEnvironmentRepo(environmentId, repositoryId)
1681
+ > CredentialProfileDeletedResponse deleteCredentialProfile(profile)
1496
1682
 
1497
- Remove a repository from an environment
1683
+ Delete a credential profile
1498
1684
 
1499
- Removes one repository from the environment\'s selection. Mints a new immutable version.
1685
+ Deletes the profile. A default profile returns `409 is_default`. A profile that an environment names returns `409 in_use`. Needs an API key with `account.admin`.
1500
1686
 
1501
1687
  ### Example
1502
1688
 
@@ -1505,7 +1691,7 @@ import {
1505
1691
  Configuration,
1506
1692
  BoatApi,
1507
1693
  } from '@boatdev/sdk';
1508
- import type { DeleteEnvironmentRepoRequest } from '@boatdev/sdk';
1694
+ import type { DeleteCredentialProfileRequest } from '@boatdev/sdk';
1509
1695
 
1510
1696
  async function example() {
1511
1697
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1516,14 +1702,12 @@ async function example() {
1516
1702
  const api = new BoatApi(config);
1517
1703
 
1518
1704
  const body = {
1519
- // string
1520
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1521
- // string | The repository `databaseId`.
1522
- repositoryId: repositoryId_example,
1523
- } satisfies DeleteEnvironmentRepoRequest;
1705
+ // string | Profile id or name.
1706
+ profile: profile_example,
1707
+ } satisfies DeleteCredentialProfileRequest;
1524
1708
 
1525
1709
  try {
1526
- const data = await api.deleteEnvironmentRepo(body);
1710
+ const data = await api.deleteCredentialProfile(body);
1527
1711
  console.log(data);
1528
1712
  } catch (error) {
1529
1713
  console.error(error);
@@ -1539,12 +1723,11 @@ example().catch(console.error);
1539
1723
 
1540
1724
  | Name | Type | Description | Notes |
1541
1725
  |------------- | ------------- | ------------- | -------------|
1542
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1543
- | **repositoryId** | `string` | The repository `databaseId`. | [Defaults to `undefined`] |
1726
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1544
1727
 
1545
1728
  ### Return type
1546
1729
 
1547
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1730
+ [**CredentialProfileDeletedResponse**](CredentialProfileDeletedResponse.md)
1548
1731
 
1549
1732
  ### Authorization
1550
1733
 
@@ -1559,20 +1742,22 @@ example().catch(console.error);
1559
1742
  ### HTTP response details
1560
1743
  | Status code | Description | Response headers |
1561
1744
  |-------------|-------------|------------------|
1562
- | **200** | New version minted. | - |
1745
+ | **200** | Profile deleted. | - |
1563
1746
  | **401** | Missing or invalid bearer token. | - |
1747
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1564
1748
  | **404** | Resource not found. | - |
1749
+ | **409** | Request conflicts with current account or sandbox state. | - |
1565
1750
 
1566
1751
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1567
1752
 
1568
1753
 
1569
- ## deleteEnvironmentSecretFile
1754
+ ## deleteCredentialProfileCustomApi
1570
1755
 
1571
- > EnvironmentItemChangeResponse deleteEnvironmentSecretFile(path, environmentId)
1756
+ > CredentialProfileResponse deleteCredentialProfileCustomApi(profile, name)
1572
1757
 
1573
- Remove one secret file
1758
+ Remove a custom API
1574
1759
 
1575
- Removes the secret file at `path`. Mints a new immutable version.
1760
+ Removes one custom API from the profile. Needs an API key with `account.admin`.
1576
1761
 
1577
1762
  ### Example
1578
1763
 
@@ -1581,7 +1766,7 @@ import {
1581
1766
  Configuration,
1582
1767
  BoatApi,
1583
1768
  } from '@boatdev/sdk';
1584
- import type { DeleteEnvironmentSecretFileRequest } from '@boatdev/sdk';
1769
+ import type { DeleteCredentialProfileCustomApiRequest } from '@boatdev/sdk';
1585
1770
 
1586
1771
  async function example() {
1587
1772
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1592,14 +1777,14 @@ async function example() {
1592
1777
  const api = new BoatApi(config);
1593
1778
 
1594
1779
  const body = {
1595
- // string
1596
- path: path_example,
1597
- // string
1598
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1599
- } satisfies DeleteEnvironmentSecretFileRequest;
1780
+ // string | Profile id or name.
1781
+ profile: profile_example,
1782
+ // string | Environment variable name of the custom API, for example `STRIPE_KEY`. Provider names (`ANTHROPIC_*`, `OPENAI_*`, and so on) and names that end in `_BASE_URL` are reserved.
1783
+ name: name_example,
1784
+ } satisfies DeleteCredentialProfileCustomApiRequest;
1600
1785
 
1601
1786
  try {
1602
- const data = await api.deleteEnvironmentSecretFile(body);
1787
+ const data = await api.deleteCredentialProfileCustomApi(body);
1603
1788
  console.log(data);
1604
1789
  } catch (error) {
1605
1790
  console.error(error);
@@ -1615,12 +1800,12 @@ example().catch(console.error);
1615
1800
 
1616
1801
  | Name | Type | Description | Notes |
1617
1802
  |------------- | ------------- | ------------- | -------------|
1618
- | **path** | `string` | | [Defaults to `undefined`] |
1619
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1803
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1804
+ | **name** | `string` | Environment variable name of the custom API, for example `STRIPE_KEY`. Provider names (`ANTHROPIC_*`, `OPENAI_*`, and so on) and names that end in `_BASE_URL` are reserved. | [Defaults to `undefined`] |
1620
1805
 
1621
1806
  ### Return type
1622
1807
 
1623
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1808
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1624
1809
 
1625
1810
  ### Authorization
1626
1811
 
@@ -1635,20 +1820,21 @@ example().catch(console.error);
1635
1820
  ### HTTP response details
1636
1821
  | Status code | Description | Response headers |
1637
1822
  |-------------|-------------|------------------|
1638
- | **200** | New version minted. | - |
1823
+ | **200** | The updated profile. | - |
1639
1824
  | **401** | Missing or invalid bearer token. | - |
1825
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1640
1826
  | **404** | Resource not found. | - |
1641
1827
 
1642
1828
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1643
1829
 
1644
1830
 
1645
- ## deleteEnvironmentVar
1831
+ ## deleteCredentialProfileKey
1646
1832
 
1647
- > EnvironmentItemChangeResponse deleteEnvironmentVar(environmentId, key)
1833
+ > CredentialProfileResponse deleteCredentialProfileKey(profile, credential)
1648
1834
 
1649
- Remove one environment variable
1835
+ Remove a credential profile credential
1650
1836
 
1651
- Removes a single variable. Mints a new immutable version.
1837
+ Removes one credential, an API key or a sign-in. Needs an API key with `account.admin`.
1652
1838
 
1653
1839
  ### Example
1654
1840
 
@@ -1657,7 +1843,7 @@ import {
1657
1843
  Configuration,
1658
1844
  BoatApi,
1659
1845
  } from '@boatdev/sdk';
1660
- import type { DeleteEnvironmentVarRequest } from '@boatdev/sdk';
1846
+ import type { DeleteCredentialProfileKeyRequest } from '@boatdev/sdk';
1661
1847
 
1662
1848
  async function example() {
1663
1849
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1668,14 +1854,14 @@ async function example() {
1668
1854
  const api = new BoatApi(config);
1669
1855
 
1670
1856
  const body = {
1671
- // string
1672
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1673
- // string | Environment variable name.
1674
- key: key_example,
1675
- } satisfies DeleteEnvironmentVarRequest;
1857
+ // string | Profile id or name.
1858
+ profile: profile_example,
1859
+ // CredentialId
1860
+ credential: ...,
1861
+ } satisfies DeleteCredentialProfileKeyRequest;
1676
1862
 
1677
1863
  try {
1678
- const data = await api.deleteEnvironmentVar(body);
1864
+ const data = await api.deleteCredentialProfileKey(body);
1679
1865
  console.log(data);
1680
1866
  } catch (error) {
1681
1867
  console.error(error);
@@ -1691,12 +1877,12 @@ example().catch(console.error);
1691
1877
 
1692
1878
  | Name | Type | Description | Notes |
1693
1879
  |------------- | ------------- | ------------- | -------------|
1694
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1695
- | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
1880
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1881
+ | **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] |
1696
1882
 
1697
1883
  ### Return type
1698
1884
 
1699
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1885
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1700
1886
 
1701
1887
  ### Authorization
1702
1888
 
@@ -1711,20 +1897,22 @@ example().catch(console.error);
1711
1897
  ### HTTP response details
1712
1898
  | Status code | Description | Response headers |
1713
1899
  |-------------|-------------|------------------|
1714
- | **200** | New version minted. | - |
1900
+ | **200** | The updated profile. | - |
1901
+ | **400** | Invalid request body or parameters. | - |
1715
1902
  | **401** | Missing or invalid bearer token. | - |
1903
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1716
1904
  | **404** | Resource not found. | - |
1717
1905
 
1718
1906
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1719
1907
 
1720
1908
 
1721
- ## deleteNamedSnapshot
1909
+ ## deleteEnvironment
1722
1910
 
1723
- > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
1911
+ > SandboxEnvironmentResponse deleteEnvironment(environmentId, org)
1724
1912
 
1725
- Remove a named snapshot
1913
+ Delete a sandbox environment
1726
1914
 
1727
- Remove a named snapshot and release its storage (`boat snapshot rm <name>` in the CLI). Sandboxes already deployed from it are unaffected.
1915
+ Soft-deletes an environment. The default environment cannot be deleted, and at least one environment is always kept.
1728
1916
 
1729
1917
  ### Example
1730
1918
 
@@ -1733,7 +1921,7 @@ import {
1733
1921
  Configuration,
1734
1922
  BoatApi,
1735
1923
  } from '@boatdev/sdk';
1736
- import type { DeleteNamedSnapshotRequest } from '@boatdev/sdk';
1924
+ import type { DeleteEnvironmentRequest } from '@boatdev/sdk';
1737
1925
 
1738
1926
  async function example() {
1739
1927
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1744,12 +1932,14 @@ async function example() {
1744
1932
  const api = new BoatApi(config);
1745
1933
 
1746
1934
  const body = {
1747
- // string
1748
- name: name_example,
1749
- } satisfies DeleteNamedSnapshotRequest;
1935
+ // string | Environment id returned by `GET /environments`.
1936
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1937
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
1938
+ org: org_example,
1939
+ } satisfies DeleteEnvironmentRequest;
1750
1940
 
1751
1941
  try {
1752
- const data = await api.deleteNamedSnapshot(body);
1942
+ const data = await api.deleteEnvironment(body);
1753
1943
  console.log(data);
1754
1944
  } catch (error) {
1755
1945
  console.error(error);
@@ -1765,11 +1955,12 @@ example().catch(console.error);
1765
1955
 
1766
1956
  | Name | Type | Description | Notes |
1767
1957
  |------------- | ------------- | ------------- | -------------|
1768
- | **name** | `string` | | [Defaults to `undefined`] |
1958
+ | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
1959
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
1769
1960
 
1770
1961
  ### Return type
1771
1962
 
1772
- [**NamedSnapshotDeletedResponse**](NamedSnapshotDeletedResponse.md)
1963
+ [**SandboxEnvironmentResponse**](SandboxEnvironmentResponse.md)
1773
1964
 
1774
1965
  ### Authorization
1775
1966
 
@@ -1784,21 +1975,21 @@ example().catch(console.error);
1784
1975
  ### HTTP response details
1785
1976
  | Status code | Description | Response headers |
1786
1977
  |-------------|-------------|------------------|
1787
- | **200** | Removed. | - |
1978
+ | **200** | Environment soft-deleted. | - |
1788
1979
  | **401** | Missing or invalid bearer token. | - |
1789
1980
  | **404** | Resource not found. | - |
1790
- | **409** | `save_in_progress`: a save under this name is still running. Wait for it to settle before removing it. | - |
1981
+ | **409** | Request conflicts with current account or sandbox state. | - |
1791
1982
 
1792
1983
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1793
1984
 
1794
1985
 
1795
- ## deleteSandbox
1986
+ ## deleteEnvironmentRepo
1796
1987
 
1797
- > DeletionOperationResponse deleteSandbox(xAsciiConfirmDelete, sandboxId)
1988
+ > EnvironmentItemChangeResponse deleteEnvironmentRepo(environmentId, repositoryId, org)
1798
1989
 
1799
- Permanently delete sandbox data
1990
+ Remove a repository from an environment
1800
1991
 
1801
- 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`.
1992
+ Removes one repository from the environment\'s selection. Mints a new immutable version.
1802
1993
 
1803
1994
  ### Example
1804
1995
 
@@ -1807,7 +1998,7 @@ import {
1807
1998
  Configuration,
1808
1999
  BoatApi,
1809
2000
  } from '@boatdev/sdk';
1810
- import type { DeleteSandboxRequest } from '@boatdev/sdk';
2001
+ import type { DeleteEnvironmentRepoRequest } from '@boatdev/sdk';
1811
2002
 
1812
2003
  async function example() {
1813
2004
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1818,14 +2009,16 @@ async function example() {
1818
2009
  const api = new BoatApi(config);
1819
2010
 
1820
2011
  const body = {
1821
- // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
1822
- xAsciiConfirmDelete: xAsciiConfirmDelete_example,
1823
- // string | Public Sandbox id returned by create/list/get sandbox calls.
1824
- sandboxId: sandboxId_example,
1825
- } satisfies DeleteSandboxRequest;
2012
+ // string
2013
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
2014
+ // string | The repository `databaseId`.
2015
+ repositoryId: repositoryId_example,
2016
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
2017
+ org: org_example,
2018
+ } satisfies DeleteEnvironmentRepoRequest;
1826
2019
 
1827
2020
  try {
1828
- const data = await api.deleteSandbox(body);
2021
+ const data = await api.deleteEnvironmentRepo(body);
1829
2022
  console.log(data);
1830
2023
  } catch (error) {
1831
2024
  console.error(error);
@@ -1841,12 +2034,13 @@ example().catch(console.error);
1841
2034
 
1842
2035
  | Name | Type | Description | Notes |
1843
2036
  |------------- | ------------- | ------------- | -------------|
1844
- | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
1845
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2037
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
2038
+ | **repositoryId** | `string` | The repository `databaseId`. | [Defaults to `undefined`] |
2039
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
1846
2040
 
1847
2041
  ### Return type
1848
2042
 
1849
- [**DeletionOperationResponse**](DeletionOperationResponse.md)
2043
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1850
2044
 
1851
2045
  ### Authorization
1852
2046
 
@@ -1861,22 +2055,20 @@ example().catch(console.error);
1861
2055
  ### HTTP response details
1862
2056
  | Status code | Description | Response headers |
1863
2057
  |-------------|-------------|------------------|
1864
- | **202** | Deletion confirmed and accepted for background processing. | - |
2058
+ | **200** | New version minted. | - |
1865
2059
  | **401** | Missing or invalid bearer token. | - |
1866
- | **403** | Authenticated token is not allowed to perform this action. | - |
1867
2060
  | **404** | Resource not found. | - |
1868
- | **409** | Request conflicts with current account or sandbox state. | - |
1869
2061
 
1870
2062
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1871
2063
 
1872
2064
 
1873
- ## deleteSandboxSnapshots
2065
+ ## deleteEnvironmentSecretFile
1874
2066
 
1875
- > DeletionOperationListResponse deleteSandboxSnapshots(sandboxId, xAsciiConfirmDelete)
2067
+ > EnvironmentItemChangeResponse deleteEnvironmentSecretFile(path, environmentId, org)
1876
2068
 
1877
- Permanently delete all snapshots of a sandbox
2069
+ Remove one secret file
1878
2070
 
1879
- 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.
2071
+ Removes the secret file at `path`. Mints a new immutable version.
1880
2072
 
1881
2073
  ### Example
1882
2074
 
@@ -1885,7 +2077,317 @@ import {
1885
2077
  Configuration,
1886
2078
  BoatApi,
1887
2079
  } from '@boatdev/sdk';
1888
- import type { DeleteSandboxSnapshotsRequest } from '@boatdev/sdk';
2080
+ import type { DeleteEnvironmentSecretFileRequest } from '@boatdev/sdk';
2081
+
2082
+ async function example() {
2083
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2084
+ const config = new Configuration({
2085
+ // Configure HTTP bearer authorization: BoatBearerAuth
2086
+ accessToken: "YOUR BEARER TOKEN",
2087
+ });
2088
+ const api = new BoatApi(config);
2089
+
2090
+ const body = {
2091
+ // string
2092
+ path: path_example,
2093
+ // string
2094
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
2095
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
2096
+ org: org_example,
2097
+ } satisfies DeleteEnvironmentSecretFileRequest;
2098
+
2099
+ try {
2100
+ const data = await api.deleteEnvironmentSecretFile(body);
2101
+ console.log(data);
2102
+ } catch (error) {
2103
+ console.error(error);
2104
+ }
2105
+ }
2106
+
2107
+ // Run the test
2108
+ example().catch(console.error);
2109
+ ```
2110
+
2111
+ ### Parameters
2112
+
2113
+
2114
+ | Name | Type | Description | Notes |
2115
+ |------------- | ------------- | ------------- | -------------|
2116
+ | **path** | `string` | | [Defaults to `undefined`] |
2117
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
2118
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
2119
+
2120
+ ### Return type
2121
+
2122
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
2123
+
2124
+ ### Authorization
2125
+
2126
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2127
+
2128
+ ### HTTP request headers
2129
+
2130
+ - **Content-Type**: Not defined
2131
+ - **Accept**: `application/json`
2132
+
2133
+
2134
+ ### HTTP response details
2135
+ | Status code | Description | Response headers |
2136
+ |-------------|-------------|------------------|
2137
+ | **200** | New version minted. | - |
2138
+ | **401** | Missing or invalid bearer token. | - |
2139
+ | **404** | Resource not found. | - |
2140
+
2141
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2142
+
2143
+
2144
+ ## deleteEnvironmentVar
2145
+
2146
+ > EnvironmentItemChangeResponse deleteEnvironmentVar(environmentId, key, org)
2147
+
2148
+ Remove one environment variable
2149
+
2150
+ Removes a single variable. Mints a new immutable version.
2151
+
2152
+ ### Example
2153
+
2154
+ ```ts
2155
+ import {
2156
+ Configuration,
2157
+ BoatApi,
2158
+ } from '@boatdev/sdk';
2159
+ import type { DeleteEnvironmentVarRequest } from '@boatdev/sdk';
2160
+
2161
+ async function example() {
2162
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2163
+ const config = new Configuration({
2164
+ // Configure HTTP bearer authorization: BoatBearerAuth
2165
+ accessToken: "YOUR BEARER TOKEN",
2166
+ });
2167
+ const api = new BoatApi(config);
2168
+
2169
+ const body = {
2170
+ // string
2171
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
2172
+ // string | Environment variable name.
2173
+ key: key_example,
2174
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
2175
+ org: org_example,
2176
+ } satisfies DeleteEnvironmentVarRequest;
2177
+
2178
+ try {
2179
+ const data = await api.deleteEnvironmentVar(body);
2180
+ console.log(data);
2181
+ } catch (error) {
2182
+ console.error(error);
2183
+ }
2184
+ }
2185
+
2186
+ // Run the test
2187
+ example().catch(console.error);
2188
+ ```
2189
+
2190
+ ### Parameters
2191
+
2192
+
2193
+ | Name | Type | Description | Notes |
2194
+ |------------- | ------------- | ------------- | -------------|
2195
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
2196
+ | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
2197
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
2198
+
2199
+ ### Return type
2200
+
2201
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
2202
+
2203
+ ### Authorization
2204
+
2205
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2206
+
2207
+ ### HTTP request headers
2208
+
2209
+ - **Content-Type**: Not defined
2210
+ - **Accept**: `application/json`
2211
+
2212
+
2213
+ ### HTTP response details
2214
+ | Status code | Description | Response headers |
2215
+ |-------------|-------------|------------------|
2216
+ | **200** | New version minted. | - |
2217
+ | **401** | Missing or invalid bearer token. | - |
2218
+ | **404** | Resource not found. | - |
2219
+
2220
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2221
+
2222
+
2223
+ ## deleteNamedSnapshot
2224
+
2225
+ > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
2226
+
2227
+ Remove a named snapshot
2228
+
2229
+ Remove a named snapshot and release its storage (`boat snapshot rm <name>` in the CLI). Sandboxes already deployed from it are unaffected.
2230
+
2231
+ ### Example
2232
+
2233
+ ```ts
2234
+ import {
2235
+ Configuration,
2236
+ BoatApi,
2237
+ } from '@boatdev/sdk';
2238
+ import type { DeleteNamedSnapshotRequest } from '@boatdev/sdk';
2239
+
2240
+ async function example() {
2241
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2242
+ const config = new Configuration({
2243
+ // Configure HTTP bearer authorization: BoatBearerAuth
2244
+ accessToken: "YOUR BEARER TOKEN",
2245
+ });
2246
+ const api = new BoatApi(config);
2247
+
2248
+ const body = {
2249
+ // string
2250
+ name: name_example,
2251
+ } satisfies DeleteNamedSnapshotRequest;
2252
+
2253
+ try {
2254
+ const data = await api.deleteNamedSnapshot(body);
2255
+ console.log(data);
2256
+ } catch (error) {
2257
+ console.error(error);
2258
+ }
2259
+ }
2260
+
2261
+ // Run the test
2262
+ example().catch(console.error);
2263
+ ```
2264
+
2265
+ ### Parameters
2266
+
2267
+
2268
+ | Name | Type | Description | Notes |
2269
+ |------------- | ------------- | ------------- | -------------|
2270
+ | **name** | `string` | | [Defaults to `undefined`] |
2271
+
2272
+ ### Return type
2273
+
2274
+ [**NamedSnapshotDeletedResponse**](NamedSnapshotDeletedResponse.md)
2275
+
2276
+ ### Authorization
2277
+
2278
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2279
+
2280
+ ### HTTP request headers
2281
+
2282
+ - **Content-Type**: Not defined
2283
+ - **Accept**: `application/json`
2284
+
2285
+
2286
+ ### HTTP response details
2287
+ | Status code | Description | Response headers |
2288
+ |-------------|-------------|------------------|
2289
+ | **200** | Removed. | - |
2290
+ | **401** | Missing or invalid bearer token. | - |
2291
+ | **404** | Resource not found. | - |
2292
+ | **409** | `save_in_progress`: a save under this name is still running. Wait for it to settle before removing it. | - |
2293
+
2294
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2295
+
2296
+
2297
+ ## deleteSandbox
2298
+
2299
+ > DeletionOperationResponse deleteSandbox(xAsciiConfirmDelete, sandboxId)
2300
+
2301
+ Permanently delete sandbox data
2302
+
2303
+ 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`.
2304
+
2305
+ ### Example
2306
+
2307
+ ```ts
2308
+ import {
2309
+ Configuration,
2310
+ BoatApi,
2311
+ } from '@boatdev/sdk';
2312
+ import type { DeleteSandboxRequest } from '@boatdev/sdk';
2313
+
2314
+ async function example() {
2315
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2316
+ const config = new Configuration({
2317
+ // Configure HTTP bearer authorization: BoatBearerAuth
2318
+ accessToken: "YOUR BEARER TOKEN",
2319
+ });
2320
+ const api = new BoatApi(config);
2321
+
2322
+ const body = {
2323
+ // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
2324
+ xAsciiConfirmDelete: xAsciiConfirmDelete_example,
2325
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
2326
+ sandboxId: sandboxId_example,
2327
+ } satisfies DeleteSandboxRequest;
2328
+
2329
+ try {
2330
+ const data = await api.deleteSandbox(body);
2331
+ console.log(data);
2332
+ } catch (error) {
2333
+ console.error(error);
2334
+ }
2335
+ }
2336
+
2337
+ // Run the test
2338
+ example().catch(console.error);
2339
+ ```
2340
+
2341
+ ### Parameters
2342
+
2343
+
2344
+ | Name | Type | Description | Notes |
2345
+ |------------- | ------------- | ------------- | -------------|
2346
+ | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2347
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2348
+
2349
+ ### Return type
2350
+
2351
+ [**DeletionOperationResponse**](DeletionOperationResponse.md)
2352
+
2353
+ ### Authorization
2354
+
2355
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2356
+
2357
+ ### HTTP request headers
2358
+
2359
+ - **Content-Type**: Not defined
2360
+ - **Accept**: `application/json`
2361
+
2362
+
2363
+ ### HTTP response details
2364
+ | Status code | Description | Response headers |
2365
+ |-------------|-------------|------------------|
2366
+ | **202** | Deletion confirmed and accepted for background processing. | - |
2367
+ | **401** | Missing or invalid bearer token. | - |
2368
+ | **403** | Authenticated token is not allowed to perform this action. | - |
2369
+ | **404** | Resource not found. | - |
2370
+ | **409** | Request conflicts with current account or sandbox state. | - |
2371
+
2372
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2373
+
2374
+
2375
+ ## deleteSandboxSnapshots
2376
+
2377
+ > DeletionOperationListResponse deleteSandboxSnapshots(sandboxId, xAsciiConfirmDelete)
2378
+
2379
+ Permanently delete all snapshots of a sandbox
2380
+
2381
+ 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.
2382
+
2383
+ ### Example
2384
+
2385
+ ```ts
2386
+ import {
2387
+ Configuration,
2388
+ BoatApi,
2389
+ } from '@boatdev/sdk';
2390
+ import type { DeleteSandboxSnapshotsRequest } from '@boatdev/sdk';
1889
2391
 
1890
2392
  async function example() {
1891
2393
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -2250,7 +2752,7 @@ example().catch(console.error);
2250
2752
 
2251
2753
  ## environments
2252
2754
 
2253
- > SandboxEnvironmentListResponse environments()
2755
+ > SandboxEnvironmentListResponse environments(org)
2254
2756
 
2255
2757
  List Sandbox environments
2256
2758
 
@@ -2273,8 +2775,13 @@ async function example() {
2273
2775
  });
2274
2776
  const api = new BoatApi(config);
2275
2777
 
2778
+ const body = {
2779
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
2780
+ org: org_example,
2781
+ } satisfies EnvironmentsRequest;
2782
+
2276
2783
  try {
2277
- const data = await api.environments();
2784
+ const data = await api.environments(body);
2278
2785
  console.log(data);
2279
2786
  } catch (error) {
2280
2787
  console.error(error);
@@ -2287,7 +2794,10 @@ example().catch(console.error);
2287
2794
 
2288
2795
  ### Parameters
2289
2796
 
2290
- This endpoint does not need any parameter.
2797
+
2798
+ | Name | Type | Description | Notes |
2799
+ |------------- | ------------- | ------------- | -------------|
2800
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
2291
2801
 
2292
2802
  ### Return type
2293
2803
 
@@ -2436,7 +2946,161 @@ async function example() {
2436
2946
  } satisfies ForkOperationRequest;
2437
2947
 
2438
2948
  try {
2439
- const data = await api.fork(body);
2949
+ const data = await api.fork(body);
2950
+ console.log(data);
2951
+ } catch (error) {
2952
+ console.error(error);
2953
+ }
2954
+ }
2955
+
2956
+ // Run the test
2957
+ example().catch(console.error);
2958
+ ```
2959
+
2960
+ ### Parameters
2961
+
2962
+
2963
+ | Name | Type | Description | Notes |
2964
+ |------------- | ------------- | ------------- | -------------|
2965
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2966
+ | **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`] |
2967
+ | **forkRequest** | [ForkRequest](ForkRequest.md) | | [Optional] |
2968
+
2969
+ ### Return type
2970
+
2971
+ [**SandboxActionResponse**](SandboxActionResponse.md)
2972
+
2973
+ ### Authorization
2974
+
2975
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2976
+
2977
+ ### HTTP request headers
2978
+
2979
+ - **Content-Type**: `application/json`
2980
+ - **Accept**: `application/json`
2981
+
2982
+
2983
+ ### HTTP response details
2984
+ | Status code | Description | Response headers |
2985
+ |-------------|-------------|------------------|
2986
+ | **202** | Fork started. The response `id` is the new forked sandbox id. | - |
2987
+ | **401** | Missing or invalid bearer token. | - |
2988
+ | **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. | - |
2989
+ | **404** | Resource not found. | - |
2990
+ | **409** | Request conflicts with current account or sandbox state. | - |
2991
+ | **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. | - |
2992
+ | **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. | - |
2993
+
2994
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2995
+
2996
+
2997
+ ## get
2998
+
2999
+ > SandboxInfoResponse get(sandboxId)
3000
+
3001
+ Get sandbox
3002
+
3003
+ Poll this endpoint after create, stop, resume, or fork operations.
3004
+
3005
+ ### Example
3006
+
3007
+ ```ts
3008
+ import {
3009
+ Configuration,
3010
+ BoatApi,
3011
+ } from '@boatdev/sdk';
3012
+ import type { GetRequest } from '@boatdev/sdk';
3013
+
3014
+ async function example() {
3015
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3016
+ const config = new Configuration({
3017
+ // Configure HTTP bearer authorization: BoatBearerAuth
3018
+ accessToken: "YOUR BEARER TOKEN",
3019
+ });
3020
+ const api = new BoatApi(config);
3021
+
3022
+ const body = {
3023
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3024
+ sandboxId: sandboxId_example,
3025
+ } satisfies GetRequest;
3026
+
3027
+ try {
3028
+ const data = await api.get(body);
3029
+ console.log(data);
3030
+ } catch (error) {
3031
+ console.error(error);
3032
+ }
3033
+ }
3034
+
3035
+ // Run the test
3036
+ example().catch(console.error);
3037
+ ```
3038
+
3039
+ ### Parameters
3040
+
3041
+
3042
+ | Name | Type | Description | Notes |
3043
+ |------------- | ------------- | ------------- | -------------|
3044
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3045
+
3046
+ ### Return type
3047
+
3048
+ [**SandboxInfoResponse**](SandboxInfoResponse.md)
3049
+
3050
+ ### Authorization
3051
+
3052
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3053
+
3054
+ ### HTTP request headers
3055
+
3056
+ - **Content-Type**: Not defined
3057
+ - **Accept**: `application/json`
3058
+
3059
+
3060
+ ### HTTP response details
3061
+ | Status code | Description | Response headers |
3062
+ |-------------|-------------|------------------|
3063
+ | **200** | Boat details. | - |
3064
+ | **401** | Missing or invalid bearer token. | - |
3065
+ | **404** | Resource not found. | - |
3066
+
3067
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3068
+
3069
+
3070
+ ## getAiProxy
3071
+
3072
+ > AiProxySettings getAiProxy(org, xBoatOrg)
3073
+
3074
+ Get AI credentials proxy
3075
+
3076
+ 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`.
3077
+
3078
+ ### Example
3079
+
3080
+ ```ts
3081
+ import {
3082
+ Configuration,
3083
+ BoatApi,
3084
+ } from '@boatdev/sdk';
3085
+ import type { GetAiProxyRequest } from '@boatdev/sdk';
3086
+
3087
+ async function example() {
3088
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3089
+ const config = new Configuration({
3090
+ // Configure HTTP bearer authorization: BoatBearerAuth
3091
+ accessToken: "YOUR BEARER TOKEN",
3092
+ });
3093
+ const api = new BoatApi(config);
3094
+
3095
+ const body = {
3096
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
3097
+ org: org_example,
3098
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
3099
+ xBoatOrg: xBoatOrg_example,
3100
+ } satisfies GetAiProxyRequest;
3101
+
3102
+ try {
3103
+ const data = await api.getAiProxy(body);
2440
3104
  console.log(data);
2441
3105
  } catch (error) {
2442
3106
  console.error(error);
@@ -2452,13 +3116,12 @@ example().catch(console.error);
2452
3116
 
2453
3117
  | Name | Type | Description | Notes |
2454
3118
  |------------- | ------------- | ------------- | -------------|
2455
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2456
- | **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`] |
2457
- | **forkRequest** | [ForkRequest](ForkRequest.md) | | [Optional] |
3119
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
3120
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
2458
3121
 
2459
3122
  ### Return type
2460
3123
 
2461
- [**SandboxActionResponse**](SandboxActionResponse.md)
3124
+ [**AiProxySettings**](AiProxySettings.md)
2462
3125
 
2463
3126
  ### Authorization
2464
3127
 
@@ -2466,31 +3129,26 @@ example().catch(console.error);
2466
3129
 
2467
3130
  ### HTTP request headers
2468
3131
 
2469
- - **Content-Type**: `application/json`
3132
+ - **Content-Type**: Not defined
2470
3133
  - **Accept**: `application/json`
2471
3134
 
2472
3135
 
2473
3136
  ### HTTP response details
2474
3137
  | Status code | Description | Response headers |
2475
3138
  |-------------|-------------|------------------|
2476
- | **202** | Fork started. The response `id` is the new forked sandbox id. | - |
3139
+ | **200** | The switch and its price. | - |
2477
3140
  | **401** | Missing or invalid bearer token. | - |
2478
- | **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. | - |
2479
- | **404** | Resource not found. | - |
2480
- | **409** | Request conflicts with current account or sandbox state. | - |
2481
- | **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. | - |
2482
- | **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. | - |
2483
3141
 
2484
3142
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2485
3143
 
2486
3144
 
2487
- ## get
3145
+ ## getAiUsage
2488
3146
 
2489
- > SandboxInfoResponse get(sandboxId)
3147
+ > AccountAiUsageResponse getAiUsage(days, profile, org, xBoatOrg)
2490
3148
 
2491
- Get sandbox
3149
+ Get AI usage
2492
3150
 
2493
- Poll this endpoint after create, stop, resume, or fork operations.
3151
+ Proxied AI usage, per sandbox and in total, per UTC day, credential and model. Without `profile`, the usage charged to the wallet in scope. With `profile`, the requests made with that profile\'s credentials, whoever pays; only its managers can read it. Needs an API key with `account.read`.
2494
3152
 
2495
3153
  ### Example
2496
3154
 
@@ -2499,7 +3157,7 @@ import {
2499
3157
  Configuration,
2500
3158
  BoatApi,
2501
3159
  } from '@boatdev/sdk';
2502
- import type { GetRequest } from '@boatdev/sdk';
3160
+ import type { GetAiUsageRequest } from '@boatdev/sdk';
2503
3161
 
2504
3162
  async function example() {
2505
3163
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -2510,12 +3168,18 @@ async function example() {
2510
3168
  const api = new BoatApi(config);
2511
3169
 
2512
3170
  const body = {
2513
- // string | Public Sandbox id returned by create/list/get sandbox calls.
2514
- sandboxId: sandboxId_example,
2515
- } satisfies GetRequest;
3171
+ // number | Days of history, today included. (optional)
3172
+ days: 56,
3173
+ // string | A credential profile id. Counts that profile\'s requests instead of a wallet\'s. (optional)
3174
+ profile: profile_example,
3175
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
3176
+ org: org_example,
3177
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
3178
+ xBoatOrg: xBoatOrg_example,
3179
+ } satisfies GetAiUsageRequest;
2516
3180
 
2517
3181
  try {
2518
- const data = await api.get(body);
3182
+ const data = await api.getAiUsage(body);
2519
3183
  console.log(data);
2520
3184
  } catch (error) {
2521
3185
  console.error(error);
@@ -2531,11 +3195,14 @@ example().catch(console.error);
2531
3195
 
2532
3196
  | Name | Type | Description | Notes |
2533
3197
  |------------- | ------------- | ------------- | -------------|
2534
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3198
+ | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3199
+ | **profile** | `string` | A credential profile id. Counts that profile\'s requests instead of a wallet\'s. | [Optional] [Defaults to `undefined`] |
3200
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
3201
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
2535
3202
 
2536
3203
  ### Return type
2537
3204
 
2538
- [**SandboxInfoResponse**](SandboxInfoResponse.md)
3205
+ [**AccountAiUsageResponse**](AccountAiUsageResponse.md)
2539
3206
 
2540
3207
  ### Authorization
2541
3208
 
@@ -2550,9 +3217,8 @@ example().catch(console.error);
2550
3217
  ### HTTP response details
2551
3218
  | Status code | Description | Response headers |
2552
3219
  |-------------|-------------|------------------|
2553
- | **200** | Boat details. | - |
3220
+ | **200** | The usage. | - |
2554
3221
  | **401** | Missing or invalid bearer token. | - |
2555
- | **404** | Resource not found. | - |
2556
3222
 
2557
3223
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2558
3224
 
@@ -2913,6 +3579,82 @@ example().catch(console.error);
2913
3579
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2914
3580
 
2915
3581
 
3582
+ ## getSandboxAiUsage
3583
+
3584
+ > SandboxAiUsageResponse getSandboxAiUsage(sandboxId, days)
3585
+
3586
+ Get sandbox AI usage
3587
+
3588
+ One sandbox\'s proxied AI usage per UTC day, credential and model, and whether it is blocked. Needs an API key with `box.read` on the sandbox.
3589
+
3590
+ ### Example
3591
+
3592
+ ```ts
3593
+ import {
3594
+ Configuration,
3595
+ BoatApi,
3596
+ } from '@boatdev/sdk';
3597
+ import type { GetSandboxAiUsageRequest } from '@boatdev/sdk';
3598
+
3599
+ async function example() {
3600
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3601
+ const config = new Configuration({
3602
+ // Configure HTTP bearer authorization: BoatBearerAuth
3603
+ accessToken: "YOUR BEARER TOKEN",
3604
+ });
3605
+ const api = new BoatApi(config);
3606
+
3607
+ const body = {
3608
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3609
+ sandboxId: sandboxId_example,
3610
+ // number | Days of history, today included. (optional)
3611
+ days: 56,
3612
+ } satisfies GetSandboxAiUsageRequest;
3613
+
3614
+ try {
3615
+ const data = await api.getSandboxAiUsage(body);
3616
+ console.log(data);
3617
+ } catch (error) {
3618
+ console.error(error);
3619
+ }
3620
+ }
3621
+
3622
+ // Run the test
3623
+ example().catch(console.error);
3624
+ ```
3625
+
3626
+ ### Parameters
3627
+
3628
+
3629
+ | Name | Type | Description | Notes |
3630
+ |------------- | ------------- | ------------- | -------------|
3631
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3632
+ | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3633
+
3634
+ ### Return type
3635
+
3636
+ [**SandboxAiUsageResponse**](SandboxAiUsageResponse.md)
3637
+
3638
+ ### Authorization
3639
+
3640
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3641
+
3642
+ ### HTTP request headers
3643
+
3644
+ - **Content-Type**: Not defined
3645
+ - **Accept**: `application/json`
3646
+
3647
+
3648
+ ### HTTP response details
3649
+ | Status code | Description | Response headers |
3650
+ |-------------|-------------|------------------|
3651
+ | **200** | The usage. | - |
3652
+ | **401** | Missing or invalid bearer token. | - |
3653
+ | **404** | Resource not found. | - |
3654
+
3655
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3656
+
3657
+
2916
3658
  ## getSnapshotDownload
2917
3659
 
2918
3660
  > SnapshotDownloadResponse getSnapshotDownload(snapshotId)
@@ -3382,7 +4124,165 @@ async function example() {
3382
4124
  } satisfies HostPortOperationRequest;
3383
4125
 
3384
4126
  try {
3385
- const data = await api.hostPort(body);
4127
+ const data = await api.hostPort(body);
4128
+ console.log(data);
4129
+ } catch (error) {
4130
+ console.error(error);
4131
+ }
4132
+ }
4133
+
4134
+ // Run the test
4135
+ example().catch(console.error);
4136
+ ```
4137
+
4138
+ ### Parameters
4139
+
4140
+
4141
+ | Name | Type | Description | Notes |
4142
+ |------------- | ------------- | ------------- | -------------|
4143
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4144
+ | **hostPortRequest** | [HostPortRequest](HostPortRequest.md) | | |
4145
+
4146
+ ### Return type
4147
+
4148
+ [**HostPortResponse**](HostPortResponse.md)
4149
+
4150
+ ### Authorization
4151
+
4152
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
4153
+
4154
+ ### HTTP request headers
4155
+
4156
+ - **Content-Type**: `application/json`
4157
+ - **Accept**: `application/json`
4158
+
4159
+
4160
+ ### HTTP response details
4161
+ | Status code | Description | Response headers |
4162
+ |-------------|-------------|------------------|
4163
+ | **200** | The public HTTPS URL for the port. | - |
4164
+ | **400** | Invalid request body or parameters. | - |
4165
+ | **401** | Missing or invalid bearer token. | - |
4166
+ | **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. | - |
4167
+ | **404** | Resource not found. | - |
4168
+
4169
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4170
+
4171
+
4172
+ ## interrupt
4173
+
4174
+ > SandboxActionResponse interrupt(sandboxId, conversation)
4175
+
4176
+ Interrupt running work
4177
+
4178
+ Interrupt running agent work. By default this stops **every** conversation on the sandbox. Pass `conversation` to stop just one, leaving the others running. See [Integrated agents](/integrated-agents).
4179
+
4180
+ ### Example
4181
+
4182
+ ```ts
4183
+ import {
4184
+ Configuration,
4185
+ BoatApi,
4186
+ } from '@boatdev/sdk';
4187
+ import type { InterruptRequest } from '@boatdev/sdk';
4188
+
4189
+ async function example() {
4190
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4191
+ const config = new Configuration({
4192
+ // Configure HTTP bearer authorization: BoatBearerAuth
4193
+ accessToken: "YOUR BEARER TOKEN",
4194
+ });
4195
+ const api = new BoatApi(config);
4196
+
4197
+ const body = {
4198
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
4199
+ sandboxId: sandboxId_example,
4200
+ // string | Interrupt only this conversation id. Omit to interrupt the whole sandbox. (optional)
4201
+ conversation: conversation_example,
4202
+ } satisfies InterruptRequest;
4203
+
4204
+ try {
4205
+ const data = await api.interrupt(body);
4206
+ console.log(data);
4207
+ } catch (error) {
4208
+ console.error(error);
4209
+ }
4210
+ }
4211
+
4212
+ // Run the test
4213
+ example().catch(console.error);
4214
+ ```
4215
+
4216
+ ### Parameters
4217
+
4218
+
4219
+ | Name | Type | Description | Notes |
4220
+ |------------- | ------------- | ------------- | -------------|
4221
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4222
+ | **conversation** | `string` | Interrupt only this conversation id. Omit to interrupt the whole sandbox. | [Optional] [Defaults to `undefined`] |
4223
+
4224
+ ### Return type
4225
+
4226
+ [**SandboxActionResponse**](SandboxActionResponse.md)
4227
+
4228
+ ### Authorization
4229
+
4230
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
4231
+
4232
+ ### HTTP request headers
4233
+
4234
+ - **Content-Type**: Not defined
4235
+ - **Accept**: `application/json`
4236
+
4237
+
4238
+ ### HTTP response details
4239
+ | Status code | Description | Response headers |
4240
+ |-------------|-------------|------------------|
4241
+ | **200** | Interrupt requested. | - |
4242
+ | **401** | Missing or invalid bearer token. | - |
4243
+ | **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. | - |
4244
+ | **404** | Resource not found. | - |
4245
+ | **409** | Request conflicts with current account or sandbox state. | - |
4246
+
4247
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4248
+
4249
+
4250
+ ## limits
4251
+
4252
+ > LimitsResponse limits(org, xBoatOrg, teamId)
4253
+
4254
+ Get Boat limits
4255
+
4256
+ 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.
4257
+
4258
+ ### Example
4259
+
4260
+ ```ts
4261
+ import {
4262
+ Configuration,
4263
+ BoatApi,
4264
+ } from '@boatdev/sdk';
4265
+ import type { LimitsRequest } from '@boatdev/sdk';
4266
+
4267
+ async function example() {
4268
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4269
+ const config = new Configuration({
4270
+ // Configure HTTP bearer authorization: BoatBearerAuth
4271
+ accessToken: "YOUR BEARER TOKEN",
4272
+ });
4273
+ const api = new BoatApi(config);
4274
+
4275
+ const body = {
4276
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
4277
+ org: org_example,
4278
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
4279
+ xBoatOrg: xBoatOrg_example,
4280
+ // string | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. (optional)
4281
+ teamId: teamId_example,
4282
+ } satisfies LimitsRequest;
4283
+
4284
+ try {
4285
+ const data = await api.limits(body);
3386
4286
  console.log(data);
3387
4287
  } catch (error) {
3388
4288
  console.error(error);
@@ -3398,12 +4298,13 @@ example().catch(console.error);
3398
4298
 
3399
4299
  | Name | Type | Description | Notes |
3400
4300
  |------------- | ------------- | ------------- | -------------|
3401
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3402
- | **hostPortRequest** | [HostPortRequest](HostPortRequest.md) | | |
4301
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
4302
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
4303
+ | **teamId** | `string` | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. | [Optional] [Defaults to `undefined`] |
3403
4304
 
3404
4305
  ### Return type
3405
4306
 
3406
- [**HostPortResponse**](HostPortResponse.md)
4307
+ [**LimitsResponse**](LimitsResponse.md)
3407
4308
 
3408
4309
  ### Authorization
3409
4310
 
@@ -3411,29 +4312,26 @@ example().catch(console.error);
3411
4312
 
3412
4313
  ### HTTP request headers
3413
4314
 
3414
- - **Content-Type**: `application/json`
4315
+ - **Content-Type**: Not defined
3415
4316
  - **Accept**: `application/json`
3416
4317
 
3417
4318
 
3418
4319
  ### HTTP response details
3419
4320
  | Status code | Description | Response headers |
3420
4321
  |-------------|-------------|------------------|
3421
- | **200** | The public HTTPS URL for the port. | - |
3422
- | **400** | Invalid request body or parameters. | - |
4322
+ | **200** | Current creation and concurrent-boat limits. | - |
3423
4323
  | **401** | Missing or invalid bearer token. | - |
3424
- | **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. | - |
3425
- | **404** | Resource not found. | - |
3426
4324
 
3427
4325
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3428
4326
 
3429
4327
 
3430
- ## interrupt
4328
+ ## listCredentialAccounts
3431
4329
 
3432
- > SandboxActionResponse interrupt(sandboxId, conversation)
4330
+ > CredentialAccountsResponse listCredentialAccounts(profile, credential)
3433
4331
 
3434
- Interrupt running work
4332
+ List the accounts of a credential
3435
4333
 
3436
- Interrupt running agent work. By default this stops **every** conversation on the sandbox. Pass `conversation` to stop just one, leaving the others running. See [Integrated agents](/integrated-agents).
4334
+ Every account of one credential (several ChatGPT sign-ins, several OpenAI keys), in the order they were added, the one in use marked. Labels only, never a secret. Needs an API key with `account.admin`.
3437
4335
 
3438
4336
  ### Example
3439
4337
 
@@ -3442,7 +4340,7 @@ import {
3442
4340
  Configuration,
3443
4341
  BoatApi,
3444
4342
  } from '@boatdev/sdk';
3445
- import type { InterruptRequest } from '@boatdev/sdk';
4343
+ import type { ListCredentialAccountsRequest } from '@boatdev/sdk';
3446
4344
 
3447
4345
  async function example() {
3448
4346
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3453,14 +4351,14 @@ async function example() {
3453
4351
  const api = new BoatApi(config);
3454
4352
 
3455
4353
  const body = {
3456
- // string | Public Sandbox id returned by create/list/get sandbox calls.
3457
- sandboxId: sandboxId_example,
3458
- // string | Interrupt only this conversation id. Omit to interrupt the whole sandbox. (optional)
3459
- conversation: conversation_example,
3460
- } satisfies InterruptRequest;
4354
+ // string | Profile id or name.
4355
+ profile: profile_example,
4356
+ // CredentialId
4357
+ credential: ...,
4358
+ } satisfies ListCredentialAccountsRequest;
3461
4359
 
3462
4360
  try {
3463
- const data = await api.interrupt(body);
4361
+ const data = await api.listCredentialAccounts(body);
3464
4362
  console.log(data);
3465
4363
  } catch (error) {
3466
4364
  console.error(error);
@@ -3476,12 +4374,12 @@ example().catch(console.error);
3476
4374
 
3477
4375
  | Name | Type | Description | Notes |
3478
4376
  |------------- | ------------- | ------------- | -------------|
3479
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3480
- | **conversation** | `string` | Interrupt only this conversation id. Omit to interrupt the whole sandbox. | [Optional] [Defaults to `undefined`] |
4377
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
4378
+ | **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] |
3481
4379
 
3482
4380
  ### Return type
3483
4381
 
3484
- [**SandboxActionResponse**](SandboxActionResponse.md)
4382
+ [**CredentialAccountsResponse**](CredentialAccountsResponse.md)
3485
4383
 
3486
4384
  ### Authorization
3487
4385
 
@@ -3496,22 +4394,22 @@ example().catch(console.error);
3496
4394
  ### HTTP response details
3497
4395
  | Status code | Description | Response headers |
3498
4396
  |-------------|-------------|------------------|
3499
- | **200** | Interrupt requested. | - |
4397
+ | **200** | The accounts. | - |
4398
+ | **400** | Invalid request body or parameters. | - |
3500
4399
  | **401** | Missing or invalid bearer token. | - |
3501
- | **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. | - |
4400
+ | **403** | Authenticated token is not allowed to perform this action. | - |
3502
4401
  | **404** | Resource not found. | - |
3503
- | **409** | Request conflicts with current account or sandbox state. | - |
3504
4402
 
3505
4403
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3506
4404
 
3507
4405
 
3508
- ## limits
4406
+ ## listCredentialProfiles
3509
4407
 
3510
- > LimitsResponse limits(org, xBoatOrg, teamId)
4408
+ > CredentialProfileListResponse listCredentialProfiles()
3511
4409
 
3512
- Get Boat limits
4410
+ List credential profiles
3513
4411
 
3514
- 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.
4412
+ Returns every AI credential profile you can use, yours and your organizations\'. Secret values are never returned. Needs an API key with `account.admin`.
3515
4413
 
3516
4414
  ### Example
3517
4415
 
@@ -3520,7 +4418,7 @@ import {
3520
4418
  Configuration,
3521
4419
  BoatApi,
3522
4420
  } from '@boatdev/sdk';
3523
- import type { LimitsRequest } from '@boatdev/sdk';
4421
+ import type { ListCredentialProfilesRequest } from '@boatdev/sdk';
3524
4422
 
3525
4423
  async function example() {
3526
4424
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3530,17 +4428,8 @@ async function example() {
3530
4428
  });
3531
4429
  const api = new BoatApi(config);
3532
4430
 
3533
- const body = {
3534
- // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. (optional)
3535
- org: org_example,
3536
- // string | Same as the `org` query parameter. Query wins when both are set. (optional)
3537
- xBoatOrg: xBoatOrg_example,
3538
- // string | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. (optional)
3539
- teamId: teamId_example,
3540
- } satisfies LimitsRequest;
3541
-
3542
4431
  try {
3543
- const data = await api.limits(body);
4432
+ const data = await api.listCredentialProfiles();
3544
4433
  console.log(data);
3545
4434
  } catch (error) {
3546
4435
  console.error(error);
@@ -3553,16 +4442,11 @@ example().catch(console.error);
3553
4442
 
3554
4443
  ### Parameters
3555
4444
 
3556
-
3557
- | Name | Type | Description | Notes |
3558
- |------------- | ------------- | ------------- | -------------|
3559
- | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. | [Optional] [Defaults to `undefined`] |
3560
- | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
3561
- | **teamId** | `string` | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. | [Optional] [Defaults to `undefined`] |
4445
+ This endpoint does not need any parameter.
3562
4446
 
3563
4447
  ### Return type
3564
4448
 
3565
- [**LimitsResponse**](LimitsResponse.md)
4449
+ [**CredentialProfileListResponse**](CredentialProfileListResponse.md)
3566
4450
 
3567
4451
  ### Authorization
3568
4452
 
@@ -3577,7 +4461,7 @@ example().catch(console.error);
3577
4461
  ### HTTP response details
3578
4462
  | Status code | Description | Response headers |
3579
4463
  |-------------|-------------|------------------|
3580
- | **200** | Current creation and concurrent-boat limits. | - |
4464
+ | **200** | The profiles. | - |
3581
4465
  | **401** | Missing or invalid bearer token. | - |
3582
4466
 
3583
4467
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -4944,7 +5828,7 @@ async function example() {
4944
5828
  const api = new BoatApi(config);
4945
5829
 
4946
5830
  const body = {
4947
- // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. (optional)
5831
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
4948
5832
  org: org_example,
4949
5833
  // string | Same as the `org` query parameter. Query wins when both are set. (optional)
4950
5834
  xBoatOrg: xBoatOrg_example,
@@ -4975,7 +5859,7 @@ example().catch(console.error);
4975
5859
 
4976
5860
  | Name | Type | Description | Notes |
4977
5861
  |------------- | ------------- | ------------- | -------------|
4978
- | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes, snapshots, and environments stay creator-private. | [Optional] [Defaults to `undefined`] |
5862
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
4979
5863
  | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
4980
5864
  | **limit** | `number` | Maximum items to return. | [Optional] [Defaults to `100`] |
4981
5865
  | **cursor** | `string` | Opaque pagination cursor returned as `pageInfo.nextCursor`. | [Optional] [Defaults to `undefined`] |
@@ -5250,7 +6134,248 @@ async function example() {
5250
6134
  } satisfies SetActiveOrganizationRequest;
5251
6135
 
5252
6136
  try {
5253
- const data = await api.setActiveOrganization(body);
6137
+ const data = await api.setActiveOrganization(body);
6138
+ console.log(data);
6139
+ } catch (error) {
6140
+ console.error(error);
6141
+ }
6142
+ }
6143
+
6144
+ // Run the test
6145
+ example().catch(console.error);
6146
+ ```
6147
+
6148
+ ### Parameters
6149
+
6150
+
6151
+ | Name | Type | Description | Notes |
6152
+ |------------- | ------------- | ------------- | -------------|
6153
+ | **activeOrgUpdateRequest** | [ActiveOrgUpdateRequest](ActiveOrgUpdateRequest.md) | | |
6154
+
6155
+ ### Return type
6156
+
6157
+ [**ActiveOrgResponse**](ActiveOrgResponse.md)
6158
+
6159
+ ### Authorization
6160
+
6161
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6162
+
6163
+ ### HTTP request headers
6164
+
6165
+ - **Content-Type**: `application/json`
6166
+ - **Accept**: `application/json`
6167
+
6168
+
6169
+ ### HTTP response details
6170
+ | Status code | Description | Response headers |
6171
+ |-------------|-------------|------------------|
6172
+ | **200** | The wallet now active. | - |
6173
+ | **400** | Invalid request body or parameters. | - |
6174
+ | **401** | Missing or invalid bearer token. | - |
6175
+ | **403** | `not_org_member`: no organization with that id or name that you belong to. | - |
6176
+ | **409** | `ambiguous_org`: several of your organizations share that name; pass the id. | - |
6177
+
6178
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6179
+
6180
+
6181
+ ## setCredentialProfileCustomApi
6182
+
6183
+ > CredentialProfileResponse setCredentialProfileCustomApi(profile, name, setCustomApiRequest)
6184
+
6185
+ Set a custom API
6186
+
6187
+ Adds or replaces one custom API. The sandbox gets `<NAME>` and `<NAME>_BASE_URL`. Needs an API key with `account.admin`.
6188
+
6189
+ ### Example
6190
+
6191
+ ```ts
6192
+ import {
6193
+ Configuration,
6194
+ BoatApi,
6195
+ } from '@boatdev/sdk';
6196
+ import type { SetCredentialProfileCustomApiRequest } from '@boatdev/sdk';
6197
+
6198
+ async function example() {
6199
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6200
+ const config = new Configuration({
6201
+ // Configure HTTP bearer authorization: BoatBearerAuth
6202
+ accessToken: "YOUR BEARER TOKEN",
6203
+ });
6204
+ const api = new BoatApi(config);
6205
+
6206
+ const body = {
6207
+ // string | Profile id or name.
6208
+ profile: profile_example,
6209
+ // string | Environment variable name of the custom API, for example `STRIPE_KEY`. Provider names (`ANTHROPIC_*`, `OPENAI_*`, and so on) and names that end in `_BASE_URL` are reserved.
6210
+ name: name_example,
6211
+ // SetCustomApiRequest
6212
+ setCustomApiRequest: {"value":"sk_live_123","baseUrl":"https://api.stripe.com/v1"},
6213
+ } satisfies SetCredentialProfileCustomApiRequest;
6214
+
6215
+ try {
6216
+ const data = await api.setCredentialProfileCustomApi(body);
6217
+ console.log(data);
6218
+ } catch (error) {
6219
+ console.error(error);
6220
+ }
6221
+ }
6222
+
6223
+ // Run the test
6224
+ example().catch(console.error);
6225
+ ```
6226
+
6227
+ ### Parameters
6228
+
6229
+
6230
+ | Name | Type | Description | Notes |
6231
+ |------------- | ------------- | ------------- | -------------|
6232
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
6233
+ | **name** | `string` | Environment variable name of the custom API, for example `STRIPE_KEY`. Provider names (`ANTHROPIC_*`, `OPENAI_*`, and so on) and names that end in `_BASE_URL` are reserved. | [Defaults to `undefined`] |
6234
+ | **setCustomApiRequest** | [SetCustomApiRequest](SetCustomApiRequest.md) | | |
6235
+
6236
+ ### Return type
6237
+
6238
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
6239
+
6240
+ ### Authorization
6241
+
6242
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6243
+
6244
+ ### HTTP request headers
6245
+
6246
+ - **Content-Type**: `application/json`
6247
+ - **Accept**: `application/json`
6248
+
6249
+
6250
+ ### HTTP response details
6251
+ | Status code | Description | Response headers |
6252
+ |-------------|-------------|------------------|
6253
+ | **200** | The updated profile. | - |
6254
+ | **400** | Invalid request body or parameters. | - |
6255
+ | **401** | Missing or invalid bearer token. | - |
6256
+ | **403** | Authenticated token is not allowed to perform this action. | - |
6257
+ | **404** | Resource not found. | - |
6258
+
6259
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6260
+
6261
+
6262
+ ## setCredentialProfileKey
6263
+
6264
+ > CredentialProfileResponse setCredentialProfileKey(profile, credential, setCredentialKeyRequest)
6265
+
6266
+ Set a credential profile API key
6267
+
6268
+ Sets one API key. A sign-in id returns `400 not_an_api_key`; connect sign-ins on the dashboard Agents page. Running sandboxes that use the profile get the new key. Needs an API key with `account.admin`.
6269
+
6270
+ ### Example
6271
+
6272
+ ```ts
6273
+ import {
6274
+ Configuration,
6275
+ BoatApi,
6276
+ } from '@boatdev/sdk';
6277
+ import type { SetCredentialProfileKeyRequest } from '@boatdev/sdk';
6278
+
6279
+ async function example() {
6280
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6281
+ const config = new Configuration({
6282
+ // Configure HTTP bearer authorization: BoatBearerAuth
6283
+ accessToken: "YOUR BEARER TOKEN",
6284
+ });
6285
+ const api = new BoatApi(config);
6286
+
6287
+ const body = {
6288
+ // string | Profile id or name.
6289
+ profile: profile_example,
6290
+ // CredentialId
6291
+ credential: ...,
6292
+ // SetCredentialKeyRequest
6293
+ setCredentialKeyRequest: ...,
6294
+ } satisfies SetCredentialProfileKeyRequest;
6295
+
6296
+ try {
6297
+ const data = await api.setCredentialProfileKey(body);
6298
+ console.log(data);
6299
+ } catch (error) {
6300
+ console.error(error);
6301
+ }
6302
+ }
6303
+
6304
+ // Run the test
6305
+ example().catch(console.error);
6306
+ ```
6307
+
6308
+ ### Parameters
6309
+
6310
+
6311
+ | Name | Type | Description | Notes |
6312
+ |------------- | ------------- | ------------- | -------------|
6313
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
6314
+ | **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] |
6315
+ | **setCredentialKeyRequest** | [SetCredentialKeyRequest](SetCredentialKeyRequest.md) | | |
6316
+
6317
+ ### Return type
6318
+
6319
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
6320
+
6321
+ ### Authorization
6322
+
6323
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6324
+
6325
+ ### HTTP request headers
6326
+
6327
+ - **Content-Type**: `application/json`
6328
+ - **Accept**: `application/json`
6329
+
6330
+
6331
+ ### HTTP response details
6332
+ | Status code | Description | Response headers |
6333
+ |-------------|-------------|------------------|
6334
+ | **200** | The updated profile. | - |
6335
+ | **400** | Invalid request body or parameters. | - |
6336
+ | **401** | Missing or invalid bearer token. | - |
6337
+ | **403** | Authenticated token is not allowed to perform this action. | - |
6338
+ | **404** | Resource not found. | - |
6339
+
6340
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6341
+
6342
+
6343
+ ## setEnvironmentSecretFile
6344
+
6345
+ > EnvironmentItemChangeResponse setEnvironmentSecretFile(environmentId, setEnvironmentSecretFileRequest, org)
6346
+
6347
+ Write one secret file
6348
+
6349
+ Adds or replaces a single secret file by path. Mints a new immutable version.
6350
+
6351
+ ### Example
6352
+
6353
+ ```ts
6354
+ import {
6355
+ Configuration,
6356
+ BoatApi,
6357
+ } from '@boatdev/sdk';
6358
+ import type { SetEnvironmentSecretFileOperationRequest } from '@boatdev/sdk';
6359
+
6360
+ async function example() {
6361
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6362
+ const config = new Configuration({
6363
+ // Configure HTTP bearer authorization: BoatBearerAuth
6364
+ accessToken: "YOUR BEARER TOKEN",
6365
+ });
6366
+ const api = new BoatApi(config);
6367
+
6368
+ const body = {
6369
+ // string
6370
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
6371
+ // SetEnvironmentSecretFileRequest
6372
+ setEnvironmentSecretFileRequest: ...,
6373
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
6374
+ org: org_example,
6375
+ } satisfies SetEnvironmentSecretFileOperationRequest;
6376
+
6377
+ try {
6378
+ const data = await api.setEnvironmentSecretFile(body);
5254
6379
  console.log(data);
5255
6380
  } catch (error) {
5256
6381
  console.error(error);
@@ -5266,11 +6391,13 @@ example().catch(console.error);
5266
6391
 
5267
6392
  | Name | Type | Description | Notes |
5268
6393
  |------------- | ------------- | ------------- | -------------|
5269
- | **activeOrgUpdateRequest** | [ActiveOrgUpdateRequest](ActiveOrgUpdateRequest.md) | | |
6394
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
6395
+ | **setEnvironmentSecretFileRequest** | [SetEnvironmentSecretFileRequest](SetEnvironmentSecretFileRequest.md) | | |
6396
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
5270
6397
 
5271
6398
  ### Return type
5272
6399
 
5273
- [**ActiveOrgResponse**](ActiveOrgResponse.md)
6400
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
5274
6401
 
5275
6402
  ### Authorization
5276
6403
 
@@ -5285,22 +6412,21 @@ example().catch(console.error);
5285
6412
  ### HTTP response details
5286
6413
  | Status code | Description | Response headers |
5287
6414
  |-------------|-------------|------------------|
5288
- | **200** | The wallet now active. | - |
6415
+ | **200** | New version minted. | - |
5289
6416
  | **400** | Invalid request body or parameters. | - |
5290
6417
  | **401** | Missing or invalid bearer token. | - |
5291
- | **403** | `not_org_member`: no organization with that id or name that you belong to. | - |
5292
- | **409** | `ambiguous_org`: several of your organizations share that name; pass the id. | - |
6418
+ | **404** | Resource not found. | - |
5293
6419
 
5294
6420
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5295
6421
 
5296
6422
 
5297
- ## setEnvironmentSecretFile
6423
+ ## setEnvironmentVar
5298
6424
 
5299
- > EnvironmentItemChangeResponse setEnvironmentSecretFile(environmentId, setEnvironmentSecretFileRequest)
6425
+ > EnvironmentItemChangeResponse setEnvironmentVar(environmentId, key, setEnvironmentVarRequest, org)
5300
6426
 
5301
- Write one secret file
6427
+ Set one environment variable
5302
6428
 
5303
- Adds or replaces a single secret file by path. Mints a new immutable version.
6429
+ Sets or replaces a single variable without reading or rewriting the rest. Mints a new immutable version.
5304
6430
 
5305
6431
  ### Example
5306
6432
 
@@ -5309,7 +6435,7 @@ import {
5309
6435
  Configuration,
5310
6436
  BoatApi,
5311
6437
  } from '@boatdev/sdk';
5312
- import type { SetEnvironmentSecretFileOperationRequest } from '@boatdev/sdk';
6438
+ import type { SetEnvironmentVarOperationRequest } from '@boatdev/sdk';
5313
6439
 
5314
6440
  async function example() {
5315
6441
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5322,12 +6448,16 @@ async function example() {
5322
6448
  const body = {
5323
6449
  // string
5324
6450
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
5325
- // SetEnvironmentSecretFileRequest
5326
- setEnvironmentSecretFileRequest: ...,
5327
- } satisfies SetEnvironmentSecretFileOperationRequest;
6451
+ // string | Environment variable name.
6452
+ key: key_example,
6453
+ // SetEnvironmentVarRequest
6454
+ setEnvironmentVarRequest: ...,
6455
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
6456
+ org: org_example,
6457
+ } satisfies SetEnvironmentVarOperationRequest;
5328
6458
 
5329
6459
  try {
5330
- const data = await api.setEnvironmentSecretFile(body);
6460
+ const data = await api.setEnvironmentVar(body);
5331
6461
  console.log(data);
5332
6462
  } catch (error) {
5333
6463
  console.error(error);
@@ -5344,7 +6474,9 @@ example().catch(console.error);
5344
6474
  | Name | Type | Description | Notes |
5345
6475
  |------------- | ------------- | ------------- | -------------|
5346
6476
  | **environmentId** | `string` | | [Defaults to `undefined`] |
5347
- | **setEnvironmentSecretFileRequest** | [SetEnvironmentSecretFileRequest](SetEnvironmentSecretFileRequest.md) | | |
6477
+ | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
6478
+ | **setEnvironmentVarRequest** | [SetEnvironmentVarRequest](SetEnvironmentVarRequest.md) | | |
6479
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
5348
6480
 
5349
6481
  ### Return type
5350
6482
 
@@ -5371,13 +6503,13 @@ example().catch(console.error);
5371
6503
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5372
6504
 
5373
6505
 
5374
- ## setEnvironmentVar
6506
+ ## setSandboxAiAccess
5375
6507
 
5376
- > EnvironmentItemChangeResponse setEnvironmentVar(environmentId, key, setEnvironmentVarRequest)
6508
+ > SandboxAiAccessResponse setSandboxAiAccess(sandboxId, setSandboxAiAccessRequest)
5377
6509
 
5378
- Set one environment variable
6510
+ Block or unblock sandbox AI access
5379
6511
 
5380
- Sets or replaces a single variable without reading or rewriting the rest. Mints a new immutable version.
6512
+ Blocks or unblocks the sandbox\'s AI placeholders, running or stopped. The proxy refuses a blocked sandbox\'s requests with `403`. It has no effect on a sandbox that holds real keys. The sandbox creator, or a manager of its credential profile, can call it. Needs an API key with `account.admin`.
5381
6513
 
5382
6514
  ### Example
5383
6515
 
@@ -5386,7 +6518,7 @@ import {
5386
6518
  Configuration,
5387
6519
  BoatApi,
5388
6520
  } from '@boatdev/sdk';
5389
- import type { SetEnvironmentVarOperationRequest } from '@boatdev/sdk';
6521
+ import type { SetSandboxAiAccessOperationRequest } from '@boatdev/sdk';
5390
6522
 
5391
6523
  async function example() {
5392
6524
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5397,16 +6529,14 @@ async function example() {
5397
6529
  const api = new BoatApi(config);
5398
6530
 
5399
6531
  const body = {
5400
- // string
5401
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
5402
- // string | Environment variable name.
5403
- key: key_example,
5404
- // SetEnvironmentVarRequest
5405
- setEnvironmentVarRequest: ...,
5406
- } satisfies SetEnvironmentVarOperationRequest;
6532
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6533
+ sandboxId: sandboxId_example,
6534
+ // SetSandboxAiAccessRequest
6535
+ setSandboxAiAccessRequest: ...,
6536
+ } satisfies SetSandboxAiAccessOperationRequest;
5407
6537
 
5408
6538
  try {
5409
- const data = await api.setEnvironmentVar(body);
6539
+ const data = await api.setSandboxAiAccess(body);
5410
6540
  console.log(data);
5411
6541
  } catch (error) {
5412
6542
  console.error(error);
@@ -5422,13 +6552,12 @@ example().catch(console.error);
5422
6552
 
5423
6553
  | Name | Type | Description | Notes |
5424
6554
  |------------- | ------------- | ------------- | -------------|
5425
- | **environmentId** | `string` | | [Defaults to `undefined`] |
5426
- | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
5427
- | **setEnvironmentVarRequest** | [SetEnvironmentVarRequest](SetEnvironmentVarRequest.md) | | |
6555
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6556
+ | **setSandboxAiAccessRequest** | [SetSandboxAiAccessRequest](SetSandboxAiAccessRequest.md) | | |
5428
6557
 
5429
6558
  ### Return type
5430
6559
 
5431
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
6560
+ [**SandboxAiAccessResponse**](SandboxAiAccessResponse.md)
5432
6561
 
5433
6562
  ### Authorization
5434
6563
 
@@ -5443,9 +6572,10 @@ example().catch(console.error);
5443
6572
  ### HTTP response details
5444
6573
  | Status code | Description | Response headers |
5445
6574
  |-------------|-------------|------------------|
5446
- | **200** | New version minted. | - |
6575
+ | **200** | The new state. | - |
5447
6576
  | **400** | Invalid request body or parameters. | - |
5448
6577
  | **401** | Missing or invalid bearer token. | - |
6578
+ | **403** | Authenticated token is not allowed to perform this action. | - |
5449
6579
  | **404** | Resource not found. | - |
5450
6580
 
5451
6581
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -5914,6 +7044,87 @@ example().catch(console.error);
5914
7044
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5915
7045
 
5916
7046
 
7047
+ ## switchCredentialAccount
7048
+
7049
+ > CredentialAccountsResponse switchCredentialAccount(profile, credential, account)
7050
+
7051
+ Switch a credential to another account
7052
+
7053
+ Makes this account the one in use; the previous one stays as another account. Switching to the account already in use changes nothing. Every sandbox that uses the profile gets it at once, running ones included, with no restart. Use it when one account runs out of credits. Needs an API key with `account.admin`.
7054
+
7055
+ ### Example
7056
+
7057
+ ```ts
7058
+ import {
7059
+ Configuration,
7060
+ BoatApi,
7061
+ } from '@boatdev/sdk';
7062
+ import type { SwitchCredentialAccountRequest } from '@boatdev/sdk';
7063
+
7064
+ async function example() {
7065
+ console.log("🚀 Testing @boatdev/sdk SDK...");
7066
+ const config = new Configuration({
7067
+ // Configure HTTP bearer authorization: BoatBearerAuth
7068
+ accessToken: "YOUR BEARER TOKEN",
7069
+ });
7070
+ const api = new BoatApi(config);
7071
+
7072
+ const body = {
7073
+ // string | Profile id or name.
7074
+ profile: profile_example,
7075
+ // CredentialId
7076
+ credential: ...,
7077
+ // string | The account id from the list.
7078
+ account: account_example,
7079
+ } satisfies SwitchCredentialAccountRequest;
7080
+
7081
+ try {
7082
+ const data = await api.switchCredentialAccount(body);
7083
+ console.log(data);
7084
+ } catch (error) {
7085
+ console.error(error);
7086
+ }
7087
+ }
7088
+
7089
+ // Run the test
7090
+ example().catch(console.error);
7091
+ ```
7092
+
7093
+ ### Parameters
7094
+
7095
+
7096
+ | Name | Type | Description | Notes |
7097
+ |------------- | ------------- | ------------- | -------------|
7098
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
7099
+ | **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] |
7100
+ | **account** | `string` | The account id from the list. | [Defaults to `undefined`] |
7101
+
7102
+ ### Return type
7103
+
7104
+ [**CredentialAccountsResponse**](CredentialAccountsResponse.md)
7105
+
7106
+ ### Authorization
7107
+
7108
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7109
+
7110
+ ### HTTP request headers
7111
+
7112
+ - **Content-Type**: Not defined
7113
+ - **Accept**: `application/json`
7114
+
7115
+
7116
+ ### HTTP response details
7117
+ | Status code | Description | Response headers |
7118
+ |-------------|-------------|------------------|
7119
+ | **200** | The accounts after the switch. | - |
7120
+ | **400** | Invalid request body or parameters. | - |
7121
+ | **401** | Missing or invalid bearer token. | - |
7122
+ | **403** | Authenticated token is not allowed to perform this action. | - |
7123
+ | **404** | Resource not found. | - |
7124
+
7125
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7126
+
7127
+
5917
7128
  ## update
5918
7129
 
5919
7130
  > SandboxInfoResponse update(sandboxId, updateSandboxRequest)
@@ -5989,6 +7200,165 @@ example().catch(console.error);
5989
7200
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5990
7201
 
5991
7202
 
7203
+ ## updateAiProxy
7204
+
7205
+ > AiProxySettings updateAiProxy(updateAiProxyRequest, org, xBoatOrg)
7206
+
7207
+ Turn the AI credentials proxy on or off
7208
+
7209
+ 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`.
7210
+
7211
+ ### Example
7212
+
7213
+ ```ts
7214
+ import {
7215
+ Configuration,
7216
+ BoatApi,
7217
+ } from '@boatdev/sdk';
7218
+ import type { UpdateAiProxyOperationRequest } from '@boatdev/sdk';
7219
+
7220
+ async function example() {
7221
+ console.log("🚀 Testing @boatdev/sdk SDK...");
7222
+ const config = new Configuration({
7223
+ // Configure HTTP bearer authorization: BoatBearerAuth
7224
+ accessToken: "YOUR BEARER TOKEN",
7225
+ });
7226
+ const api = new BoatApi(config);
7227
+
7228
+ const body = {
7229
+ // UpdateAiProxyRequest
7230
+ updateAiProxyRequest: ...,
7231
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
7232
+ org: org_example,
7233
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
7234
+ xBoatOrg: xBoatOrg_example,
7235
+ } satisfies UpdateAiProxyOperationRequest;
7236
+
7237
+ try {
7238
+ const data = await api.updateAiProxy(body);
7239
+ console.log(data);
7240
+ } catch (error) {
7241
+ console.error(error);
7242
+ }
7243
+ }
7244
+
7245
+ // Run the test
7246
+ example().catch(console.error);
7247
+ ```
7248
+
7249
+ ### Parameters
7250
+
7251
+
7252
+ | Name | Type | Description | Notes |
7253
+ |------------- | ------------- | ------------- | -------------|
7254
+ | **updateAiProxyRequest** | [UpdateAiProxyRequest](UpdateAiProxyRequest.md) | | |
7255
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
7256
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
7257
+
7258
+ ### Return type
7259
+
7260
+ [**AiProxySettings**](AiProxySettings.md)
7261
+
7262
+ ### Authorization
7263
+
7264
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7265
+
7266
+ ### HTTP request headers
7267
+
7268
+ - **Content-Type**: `application/json`
7269
+ - **Accept**: `application/json`
7270
+
7271
+
7272
+ ### HTTP response details
7273
+ | Status code | Description | Response headers |
7274
+ |-------------|-------------|------------------|
7275
+ | **200** | The new state. | - |
7276
+ | **400** | Invalid request body or parameters. | - |
7277
+ | **401** | Missing or invalid bearer token. | - |
7278
+ | **403** | Authenticated token is not allowed to perform this action. | - |
7279
+
7280
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7281
+
7282
+
7283
+ ## updateCredentialProfile
7284
+
7285
+ > CredentialProfileResponse updateCredentialProfile(profile, updateCredentialProfileRequest)
7286
+
7287
+ Update a credential profile
7288
+
7289
+ Renames the profile, or makes it its owner\'s default. Sandboxes that use the owner\'s default switch to the new default at their next start. Needs an API key with `account.admin`.
7290
+
7291
+ ### Example
7292
+
7293
+ ```ts
7294
+ import {
7295
+ Configuration,
7296
+ BoatApi,
7297
+ } from '@boatdev/sdk';
7298
+ import type { UpdateCredentialProfileOperationRequest } from '@boatdev/sdk';
7299
+
7300
+ async function example() {
7301
+ console.log("🚀 Testing @boatdev/sdk SDK...");
7302
+ const config = new Configuration({
7303
+ // Configure HTTP bearer authorization: BoatBearerAuth
7304
+ accessToken: "YOUR BEARER TOKEN",
7305
+ });
7306
+ const api = new BoatApi(config);
7307
+
7308
+ const body = {
7309
+ // string | Profile id or name.
7310
+ profile: profile_example,
7311
+ // UpdateCredentialProfileRequest
7312
+ updateCredentialProfileRequest: {"isDefault":true},
7313
+ } satisfies UpdateCredentialProfileOperationRequest;
7314
+
7315
+ try {
7316
+ const data = await api.updateCredentialProfile(body);
7317
+ console.log(data);
7318
+ } catch (error) {
7319
+ console.error(error);
7320
+ }
7321
+ }
7322
+
7323
+ // Run the test
7324
+ example().catch(console.error);
7325
+ ```
7326
+
7327
+ ### Parameters
7328
+
7329
+
7330
+ | Name | Type | Description | Notes |
7331
+ |------------- | ------------- | ------------- | -------------|
7332
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
7333
+ | **updateCredentialProfileRequest** | [UpdateCredentialProfileRequest](UpdateCredentialProfileRequest.md) | | |
7334
+
7335
+ ### Return type
7336
+
7337
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
7338
+
7339
+ ### Authorization
7340
+
7341
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7342
+
7343
+ ### HTTP request headers
7344
+
7345
+ - **Content-Type**: `application/json`
7346
+ - **Accept**: `application/json`
7347
+
7348
+
7349
+ ### HTTP response details
7350
+ | Status code | Description | Response headers |
7351
+ |-------------|-------------|------------------|
7352
+ | **200** | The updated profile. | - |
7353
+ | **400** | Invalid request body or parameters. | - |
7354
+ | **401** | Missing or invalid bearer token. | - |
7355
+ | **403** | Authenticated token is not allowed to perform this action. | - |
7356
+ | **404** | Resource not found. | - |
7357
+ | **409** | Request conflicts with current account or sandbox state. | - |
7358
+
7359
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7360
+
7361
+
5992
7362
  ## updateDataRetention
5993
7363
 
5994
7364
  > DataRetentionPolicyResponse updateDataRetention(dataRetentionUpdateRequest)
@@ -6066,7 +7436,7 @@ example().catch(console.error);
6066
7436
 
6067
7437
  ## updateEnvironment
6068
7438
 
6069
- > SandboxEnvironmentResponse updateEnvironment(environmentId, updateSandboxEnvironmentRequest)
7439
+ > SandboxEnvironmentResponse updateEnvironment(environmentId, updateSandboxEnvironmentRequest, org)
6070
7440
 
6071
7441
  Update a sandbox environment
6072
7442
 
@@ -6094,6 +7464,8 @@ async function example() {
6094
7464
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
6095
7465
  // UpdateSandboxEnvironmentRequest
6096
7466
  updateSandboxEnvironmentRequest: ...,
7467
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
7468
+ org: org_example,
6097
7469
  } satisfies UpdateEnvironmentRequest;
6098
7470
 
6099
7471
  try {
@@ -6115,6 +7487,7 @@ example().catch(console.error);
6115
7487
  |------------- | ------------- | ------------- | -------------|
6116
7488
  | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
6117
7489
  | **updateSandboxEnvironmentRequest** | [UpdateSandboxEnvironmentRequest](UpdateSandboxEnvironmentRequest.md) | | |
7490
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
6118
7491
 
6119
7492
  ### Return type
6120
7493
 
@@ -6291,7 +7664,7 @@ example().catch(console.error);
6291
7664
 
6292
7665
  ## upgradeEnvironment
6293
7666
 
6294
- > UpgradeSandboxEnvironmentResponse upgradeEnvironment(environmentId, upgradeSandboxEnvironmentRequest)
7667
+ > UpgradeSandboxEnvironmentResponse upgradeEnvironment(environmentId, org, upgradeSandboxEnvironmentRequest)
6295
7668
 
6296
7669
  Upgrade sandboxes to an environment\'s latest version
6297
7670
 
@@ -6317,6 +7690,8 @@ async function example() {
6317
7690
  const body = {
6318
7691
  // string
6319
7692
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
7693
+ // string | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. (optional)
7694
+ org: org_example,
6320
7695
  // UpgradeSandboxEnvironmentRequest (optional)
6321
7696
  upgradeSandboxEnvironmentRequest: ...,
6322
7697
  } satisfies UpgradeEnvironmentRequest;
@@ -6339,6 +7714,7 @@ example().catch(console.error);
6339
7714
  | Name | Type | Description | Notes |
6340
7715
  |------------- | ------------- | ------------- | -------------|
6341
7716
  | **environmentId** | `string` | | [Defaults to `undefined`] |
7717
+ | **org** | `string` | Billing wallet for this request: an organization you belong to, by id (`team_…`) or by name as `GET /orgs` lists it (case-insensitive), or `personal`. Omitted, the account\'s active wallet applies (`PATCH /orgs/active`; personal until set). Two organizations sharing the name answer `409 ambiguous_org` and need the id. Sandboxes and snapshots stay creator-private. On `/environments` routes, only this query parameter selects the organization\'s shared environments; the `X-Boat-Org` header and the active wallet do not apply there. Members read them, owners and admins change them. | [Optional] [Defaults to `undefined`] |
6342
7718
  | **upgradeSandboxEnvironmentRequest** | [UpgradeSandboxEnvironmentRequest](UpgradeSandboxEnvironmentRequest.md) | | [Optional] |
6343
7719
 
6344
7720
  ### Return type