@boatdev/sdk 1.9.5 → 1.9.6

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 (148) hide show
  1. package/.openapi-generator/FILES +40 -0
  2. package/dist/apis/BoatApi.d.ts +263 -3
  3. package/dist/apis/BoatApi.js +662 -11
  4. package/dist/esm/apis/BoatApi.d.ts +263 -3
  5. package/dist/esm/apis/BoatApi.js +662 -11
  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/CredentialId.d.ts +36 -0
  19. package/dist/esm/models/CredentialId.js +54 -0
  20. package/dist/esm/models/CredentialProfile.d.ts +82 -0
  21. package/dist/esm/models/CredentialProfile.js +77 -0
  22. package/dist/esm/models/CredentialProfileDeletedResponse.d.ts +44 -0
  23. package/dist/esm/models/CredentialProfileDeletedResponse.js +51 -0
  24. package/dist/esm/models/CredentialProfileListResponse.d.ts +45 -0
  25. package/dist/esm/models/CredentialProfileListResponse.js +52 -0
  26. package/dist/esm/models/CredentialProfileOwner.d.ts +58 -0
  27. package/dist/esm/models/CredentialProfileOwner.js +62 -0
  28. package/dist/esm/models/CredentialProfileResponse.d.ts +51 -0
  29. package/dist/esm/models/CredentialProfileResponse.js +56 -0
  30. package/dist/esm/models/ProcessListResponse.d.ts +1 -1
  31. package/dist/esm/models/SandboxAiAccessResponse.d.ts +56 -0
  32. package/dist/esm/models/SandboxAiAccessResponse.js +59 -0
  33. package/dist/esm/models/SandboxAiUsage.d.ts +64 -0
  34. package/dist/esm/models/SandboxAiUsage.js +65 -0
  35. package/dist/esm/models/SandboxAiUsageResponse.d.ts +88 -0
  36. package/dist/esm/models/SandboxAiUsageResponse.js +81 -0
  37. package/dist/esm/models/SandboxEnvironment.d.ts +13 -1
  38. package/dist/esm/models/SandboxEnvironment.js +4 -0
  39. package/dist/esm/models/SetCredentialKeyRequest.d.ts +32 -0
  40. package/dist/esm/models/SetCredentialKeyRequest.js +43 -0
  41. package/dist/esm/models/SetCustomApiRequest.d.ts +38 -0
  42. package/dist/esm/models/SetCustomApiRequest.js +47 -0
  43. package/dist/esm/models/SetSandboxAiAccessRequest.d.ts +32 -0
  44. package/dist/esm/models/SetSandboxAiAccessRequest.js +43 -0
  45. package/dist/esm/models/UpdateAiProxyRequest.d.ts +32 -0
  46. package/dist/esm/models/UpdateAiProxyRequest.js +43 -0
  47. package/dist/esm/models/UpdateCredentialProfileRequest.d.ts +38 -0
  48. package/dist/esm/models/UpdateCredentialProfileRequest.js +43 -0
  49. package/dist/esm/models/UpdateSandboxEnvironmentRequest.d.ts +12 -0
  50. package/dist/esm/models/UpdateSandboxEnvironmentRequest.js +4 -0
  51. package/dist/esm/models/index.d.ts +20 -0
  52. package/dist/esm/models/index.js +20 -0
  53. package/dist/models/AccountAiUsageResponse.d.ts +83 -0
  54. package/dist/models/AccountAiUsageResponse.js +85 -0
  55. package/dist/models/AiProxySettings.d.ts +81 -0
  56. package/dist/models/AiProxySettings.js +83 -0
  57. package/dist/models/AiProxySettingsAllOfPricing.d.ts +38 -0
  58. package/dist/models/AiProxySettingsAllOfPricing.js +54 -0
  59. package/dist/models/AiUsageRow.d.ts +80 -0
  60. package/dist/models/AiUsageRow.js +82 -0
  61. package/dist/models/AiUsageTotals.d.ts +62 -0
  62. package/dist/models/AiUsageTotals.js +70 -0
  63. package/dist/models/CreateCredentialProfileRequest.d.ts +44 -0
  64. package/dist/models/CreateCredentialProfileRequest.js +54 -0
  65. package/dist/models/CredentialId.d.ts +36 -0
  66. package/dist/models/CredentialId.js +62 -0
  67. package/dist/models/CredentialProfile.d.ts +82 -0
  68. package/dist/models/CredentialProfile.js +84 -0
  69. package/dist/models/CredentialProfileDeletedResponse.d.ts +44 -0
  70. package/dist/models/CredentialProfileDeletedResponse.js +58 -0
  71. package/dist/models/CredentialProfileListResponse.d.ts +45 -0
  72. package/dist/models/CredentialProfileListResponse.js +59 -0
  73. package/dist/models/CredentialProfileOwner.d.ts +58 -0
  74. package/dist/models/CredentialProfileOwner.js +70 -0
  75. package/dist/models/CredentialProfileResponse.d.ts +51 -0
  76. package/dist/models/CredentialProfileResponse.js +63 -0
  77. package/dist/models/ProcessListResponse.d.ts +1 -1
  78. package/dist/models/SandboxAiAccessResponse.d.ts +56 -0
  79. package/dist/models/SandboxAiAccessResponse.js +66 -0
  80. package/dist/models/SandboxAiUsage.d.ts +64 -0
  81. package/dist/models/SandboxAiUsage.js +72 -0
  82. package/dist/models/SandboxAiUsageResponse.d.ts +88 -0
  83. package/dist/models/SandboxAiUsageResponse.js +88 -0
  84. package/dist/models/SandboxEnvironment.d.ts +13 -1
  85. package/dist/models/SandboxEnvironment.js +4 -0
  86. package/dist/models/SetCredentialKeyRequest.d.ts +32 -0
  87. package/dist/models/SetCredentialKeyRequest.js +50 -0
  88. package/dist/models/SetCustomApiRequest.d.ts +38 -0
  89. package/dist/models/SetCustomApiRequest.js +54 -0
  90. package/dist/models/SetSandboxAiAccessRequest.d.ts +32 -0
  91. package/dist/models/SetSandboxAiAccessRequest.js +50 -0
  92. package/dist/models/UpdateAiProxyRequest.d.ts +32 -0
  93. package/dist/models/UpdateAiProxyRequest.js +50 -0
  94. package/dist/models/UpdateCredentialProfileRequest.d.ts +38 -0
  95. package/dist/models/UpdateCredentialProfileRequest.js +50 -0
  96. package/dist/models/UpdateSandboxEnvironmentRequest.d.ts +12 -0
  97. package/dist/models/UpdateSandboxEnvironmentRequest.js +4 -0
  98. package/dist/models/index.d.ts +20 -0
  99. package/dist/models/index.js +20 -0
  100. package/docs/AccountAiUsageResponse.md +48 -0
  101. package/docs/AiProxySettings.md +48 -0
  102. package/docs/AiProxySettingsAllOfPricing.md +34 -0
  103. package/docs/AiUsageRow.md +48 -0
  104. package/docs/AiUsageTotals.md +43 -0
  105. package/docs/BoatApi.md +1285 -234
  106. package/docs/CreateCredentialProfileRequest.md +36 -0
  107. package/docs/CredentialId.md +31 -0
  108. package/docs/CredentialProfile.md +49 -0
  109. package/docs/CredentialProfileDeletedResponse.md +36 -0
  110. package/docs/CredentialProfileListResponse.md +36 -0
  111. package/docs/CredentialProfileOwner.md +38 -0
  112. package/docs/CredentialProfileResponse.md +38 -0
  113. package/docs/SandboxAiAccessResponse.md +40 -0
  114. package/docs/SandboxAiUsage.md +42 -0
  115. package/docs/SandboxAiUsageResponse.md +50 -0
  116. package/docs/SandboxEnvironment.md +4 -0
  117. package/docs/SetCredentialKeyRequest.md +32 -0
  118. package/docs/SetCustomApiRequest.md +34 -0
  119. package/docs/SetSandboxAiAccessRequest.md +32 -0
  120. package/docs/UpdateAiProxyRequest.md +32 -0
  121. package/docs/UpdateCredentialProfileRequest.md +34 -0
  122. package/docs/UpdateSandboxEnvironmentRequest.md +4 -0
  123. package/package.json +1 -1
  124. package/src/apis/BoatApi.ts +1013 -13
  125. package/src/models/AccountAiUsageResponse.ts +160 -0
  126. package/src/models/AiProxySettings.ts +146 -0
  127. package/src/models/AiProxySettingsAllOfPricing.ts +75 -0
  128. package/src/models/AiUsageRow.ts +138 -0
  129. package/src/models/AiUsageTotals.ts +111 -0
  130. package/src/models/CreateCredentialProfileRequest.ts +82 -0
  131. package/src/models/CredentialId.ts +64 -0
  132. package/src/models/CredentialProfile.ts +153 -0
  133. package/src/models/CredentialProfileDeletedResponse.ts +84 -0
  134. package/src/models/CredentialProfileListResponse.ts +92 -0
  135. package/src/models/CredentialProfileOwner.ts +104 -0
  136. package/src/models/CredentialProfileResponse.ts +101 -0
  137. package/src/models/ProcessListResponse.ts +1 -1
  138. package/src/models/SandboxAiAccessResponse.ts +102 -0
  139. package/src/models/SandboxAiUsage.ts +126 -0
  140. package/src/models/SandboxAiUsageResponse.ts +162 -0
  141. package/src/models/SandboxEnvironment.ts +17 -1
  142. package/src/models/SetCredentialKeyRequest.ts +66 -0
  143. package/src/models/SetCustomApiRequest.ts +75 -0
  144. package/src/models/SetSandboxAiAccessRequest.ts +66 -0
  145. package/src/models/UpdateAiProxyRequest.ts +66 -0
  146. package/src/models/UpdateCredentialProfileRequest.ts +73 -0
  147. package/src/models/UpdateSandboxEnvironmentRequest.ts +16 -0
  148. package/src/models/index.ts +20 -0
package/docs/BoatApi.md CHANGED
@@ -15,12 +15,16 @@ All URIs are relative to *https://boat.dev/api/v1*
15
15
  | [**commandStatus**](BoatApi.md#commandstatus) | **GET** /sandboxes/{sandboxId}/commands/{processId} | Get detached command status and logs |
16
16
  | [**conversations**](BoatApi.md#conversations) | **GET** /sandboxes/{sandboxId}/conversations | List boat conversations |
17
17
  | [**create**](BoatApi.md#create) | **POST** /sandboxes | Create sandbox |
18
+ | [**createCredentialProfile**](BoatApi.md#createcredentialprofileoperation) | **POST** /credential-profiles | Create a credential profile |
18
19
  | [**createDownloadUrl**](BoatApi.md#createdownloadurl) | **POST** /sandboxes/{sandboxId}/files/download-url | Get a download URL for a sandbox file |
19
20
  | [**createEnvironment**](BoatApi.md#createenvironment) | **POST** /environments | Create a sandbox environment |
20
21
  | [**createScopedApiKey**](BoatApi.md#createscopedapikeyoperation) | **POST** /api-keys/scoped | Create a scoped API key |
21
22
  | [**createSnapshotShare**](BoatApi.md#createsnapshotshare) | **POST** /named-snapshots/{name}/shares | Share a named snapshot |
22
23
  | [**createUploadUrl**](BoatApi.md#createuploadurl) | **POST** /sandboxes/{sandboxId}/files/upload-url | Get an upload URL for a sandbox file |
23
24
  | [**createWebhook**](BoatApi.md#createwebhook) | **POST** /webhooks | Create webhook |
25
+ | [**deleteCredentialProfile**](BoatApi.md#deletecredentialprofile) | **DELETE** /credential-profiles/{profile} | Delete a credential profile |
26
+ | [**deleteCredentialProfileCustomApi**](BoatApi.md#deletecredentialprofilecustomapi) | **DELETE** /credential-profiles/{profile}/custom-apis/{name} | Remove a custom API |
27
+ | [**deleteCredentialProfileKey**](BoatApi.md#deletecredentialprofilekey) | **DELETE** /credential-profiles/{profile}/keys/{credential} | Remove a credential profile credential |
24
28
  | [**deleteEnvironment**](BoatApi.md#deleteenvironment) | **DELETE** /environments/{environmentId} | Delete a sandbox environment |
25
29
  | [**deleteEnvironmentRepo**](BoatApi.md#deleteenvironmentrepo) | **DELETE** /environments/{environmentId}/repos/{repositoryId} | Remove a repository from an environment |
26
30
  | [**deleteEnvironmentSecretFile**](BoatApi.md#deleteenvironmentsecretfile) | **DELETE** /environments/{environmentId}/secret-files | Remove one secret file |
@@ -36,11 +40,14 @@ All URIs are relative to *https://boat.dev/api/v1*
36
40
  | [**events**](BoatApi.md#events) | **GET** /sandboxes/{sandboxId}/events | List boat events |
37
41
  | [**fork**](BoatApi.md#forkoperation) | **POST** /sandboxes/{sandboxId}/fork | Fork sandbox |
38
42
  | [**get**](BoatApi.md#get) | **GET** /sandboxes/{sandboxId} | Get sandbox |
43
+ | [**getAiProxy**](BoatApi.md#getaiproxy) | **GET** /ai-proxy | Get AI credentials proxy |
44
+ | [**getAiUsage**](BoatApi.md#getaiusage) | **GET** /ai-usage | Get AI usage |
39
45
  | [**getCommand**](BoatApi.md#getcommand) | **GET** /sandboxes/{sandboxId}/command-history/{commandId} | Get one command from the history |
40
46
  | [**getDataRetention**](BoatApi.md#getdataretention) | **GET** /account/data-retention | Get account data-retention policy |
41
47
  | [**getDeletionOperation**](BoatApi.md#getdeletionoperation) | **GET** /deletion-operations/{operationId} | Get deletion operation |
42
48
  | [**getLatestSandboxSnapshot**](BoatApi.md#getlatestsandboxsnapshot) | **GET** /sandboxes/{sandboxId}/snapshots/latest | Get latest boat snapshot |
43
49
  | [**getNamedSnapshot**](BoatApi.md#getnamedsnapshot) | **GET** /named-snapshots/{name} | Get a named snapshot |
50
+ | [**getSandboxAiUsage**](BoatApi.md#getsandboxaiusage) | **GET** /sandboxes/{sandboxId}/ai-usage | Get sandbox AI usage |
44
51
  | [**getSnapshotDownload**](BoatApi.md#getsnapshotdownload) | **GET** /snapshots/{snapshotId}/download | Get snapshot download |
45
52
  | [**getSnapshotFile**](BoatApi.md#getsnapshotfile) | **GET** /snapshots/{snapshotId}/files | Download a file or folder from a snapshot |
46
53
  | [**getSnapshotTree**](BoatApi.md#getsnapshottree) | **GET** /snapshots/{snapshotId}/tree | Get snapshot file tree |
@@ -50,6 +57,7 @@ All URIs are relative to *https://boat.dev/api/v1*
50
57
  | [**hostPort**](BoatApi.md#hostportoperation) | **POST** /sandboxes/{sandboxId}/host | Expose a sandbox port on a public HTTPS URL |
51
58
  | [**interrupt**](BoatApi.md#interrupt) | **POST** /sandboxes/{sandboxId}/interrupt | Interrupt running work |
52
59
  | [**limits**](BoatApi.md#limits) | **GET** /limits | Get Boat limits |
60
+ | [**listCredentialProfiles**](BoatApi.md#listcredentialprofiles) | **GET** /credential-profiles | List credential profiles |
53
61
  | [**listNamedSnapshots**](BoatApi.md#listnamedsnapshots) | **GET** /named-snapshots | List named snapshots |
54
62
  | [**listOrganizations**](BoatApi.md#listorganizations) | **GET** /orgs | List organizations |
55
63
  | [**listSandboxSnapshots**](BoatApi.md#listsandboxsnapshots) | **GET** /sandboxes/{sandboxId}/snapshots | List boat snapshots |
@@ -73,8 +81,11 @@ All URIs are relative to *https://boat.dev/api/v1*
73
81
  | [**secrets**](BoatApi.md#secrets) | **GET** /secrets | Get Boat secrets setup |
74
82
  | [**selectRepo**](BoatApi.md#selectrepo) | **POST** /repos | Select repository for sandboxes |
75
83
  | [**setActiveOrganization**](BoatApi.md#setactiveorganization) | **PATCH** /orgs/active | Set the active organization |
84
+ | [**setCredentialProfileCustomApi**](BoatApi.md#setcredentialprofilecustomapi) | **PUT** /credential-profiles/{profile}/custom-apis/{name} | Set a custom API |
85
+ | [**setCredentialProfileKey**](BoatApi.md#setcredentialprofilekey) | **PUT** /credential-profiles/{profile}/keys/{credential} | Set a credential profile API key |
76
86
  | [**setEnvironmentSecretFile**](BoatApi.md#setenvironmentsecretfileoperation) | **PUT** /environments/{environmentId}/secret-files | Write one secret file |
77
87
  | [**setEnvironmentVar**](BoatApi.md#setenvironmentvaroperation) | **PUT** /environments/{environmentId}/vars/{key} | Set one environment variable |
88
+ | [**setSandboxAiAccess**](BoatApi.md#setsandboxaiaccessoperation) | **PUT** /sandboxes/{sandboxId}/ai-access | Block or unblock sandbox AI access |
78
89
  | [**setTelemetry**](BoatApi.md#settelemetry) | **PUT** /telemetry | Set OpenTelemetry export |
79
90
  | [**share**](BoatApi.md#share) | **POST** /sandboxes/{sandboxId}/share | Share sandbox with the organization |
80
91
  | [**sshKey**](BoatApi.md#sshkeyoperation) | **POST** /sandboxes/{sandboxId}/sshkey | Configure sandbox SSH key |
@@ -82,6 +93,8 @@ All URIs are relative to *https://boat.dev/api/v1*
82
93
  | [**stop**](BoatApi.md#stopoperation) | **POST** /sandboxes/{sandboxId}/stop | Stop and archive sandbox |
83
94
  | [**stopCommand**](BoatApi.md#stopcommand) | **DELETE** /sandboxes/{sandboxId}/commands/{processId} | Stop a detached command |
84
95
  | [**update**](BoatApi.md#update) | **PATCH** /sandboxes/{sandboxId} | Update sandbox |
96
+ | [**updateAiProxy**](BoatApi.md#updateaiproxyoperation) | **PUT** /ai-proxy | Turn the AI credentials proxy on or off |
97
+ | [**updateCredentialProfile**](BoatApi.md#updatecredentialprofileoperation) | **PUT** /credential-profiles/{profile} | Update a credential profile |
85
98
  | [**updateDataRetention**](BoatApi.md#updatedataretention) | **PATCH** /account/data-retention | Update account data-retention policy |
86
99
  | [**updateEnvironment**](BoatApi.md#updateenvironment) | **PUT** /environments/{environmentId} | Update a sandbox environment |
87
100
  | [**updateSecrets**](BoatApi.md#updatesecrets) | **POST** /secrets | Update Boat secrets setup |
@@ -94,7 +107,7 @@ All URIs are relative to *https://boat.dev/api/v1*
94
107
 
95
108
  ## addEnvironmentRepo
96
109
 
97
- > EnvironmentItemChangeResponse addEnvironmentRepo(environmentId, addEnvironmentRepoRequest)
110
+ > EnvironmentItemChangeResponse addEnvironmentRepo(environmentId, addEnvironmentRepoRequest, org)
98
111
 
99
112
  Add a repository to an environment
100
113
 
@@ -122,6 +135,8 @@ async function example() {
122
135
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
123
136
  // AddEnvironmentRepoRequest
124
137
  addEnvironmentRepoRequest: ...,
138
+ // 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)
139
+ org: org_example,
125
140
  } satisfies AddEnvironmentRepoOperationRequest;
126
141
 
127
142
  try {
@@ -143,6 +158,7 @@ example().catch(console.error);
143
158
  |------------- | ------------- | ------------- | -------------|
144
159
  | **environmentId** | `string` | | [Defaults to `undefined`] |
145
160
  | **addEnvironmentRepoRequest** | [AddEnvironmentRepoRequest](AddEnvironmentRepoRequest.md) | | |
161
+ | **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
162
 
147
163
  ### Return type
148
164
 
@@ -907,7 +923,7 @@ async function example() {
907
923
  const body = {
908
924
  // 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
925
  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)
926
+ // 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
927
  org: org_example,
912
928
  // string | Same as the `org` query parameter. Query wins when both are set. (optional)
913
929
  xBoatOrg: xBoatOrg_example,
@@ -933,7 +949,7 @@ example().catch(console.error);
933
949
  | Name | Type | Description | Notes |
934
950
  |------------- | ------------- | ------------- | -------------|
935
951
  | **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`] |
952
+ | **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
953
  | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
938
954
  | **createSandboxRequest** | [CreateSandboxRequest](CreateSandboxRequest.md) | | [Optional] |
939
955
 
@@ -964,6 +980,81 @@ example().catch(console.error);
964
980
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
965
981
 
966
982
 
983
+ ## createCredentialProfile
984
+
985
+ > CredentialProfileResponse createCredentialProfile(createCredentialProfileRequest)
986
+
987
+ Create a credential profile
988
+
989
+ 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`.
990
+
991
+ ### Example
992
+
993
+ ```ts
994
+ import {
995
+ Configuration,
996
+ BoatApi,
997
+ } from '@boatdev/sdk';
998
+ import type { CreateCredentialProfileOperationRequest } from '@boatdev/sdk';
999
+
1000
+ async function example() {
1001
+ console.log("🚀 Testing @boatdev/sdk SDK...");
1002
+ const config = new Configuration({
1003
+ // Configure HTTP bearer authorization: BoatBearerAuth
1004
+ accessToken: "YOUR BEARER TOKEN",
1005
+ });
1006
+ const api = new BoatApi(config);
1007
+
1008
+ const body = {
1009
+ // CreateCredentialProfileRequest
1010
+ createCredentialProfileRequest: {"name":"work","copyFrom":"default"},
1011
+ } satisfies CreateCredentialProfileOperationRequest;
1012
+
1013
+ try {
1014
+ const data = await api.createCredentialProfile(body);
1015
+ console.log(data);
1016
+ } catch (error) {
1017
+ console.error(error);
1018
+ }
1019
+ }
1020
+
1021
+ // Run the test
1022
+ example().catch(console.error);
1023
+ ```
1024
+
1025
+ ### Parameters
1026
+
1027
+
1028
+ | Name | Type | Description | Notes |
1029
+ |------------- | ------------- | ------------- | -------------|
1030
+ | **createCredentialProfileRequest** | [CreateCredentialProfileRequest](CreateCredentialProfileRequest.md) | | |
1031
+
1032
+ ### Return type
1033
+
1034
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1035
+
1036
+ ### Authorization
1037
+
1038
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
1039
+
1040
+ ### HTTP request headers
1041
+
1042
+ - **Content-Type**: `application/json`
1043
+ - **Accept**: `application/json`
1044
+
1045
+
1046
+ ### HTTP response details
1047
+ | Status code | Description | Response headers |
1048
+ |-------------|-------------|------------------|
1049
+ | **201** | Profile created. | - |
1050
+ | **400** | Invalid request body or parameters. | - |
1051
+ | **401** | Missing or invalid bearer token. | - |
1052
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1053
+ | **409** | Request conflicts with current account or sandbox state. | - |
1054
+
1055
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1056
+
1057
+
967
1058
  ## createDownloadUrl
968
1059
 
969
1060
  > FileUrlResponse createDownloadUrl(sandboxId, fileUrlRequest)
@@ -1044,7 +1135,7 @@ example().catch(console.error);
1044
1135
 
1045
1136
  ## createEnvironment
1046
1137
 
1047
- > SandboxEnvironmentListResponse createEnvironment(createSandboxEnvironmentRequest)
1138
+ > SandboxEnvironmentListResponse createEnvironment(createSandboxEnvironmentRequest, org)
1048
1139
 
1049
1140
  Create a sandbox environment
1050
1141
 
@@ -1070,6 +1161,8 @@ async function example() {
1070
1161
  const body = {
1071
1162
  // CreateSandboxEnvironmentRequest
1072
1163
  createSandboxEnvironmentRequest: ...,
1164
+ // 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)
1165
+ org: org_example,
1073
1166
  } satisfies CreateEnvironmentRequest;
1074
1167
 
1075
1168
  try {
@@ -1090,6 +1183,7 @@ example().catch(console.error);
1090
1183
  | Name | Type | Description | Notes |
1091
1184
  |------------- | ------------- | ------------- | -------------|
1092
1185
  | **createSandboxEnvironmentRequest** | [CreateSandboxEnvironmentRequest](CreateSandboxEnvironmentRequest.md) | | |
1186
+ | **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
1187
 
1094
1188
  ### Return type
1095
1189
 
@@ -1416,13 +1510,13 @@ example().catch(console.error);
1416
1510
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1417
1511
 
1418
1512
 
1419
- ## deleteEnvironment
1513
+ ## deleteCredentialProfile
1420
1514
 
1421
- > SandboxEnvironmentResponse deleteEnvironment(environmentId)
1515
+ > CredentialProfileDeletedResponse deleteCredentialProfile(profile)
1422
1516
 
1423
- Delete a sandbox environment
1517
+ Delete a credential profile
1424
1518
 
1425
- Soft-deletes an environment. The default environment cannot be deleted, and at least one environment is always kept.
1519
+ 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`.
1426
1520
 
1427
1521
  ### Example
1428
1522
 
@@ -1431,7 +1525,7 @@ import {
1431
1525
  Configuration,
1432
1526
  BoatApi,
1433
1527
  } from '@boatdev/sdk';
1434
- import type { DeleteEnvironmentRequest } from '@boatdev/sdk';
1528
+ import type { DeleteCredentialProfileRequest } from '@boatdev/sdk';
1435
1529
 
1436
1530
  async function example() {
1437
1531
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1442,12 +1536,12 @@ async function example() {
1442
1536
  const api = new BoatApi(config);
1443
1537
 
1444
1538
  const body = {
1445
- // string | Environment id returned by `GET /environments`.
1446
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1447
- } satisfies DeleteEnvironmentRequest;
1539
+ // string | Profile id or name.
1540
+ profile: profile_example,
1541
+ } satisfies DeleteCredentialProfileRequest;
1448
1542
 
1449
1543
  try {
1450
- const data = await api.deleteEnvironment(body);
1544
+ const data = await api.deleteCredentialProfile(body);
1451
1545
  console.log(data);
1452
1546
  } catch (error) {
1453
1547
  console.error(error);
@@ -1463,11 +1557,11 @@ example().catch(console.error);
1463
1557
 
1464
1558
  | Name | Type | Description | Notes |
1465
1559
  |------------- | ------------- | ------------- | -------------|
1466
- | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
1560
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1467
1561
 
1468
1562
  ### Return type
1469
1563
 
1470
- [**SandboxEnvironmentResponse**](SandboxEnvironmentResponse.md)
1564
+ [**CredentialProfileDeletedResponse**](CredentialProfileDeletedResponse.md)
1471
1565
 
1472
1566
  ### Authorization
1473
1567
 
@@ -1482,21 +1576,22 @@ example().catch(console.error);
1482
1576
  ### HTTP response details
1483
1577
  | Status code | Description | Response headers |
1484
1578
  |-------------|-------------|------------------|
1485
- | **200** | Environment soft-deleted. | - |
1579
+ | **200** | Profile deleted. | - |
1486
1580
  | **401** | Missing or invalid bearer token. | - |
1581
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1487
1582
  | **404** | Resource not found. | - |
1488
1583
  | **409** | Request conflicts with current account or sandbox state. | - |
1489
1584
 
1490
1585
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1491
1586
 
1492
1587
 
1493
- ## deleteEnvironmentRepo
1588
+ ## deleteCredentialProfileCustomApi
1494
1589
 
1495
- > EnvironmentItemChangeResponse deleteEnvironmentRepo(environmentId, repositoryId)
1590
+ > CredentialProfileResponse deleteCredentialProfileCustomApi(profile, name)
1496
1591
 
1497
- Remove a repository from an environment
1592
+ Remove a custom API
1498
1593
 
1499
- Removes one repository from the environment\'s selection. Mints a new immutable version.
1594
+ Removes one custom API from the profile. Needs an API key with `account.admin`.
1500
1595
 
1501
1596
  ### Example
1502
1597
 
@@ -1505,7 +1600,7 @@ import {
1505
1600
  Configuration,
1506
1601
  BoatApi,
1507
1602
  } from '@boatdev/sdk';
1508
- import type { DeleteEnvironmentRepoRequest } from '@boatdev/sdk';
1603
+ import type { DeleteCredentialProfileCustomApiRequest } from '@boatdev/sdk';
1509
1604
 
1510
1605
  async function example() {
1511
1606
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1516,14 +1611,14 @@ async function example() {
1516
1611
  const api = new BoatApi(config);
1517
1612
 
1518
1613
  const body = {
1519
- // string
1520
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1521
- // string | The repository `databaseId`.
1522
- repositoryId: repositoryId_example,
1523
- } satisfies DeleteEnvironmentRepoRequest;
1614
+ // string | Profile id or name.
1615
+ profile: profile_example,
1616
+ // 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.
1617
+ name: name_example,
1618
+ } satisfies DeleteCredentialProfileCustomApiRequest;
1524
1619
 
1525
1620
  try {
1526
- const data = await api.deleteEnvironmentRepo(body);
1621
+ const data = await api.deleteCredentialProfileCustomApi(body);
1527
1622
  console.log(data);
1528
1623
  } catch (error) {
1529
1624
  console.error(error);
@@ -1539,12 +1634,12 @@ example().catch(console.error);
1539
1634
 
1540
1635
  | Name | Type | Description | Notes |
1541
1636
  |------------- | ------------- | ------------- | -------------|
1542
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1543
- | **repositoryId** | `string` | The repository `databaseId`. | [Defaults to `undefined`] |
1637
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1638
+ | **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`] |
1544
1639
 
1545
1640
  ### Return type
1546
1641
 
1547
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1642
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1548
1643
 
1549
1644
  ### Authorization
1550
1645
 
@@ -1559,20 +1654,21 @@ example().catch(console.error);
1559
1654
  ### HTTP response details
1560
1655
  | Status code | Description | Response headers |
1561
1656
  |-------------|-------------|------------------|
1562
- | **200** | New version minted. | - |
1657
+ | **200** | The updated profile. | - |
1563
1658
  | **401** | Missing or invalid bearer token. | - |
1659
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1564
1660
  | **404** | Resource not found. | - |
1565
1661
 
1566
1662
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1567
1663
 
1568
1664
 
1569
- ## deleteEnvironmentSecretFile
1665
+ ## deleteCredentialProfileKey
1570
1666
 
1571
- > EnvironmentItemChangeResponse deleteEnvironmentSecretFile(path, environmentId)
1667
+ > CredentialProfileResponse deleteCredentialProfileKey(profile, credential)
1572
1668
 
1573
- Remove one secret file
1669
+ Remove a credential profile credential
1574
1670
 
1575
- Removes the secret file at `path`. Mints a new immutable version.
1671
+ Removes one credential, an API key or a sign-in. Needs an API key with `account.admin`.
1576
1672
 
1577
1673
  ### Example
1578
1674
 
@@ -1581,7 +1677,7 @@ import {
1581
1677
  Configuration,
1582
1678
  BoatApi,
1583
1679
  } from '@boatdev/sdk';
1584
- import type { DeleteEnvironmentSecretFileRequest } from '@boatdev/sdk';
1680
+ import type { DeleteCredentialProfileKeyRequest } from '@boatdev/sdk';
1585
1681
 
1586
1682
  async function example() {
1587
1683
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1592,14 +1688,14 @@ async function example() {
1592
1688
  const api = new BoatApi(config);
1593
1689
 
1594
1690
  const body = {
1595
- // string
1596
- path: path_example,
1597
- // string
1598
- environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1599
- } satisfies DeleteEnvironmentSecretFileRequest;
1691
+ // string | Profile id or name.
1692
+ profile: profile_example,
1693
+ // CredentialId
1694
+ credential: ...,
1695
+ } satisfies DeleteCredentialProfileKeyRequest;
1600
1696
 
1601
1697
  try {
1602
- const data = await api.deleteEnvironmentSecretFile(body);
1698
+ const data = await api.deleteCredentialProfileKey(body);
1603
1699
  console.log(data);
1604
1700
  } catch (error) {
1605
1701
  console.error(error);
@@ -1615,12 +1711,12 @@ example().catch(console.error);
1615
1711
 
1616
1712
  | Name | Type | Description | Notes |
1617
1713
  |------------- | ------------- | ------------- | -------------|
1618
- | **path** | `string` | | [Defaults to `undefined`] |
1619
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1714
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
1715
+ | **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] |
1620
1716
 
1621
1717
  ### Return type
1622
1718
 
1623
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1719
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
1624
1720
 
1625
1721
  ### Authorization
1626
1722
 
@@ -1635,20 +1731,22 @@ example().catch(console.error);
1635
1731
  ### HTTP response details
1636
1732
  | Status code | Description | Response headers |
1637
1733
  |-------------|-------------|------------------|
1638
- | **200** | New version minted. | - |
1734
+ | **200** | The updated profile. | - |
1735
+ | **400** | Invalid request body or parameters. | - |
1639
1736
  | **401** | Missing or invalid bearer token. | - |
1737
+ | **403** | Authenticated token is not allowed to perform this action. | - |
1640
1738
  | **404** | Resource not found. | - |
1641
1739
 
1642
1740
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1643
1741
 
1644
1742
 
1645
- ## deleteEnvironmentVar
1743
+ ## deleteEnvironment
1646
1744
 
1647
- > EnvironmentItemChangeResponse deleteEnvironmentVar(environmentId, key)
1745
+ > SandboxEnvironmentResponse deleteEnvironment(environmentId, org)
1648
1746
 
1649
- Remove one environment variable
1747
+ Delete a sandbox environment
1650
1748
 
1651
- Removes a single variable. Mints a new immutable version.
1749
+ Soft-deletes an environment. The default environment cannot be deleted, and at least one environment is always kept.
1652
1750
 
1653
1751
  ### Example
1654
1752
 
@@ -1657,7 +1755,7 @@ import {
1657
1755
  Configuration,
1658
1756
  BoatApi,
1659
1757
  } from '@boatdev/sdk';
1660
- import type { DeleteEnvironmentVarRequest } from '@boatdev/sdk';
1758
+ import type { DeleteEnvironmentRequest } from '@boatdev/sdk';
1661
1759
 
1662
1760
  async function example() {
1663
1761
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1668,14 +1766,14 @@ async function example() {
1668
1766
  const api = new BoatApi(config);
1669
1767
 
1670
1768
  const body = {
1671
- // string
1769
+ // string | Environment id returned by `GET /environments`.
1672
1770
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1673
- // string | Environment variable name.
1674
- key: key_example,
1675
- } satisfies DeleteEnvironmentVarRequest;
1771
+ // 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)
1772
+ org: org_example,
1773
+ } satisfies DeleteEnvironmentRequest;
1676
1774
 
1677
1775
  try {
1678
- const data = await api.deleteEnvironmentVar(body);
1776
+ const data = await api.deleteEnvironment(body);
1679
1777
  console.log(data);
1680
1778
  } catch (error) {
1681
1779
  console.error(error);
@@ -1691,12 +1789,12 @@ example().catch(console.error);
1691
1789
 
1692
1790
  | Name | Type | Description | Notes |
1693
1791
  |------------- | ------------- | ------------- | -------------|
1694
- | **environmentId** | `string` | | [Defaults to `undefined`] |
1695
- | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
1792
+ | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
1793
+ | **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`] |
1696
1794
 
1697
1795
  ### Return type
1698
1796
 
1699
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1797
+ [**SandboxEnvironmentResponse**](SandboxEnvironmentResponse.md)
1700
1798
 
1701
1799
  ### Authorization
1702
1800
 
@@ -1711,20 +1809,21 @@ example().catch(console.error);
1711
1809
  ### HTTP response details
1712
1810
  | Status code | Description | Response headers |
1713
1811
  |-------------|-------------|------------------|
1714
- | **200** | New version minted. | - |
1812
+ | **200** | Environment soft-deleted. | - |
1715
1813
  | **401** | Missing or invalid bearer token. | - |
1716
1814
  | **404** | Resource not found. | - |
1815
+ | **409** | Request conflicts with current account or sandbox state. | - |
1717
1816
 
1718
1817
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1719
1818
 
1720
1819
 
1721
- ## deleteNamedSnapshot
1820
+ ## deleteEnvironmentRepo
1722
1821
 
1723
- > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
1822
+ > EnvironmentItemChangeResponse deleteEnvironmentRepo(environmentId, repositoryId, org)
1724
1823
 
1725
- Remove a named snapshot
1824
+ Remove a repository from an environment
1726
1825
 
1727
- Remove a named snapshot and release its storage (`boat snapshot rm <name>` in the CLI). Sandboxes already deployed from it are unaffected.
1826
+ Removes one repository from the environment\'s selection. Mints a new immutable version.
1728
1827
 
1729
1828
  ### Example
1730
1829
 
@@ -1733,7 +1832,7 @@ import {
1733
1832
  Configuration,
1734
1833
  BoatApi,
1735
1834
  } from '@boatdev/sdk';
1736
- import type { DeleteNamedSnapshotRequest } from '@boatdev/sdk';
1835
+ import type { DeleteEnvironmentRepoRequest } from '@boatdev/sdk';
1737
1836
 
1738
1837
  async function example() {
1739
1838
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1745,11 +1844,15 @@ async function example() {
1745
1844
 
1746
1845
  const body = {
1747
1846
  // string
1748
- name: name_example,
1749
- } satisfies DeleteNamedSnapshotRequest;
1847
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1848
+ // string | The repository `databaseId`.
1849
+ repositoryId: repositoryId_example,
1850
+ // 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)
1851
+ org: org_example,
1852
+ } satisfies DeleteEnvironmentRepoRequest;
1750
1853
 
1751
1854
  try {
1752
- const data = await api.deleteNamedSnapshot(body);
1855
+ const data = await api.deleteEnvironmentRepo(body);
1753
1856
  console.log(data);
1754
1857
  } catch (error) {
1755
1858
  console.error(error);
@@ -1765,11 +1868,13 @@ example().catch(console.error);
1765
1868
 
1766
1869
  | Name | Type | Description | Notes |
1767
1870
  |------------- | ------------- | ------------- | -------------|
1768
- | **name** | `string` | | [Defaults to `undefined`] |
1871
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
1872
+ | **repositoryId** | `string` | The repository `databaseId`. | [Defaults to `undefined`] |
1873
+ | **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
1874
 
1770
1875
  ### Return type
1771
1876
 
1772
- [**NamedSnapshotDeletedResponse**](NamedSnapshotDeletedResponse.md)
1877
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1773
1878
 
1774
1879
  ### Authorization
1775
1880
 
@@ -1784,21 +1889,20 @@ example().catch(console.error);
1784
1889
  ### HTTP response details
1785
1890
  | Status code | Description | Response headers |
1786
1891
  |-------------|-------------|------------------|
1787
- | **200** | Removed. | - |
1892
+ | **200** | New version minted. | - |
1788
1893
  | **401** | Missing or invalid bearer token. | - |
1789
1894
  | **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. | - |
1791
1895
 
1792
1896
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1793
1897
 
1794
1898
 
1795
- ## deleteSandbox
1899
+ ## deleteEnvironmentSecretFile
1796
1900
 
1797
- > DeletionOperationResponse deleteSandbox(xAsciiConfirmDelete, sandboxId)
1901
+ > EnvironmentItemChangeResponse deleteEnvironmentSecretFile(path, environmentId, org)
1798
1902
 
1799
- Permanently delete sandbox data
1903
+ Remove one secret file
1800
1904
 
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`.
1905
+ Removes the secret file at `path`. Mints a new immutable version.
1802
1906
 
1803
1907
  ### Example
1804
1908
 
@@ -1807,7 +1911,7 @@ import {
1807
1911
  Configuration,
1808
1912
  BoatApi,
1809
1913
  } from '@boatdev/sdk';
1810
- import type { DeleteSandboxRequest } from '@boatdev/sdk';
1914
+ import type { DeleteEnvironmentSecretFileRequest } from '@boatdev/sdk';
1811
1915
 
1812
1916
  async function example() {
1813
1917
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1818,14 +1922,16 @@ async function example() {
1818
1922
  const api = new BoatApi(config);
1819
1923
 
1820
1924
  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;
1925
+ // string
1926
+ path: path_example,
1927
+ // string
1928
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1929
+ // 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)
1930
+ org: org_example,
1931
+ } satisfies DeleteEnvironmentSecretFileRequest;
1826
1932
 
1827
1933
  try {
1828
- const data = await api.deleteSandbox(body);
1934
+ const data = await api.deleteEnvironmentSecretFile(body);
1829
1935
  console.log(data);
1830
1936
  } catch (error) {
1831
1937
  console.error(error);
@@ -1841,12 +1947,13 @@ example().catch(console.error);
1841
1947
 
1842
1948
  | Name | Type | Description | Notes |
1843
1949
  |------------- | ------------- | ------------- | -------------|
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`] |
1950
+ | **path** | `string` | | [Defaults to `undefined`] |
1951
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
1952
+ | **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
1953
 
1847
1954
  ### Return type
1848
1955
 
1849
- [**DeletionOperationResponse**](DeletionOperationResponse.md)
1956
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1850
1957
 
1851
1958
  ### Authorization
1852
1959
 
@@ -1861,22 +1968,20 @@ example().catch(console.error);
1861
1968
  ### HTTP response details
1862
1969
  | Status code | Description | Response headers |
1863
1970
  |-------------|-------------|------------------|
1864
- | **202** | Deletion confirmed and accepted for background processing. | - |
1971
+ | **200** | New version minted. | - |
1865
1972
  | **401** | Missing or invalid bearer token. | - |
1866
- | **403** | Authenticated token is not allowed to perform this action. | - |
1867
1973
  | **404** | Resource not found. | - |
1868
- | **409** | Request conflicts with current account or sandbox state. | - |
1869
1974
 
1870
1975
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1871
1976
 
1872
1977
 
1873
- ## deleteSandboxSnapshots
1978
+ ## deleteEnvironmentVar
1874
1979
 
1875
- > DeletionOperationListResponse deleteSandboxSnapshots(sandboxId, xAsciiConfirmDelete)
1980
+ > EnvironmentItemChangeResponse deleteEnvironmentVar(environmentId, key, org)
1876
1981
 
1877
- Permanently delete all snapshots of a sandbox
1982
+ Remove one environment variable
1878
1983
 
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.
1984
+ Removes a single variable. Mints a new immutable version.
1880
1985
 
1881
1986
  ### Example
1882
1987
 
@@ -1885,7 +1990,7 @@ import {
1885
1990
  Configuration,
1886
1991
  BoatApi,
1887
1992
  } from '@boatdev/sdk';
1888
- import type { DeleteSandboxSnapshotsRequest } from '@boatdev/sdk';
1993
+ import type { DeleteEnvironmentVarRequest } from '@boatdev/sdk';
1889
1994
 
1890
1995
  async function example() {
1891
1996
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1896,14 +2001,16 @@ async function example() {
1896
2001
  const api = new BoatApi(config);
1897
2002
 
1898
2003
  const body = {
1899
- // string | Public Sandbox id returned by create/list/get sandbox calls.
1900
- sandboxId: sandboxId_example,
1901
- // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
1902
- xAsciiConfirmDelete: xAsciiConfirmDelete_example,
1903
- } satisfies DeleteSandboxSnapshotsRequest;
2004
+ // string
2005
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
2006
+ // string | Environment variable name.
2007
+ key: key_example,
2008
+ // 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)
2009
+ org: org_example,
2010
+ } satisfies DeleteEnvironmentVarRequest;
1904
2011
 
1905
2012
  try {
1906
- const data = await api.deleteSandboxSnapshots(body);
2013
+ const data = await api.deleteEnvironmentVar(body);
1907
2014
  console.log(data);
1908
2015
  } catch (error) {
1909
2016
  console.error(error);
@@ -1919,12 +2026,13 @@ example().catch(console.error);
1919
2026
 
1920
2027
  | Name | Type | Description | Notes |
1921
2028
  |------------- | ------------- | ------------- | -------------|
1922
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
1923
- | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2029
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
2030
+ | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
2031
+ | **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`] |
1924
2032
 
1925
2033
  ### Return type
1926
2034
 
1927
- [**DeletionOperationListResponse**](DeletionOperationListResponse.md)
2035
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
1928
2036
 
1929
2037
  ### Authorization
1930
2038
 
@@ -1939,22 +2047,20 @@ example().catch(console.error);
1939
2047
  ### HTTP response details
1940
2048
  | Status code | Description | Response headers |
1941
2049
  |-------------|-------------|------------------|
1942
- | **202** | One accepted deletion operation per snapshot. | - |
2050
+ | **200** | New version minted. | - |
1943
2051
  | **401** | Missing or invalid bearer token. | - |
1944
- | **403** | Authenticated token is not allowed to perform this action. | - |
1945
2052
  | **404** | Resource not found. | - |
1946
- | **409** | Request conflicts with current account or sandbox state. | - |
1947
2053
 
1948
2054
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1949
2055
 
1950
2056
 
1951
- ## deleteSnapshot
2057
+ ## deleteNamedSnapshot
1952
2058
 
1953
- > DeletionOperationResponse deleteSnapshot(snapshotId, xAsciiConfirmDelete)
2059
+ > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
1954
2060
 
1955
- Permanently delete snapshot data
2061
+ Remove a named snapshot
1956
2062
 
1957
- Accept irreversible deletion of an unpinned snapshot owned by the authenticated account. Any such snapshot is accepted: it disappears from lists, restores and forks immediately, and its stored data is purged in the background once nothing still reads it (see the operation\'s `stage`). `409` only means `X-Ascii-Confirm-Delete` is missing or wrong.
2063
+ Remove a named snapshot and release its storage (`boat snapshot rm <name>` in the CLI). Sandboxes already deployed from it are unaffected.
1958
2064
 
1959
2065
  ### Example
1960
2066
 
@@ -1963,7 +2069,7 @@ import {
1963
2069
  Configuration,
1964
2070
  BoatApi,
1965
2071
  } from '@boatdev/sdk';
1966
- import type { DeleteSnapshotRequest } from '@boatdev/sdk';
2072
+ import type { DeleteNamedSnapshotRequest } from '@boatdev/sdk';
1967
2073
 
1968
2074
  async function example() {
1969
2075
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -1974,14 +2080,12 @@ async function example() {
1974
2080
  const api = new BoatApi(config);
1975
2081
 
1976
2082
  const body = {
1977
- // string | Snapshot id returned by the snapshot list/latest calls.
1978
- snapshotId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
1979
- // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
1980
- xAsciiConfirmDelete: xAsciiConfirmDelete_example,
1981
- } satisfies DeleteSnapshotRequest;
2083
+ // string
2084
+ name: name_example,
2085
+ } satisfies DeleteNamedSnapshotRequest;
1982
2086
 
1983
2087
  try {
1984
- const data = await api.deleteSnapshot(body);
2088
+ const data = await api.deleteNamedSnapshot(body);
1985
2089
  console.log(data);
1986
2090
  } catch (error) {
1987
2091
  console.error(error);
@@ -1997,12 +2101,11 @@ example().catch(console.error);
1997
2101
 
1998
2102
  | Name | Type | Description | Notes |
1999
2103
  |------------- | ------------- | ------------- | -------------|
2000
- | **snapshotId** | `string` | Snapshot id returned by the snapshot list/latest calls. | [Defaults to `undefined`] |
2001
- | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2104
+ | **name** | `string` | | [Defaults to `undefined`] |
2002
2105
 
2003
2106
  ### Return type
2004
2107
 
2005
- [**DeletionOperationResponse**](DeletionOperationResponse.md)
2108
+ [**NamedSnapshotDeletedResponse**](NamedSnapshotDeletedResponse.md)
2006
2109
 
2007
2110
  ### Authorization
2008
2111
 
@@ -2017,16 +2120,249 @@ example().catch(console.error);
2017
2120
  ### HTTP response details
2018
2121
  | Status code | Description | Response headers |
2019
2122
  |-------------|-------------|------------------|
2020
- | **202** | Deletion confirmed and accepted for background processing. | - |
2123
+ | **200** | Removed. | - |
2021
2124
  | **401** | Missing or invalid bearer token. | - |
2022
- | **403** | Authenticated token is not allowed to perform this action. | - |
2023
2125
  | **404** | Resource not found. | - |
2024
- | **409** | Request conflicts with current account or sandbox state. | - |
2126
+ | **409** | `save_in_progress`: a save under this name is still running. Wait for it to settle before removing it. | - |
2025
2127
 
2026
2128
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2027
2129
 
2028
2130
 
2029
- ## deleteTelemetry
2131
+ ## deleteSandbox
2132
+
2133
+ > DeletionOperationResponse deleteSandbox(xAsciiConfirmDelete, sandboxId)
2134
+
2135
+ Permanently delete sandbox data
2136
+
2137
+ 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`.
2138
+
2139
+ ### Example
2140
+
2141
+ ```ts
2142
+ import {
2143
+ Configuration,
2144
+ BoatApi,
2145
+ } from '@boatdev/sdk';
2146
+ import type { DeleteSandboxRequest } from '@boatdev/sdk';
2147
+
2148
+ async function example() {
2149
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2150
+ const config = new Configuration({
2151
+ // Configure HTTP bearer authorization: BoatBearerAuth
2152
+ accessToken: "YOUR BEARER TOKEN",
2153
+ });
2154
+ const api = new BoatApi(config);
2155
+
2156
+ const body = {
2157
+ // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
2158
+ xAsciiConfirmDelete: xAsciiConfirmDelete_example,
2159
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
2160
+ sandboxId: sandboxId_example,
2161
+ } satisfies DeleteSandboxRequest;
2162
+
2163
+ try {
2164
+ const data = await api.deleteSandbox(body);
2165
+ console.log(data);
2166
+ } catch (error) {
2167
+ console.error(error);
2168
+ }
2169
+ }
2170
+
2171
+ // Run the test
2172
+ example().catch(console.error);
2173
+ ```
2174
+
2175
+ ### Parameters
2176
+
2177
+
2178
+ | Name | Type | Description | Notes |
2179
+ |------------- | ------------- | ------------- | -------------|
2180
+ | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2181
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2182
+
2183
+ ### Return type
2184
+
2185
+ [**DeletionOperationResponse**](DeletionOperationResponse.md)
2186
+
2187
+ ### Authorization
2188
+
2189
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2190
+
2191
+ ### HTTP request headers
2192
+
2193
+ - **Content-Type**: Not defined
2194
+ - **Accept**: `application/json`
2195
+
2196
+
2197
+ ### HTTP response details
2198
+ | Status code | Description | Response headers |
2199
+ |-------------|-------------|------------------|
2200
+ | **202** | Deletion confirmed and accepted for background processing. | - |
2201
+ | **401** | Missing or invalid bearer token. | - |
2202
+ | **403** | Authenticated token is not allowed to perform this action. | - |
2203
+ | **404** | Resource not found. | - |
2204
+ | **409** | Request conflicts with current account or sandbox state. | - |
2205
+
2206
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2207
+
2208
+
2209
+ ## deleteSandboxSnapshots
2210
+
2211
+ > DeletionOperationListResponse deleteSandboxSnapshots(sandboxId, xAsciiConfirmDelete)
2212
+
2213
+ Permanently delete all snapshots of a sandbox
2214
+
2215
+ 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.
2216
+
2217
+ ### Example
2218
+
2219
+ ```ts
2220
+ import {
2221
+ Configuration,
2222
+ BoatApi,
2223
+ } from '@boatdev/sdk';
2224
+ import type { DeleteSandboxSnapshotsRequest } from '@boatdev/sdk';
2225
+
2226
+ async function example() {
2227
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2228
+ const config = new Configuration({
2229
+ // Configure HTTP bearer authorization: BoatBearerAuth
2230
+ accessToken: "YOUR BEARER TOKEN",
2231
+ });
2232
+ const api = new BoatApi(config);
2233
+
2234
+ const body = {
2235
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
2236
+ sandboxId: sandboxId_example,
2237
+ // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
2238
+ xAsciiConfirmDelete: xAsciiConfirmDelete_example,
2239
+ } satisfies DeleteSandboxSnapshotsRequest;
2240
+
2241
+ try {
2242
+ const data = await api.deleteSandboxSnapshots(body);
2243
+ console.log(data);
2244
+ } catch (error) {
2245
+ console.error(error);
2246
+ }
2247
+ }
2248
+
2249
+ // Run the test
2250
+ example().catch(console.error);
2251
+ ```
2252
+
2253
+ ### Parameters
2254
+
2255
+
2256
+ | Name | Type | Description | Notes |
2257
+ |------------- | ------------- | ------------- | -------------|
2258
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2259
+ | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2260
+
2261
+ ### Return type
2262
+
2263
+ [**DeletionOperationListResponse**](DeletionOperationListResponse.md)
2264
+
2265
+ ### Authorization
2266
+
2267
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2268
+
2269
+ ### HTTP request headers
2270
+
2271
+ - **Content-Type**: Not defined
2272
+ - **Accept**: `application/json`
2273
+
2274
+
2275
+ ### HTTP response details
2276
+ | Status code | Description | Response headers |
2277
+ |-------------|-------------|------------------|
2278
+ | **202** | One accepted deletion operation per snapshot. | - |
2279
+ | **401** | Missing or invalid bearer token. | - |
2280
+ | **403** | Authenticated token is not allowed to perform this action. | - |
2281
+ | **404** | Resource not found. | - |
2282
+ | **409** | Request conflicts with current account or sandbox state. | - |
2283
+
2284
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2285
+
2286
+
2287
+ ## deleteSnapshot
2288
+
2289
+ > DeletionOperationResponse deleteSnapshot(snapshotId, xAsciiConfirmDelete)
2290
+
2291
+ Permanently delete snapshot data
2292
+
2293
+ Accept irreversible deletion of an unpinned snapshot owned by the authenticated account. Any such snapshot is accepted: it disappears from lists, restores and forks immediately, and its stored data is purged in the background once nothing still reads it (see the operation\'s `stage`). `409` only means `X-Ascii-Confirm-Delete` is missing or wrong.
2294
+
2295
+ ### Example
2296
+
2297
+ ```ts
2298
+ import {
2299
+ Configuration,
2300
+ BoatApi,
2301
+ } from '@boatdev/sdk';
2302
+ import type { DeleteSnapshotRequest } from '@boatdev/sdk';
2303
+
2304
+ async function example() {
2305
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2306
+ const config = new Configuration({
2307
+ // Configure HTTP bearer authorization: BoatBearerAuth
2308
+ accessToken: "YOUR BEARER TOKEN",
2309
+ });
2310
+ const api = new BoatApi(config);
2311
+
2312
+ const body = {
2313
+ // string | Snapshot id returned by the snapshot list/latest calls.
2314
+ snapshotId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
2315
+ // string | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion.
2316
+ xAsciiConfirmDelete: xAsciiConfirmDelete_example,
2317
+ } satisfies DeleteSnapshotRequest;
2318
+
2319
+ try {
2320
+ const data = await api.deleteSnapshot(body);
2321
+ console.log(data);
2322
+ } catch (error) {
2323
+ console.error(error);
2324
+ }
2325
+ }
2326
+
2327
+ // Run the test
2328
+ example().catch(console.error);
2329
+ ```
2330
+
2331
+ ### Parameters
2332
+
2333
+
2334
+ | Name | Type | Description | Notes |
2335
+ |------------- | ------------- | ------------- | -------------|
2336
+ | **snapshotId** | `string` | Snapshot id returned by the snapshot list/latest calls. | [Defaults to `undefined`] |
2337
+ | **xAsciiConfirmDelete** | `string` | Must exactly equal the target `sandboxId` or `snapshotId`. A missing or mismatched value returns `409` without accepting deletion. | [Defaults to `undefined`] |
2338
+
2339
+ ### Return type
2340
+
2341
+ [**DeletionOperationResponse**](DeletionOperationResponse.md)
2342
+
2343
+ ### Authorization
2344
+
2345
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2346
+
2347
+ ### HTTP request headers
2348
+
2349
+ - **Content-Type**: Not defined
2350
+ - **Accept**: `application/json`
2351
+
2352
+
2353
+ ### HTTP response details
2354
+ | Status code | Description | Response headers |
2355
+ |-------------|-------------|------------------|
2356
+ | **202** | Deletion confirmed and accepted for background processing. | - |
2357
+ | **401** | Missing or invalid bearer token. | - |
2358
+ | **403** | Authenticated token is not allowed to perform this action. | - |
2359
+ | **404** | Resource not found. | - |
2360
+ | **409** | Request conflicts with current account or sandbox state. | - |
2361
+
2362
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2363
+
2364
+
2365
+ ## deleteTelemetry
2030
2366
 
2031
2367
  > TelemetryResponse deleteTelemetry()
2032
2368
 
@@ -2250,7 +2586,7 @@ example().catch(console.error);
2250
2586
 
2251
2587
  ## environments
2252
2588
 
2253
- > SandboxEnvironmentListResponse environments()
2589
+ > SandboxEnvironmentListResponse environments(org)
2254
2590
 
2255
2591
  List Sandbox environments
2256
2592
 
@@ -2273,8 +2609,13 @@ async function example() {
2273
2609
  });
2274
2610
  const api = new BoatApi(config);
2275
2611
 
2612
+ const body = {
2613
+ // 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)
2614
+ org: org_example,
2615
+ } satisfies EnvironmentsRequest;
2616
+
2276
2617
  try {
2277
- const data = await api.environments();
2618
+ const data = await api.environments(body);
2278
2619
  console.log(data);
2279
2620
  } catch (error) {
2280
2621
  console.error(error);
@@ -2287,7 +2628,10 @@ example().catch(console.error);
2287
2628
 
2288
2629
  ### Parameters
2289
2630
 
2290
- This endpoint does not need any parameter.
2631
+
2632
+ | Name | Type | Description | Notes |
2633
+ |------------- | ------------- | ------------- | -------------|
2634
+ | **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
2635
 
2292
2636
  ### Return type
2293
2637
 
@@ -2557,6 +2901,162 @@ example().catch(console.error);
2557
2901
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2558
2902
 
2559
2903
 
2904
+ ## getAiProxy
2905
+
2906
+ > AiProxySettings getAiProxy(org, xBoatOrg)
2907
+
2908
+ Get AI credentials proxy
2909
+
2910
+ 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`.
2911
+
2912
+ ### Example
2913
+
2914
+ ```ts
2915
+ import {
2916
+ Configuration,
2917
+ BoatApi,
2918
+ } from '@boatdev/sdk';
2919
+ import type { GetAiProxyRequest } from '@boatdev/sdk';
2920
+
2921
+ async function example() {
2922
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2923
+ const config = new Configuration({
2924
+ // Configure HTTP bearer authorization: BoatBearerAuth
2925
+ accessToken: "YOUR BEARER TOKEN",
2926
+ });
2927
+ const api = new BoatApi(config);
2928
+
2929
+ const body = {
2930
+ // 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)
2931
+ org: org_example,
2932
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
2933
+ xBoatOrg: xBoatOrg_example,
2934
+ } satisfies GetAiProxyRequest;
2935
+
2936
+ try {
2937
+ const data = await api.getAiProxy(body);
2938
+ console.log(data);
2939
+ } catch (error) {
2940
+ console.error(error);
2941
+ }
2942
+ }
2943
+
2944
+ // Run the test
2945
+ example().catch(console.error);
2946
+ ```
2947
+
2948
+ ### Parameters
2949
+
2950
+
2951
+ | Name | Type | Description | Notes |
2952
+ |------------- | ------------- | ------------- | -------------|
2953
+ | **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`] |
2954
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
2955
+
2956
+ ### Return type
2957
+
2958
+ [**AiProxySettings**](AiProxySettings.md)
2959
+
2960
+ ### Authorization
2961
+
2962
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2963
+
2964
+ ### HTTP request headers
2965
+
2966
+ - **Content-Type**: Not defined
2967
+ - **Accept**: `application/json`
2968
+
2969
+
2970
+ ### HTTP response details
2971
+ | Status code | Description | Response headers |
2972
+ |-------------|-------------|------------------|
2973
+ | **200** | The switch and its price. | - |
2974
+ | **401** | Missing or invalid bearer token. | - |
2975
+
2976
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2977
+
2978
+
2979
+ ## getAiUsage
2980
+
2981
+ > AccountAiUsageResponse getAiUsage(days, profile, org, xBoatOrg)
2982
+
2983
+ Get AI usage
2984
+
2985
+ 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`.
2986
+
2987
+ ### Example
2988
+
2989
+ ```ts
2990
+ import {
2991
+ Configuration,
2992
+ BoatApi,
2993
+ } from '@boatdev/sdk';
2994
+ import type { GetAiUsageRequest } from '@boatdev/sdk';
2995
+
2996
+ async function example() {
2997
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2998
+ const config = new Configuration({
2999
+ // Configure HTTP bearer authorization: BoatBearerAuth
3000
+ accessToken: "YOUR BEARER TOKEN",
3001
+ });
3002
+ const api = new BoatApi(config);
3003
+
3004
+ const body = {
3005
+ // number | Days of history, today included. (optional)
3006
+ days: 56,
3007
+ // string | A credential profile id. Counts that profile\'s requests instead of a wallet\'s. (optional)
3008
+ profile: profile_example,
3009
+ // 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)
3010
+ org: org_example,
3011
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
3012
+ xBoatOrg: xBoatOrg_example,
3013
+ } satisfies GetAiUsageRequest;
3014
+
3015
+ try {
3016
+ const data = await api.getAiUsage(body);
3017
+ console.log(data);
3018
+ } catch (error) {
3019
+ console.error(error);
3020
+ }
3021
+ }
3022
+
3023
+ // Run the test
3024
+ example().catch(console.error);
3025
+ ```
3026
+
3027
+ ### Parameters
3028
+
3029
+
3030
+ | Name | Type | Description | Notes |
3031
+ |------------- | ------------- | ------------- | -------------|
3032
+ | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3033
+ | **profile** | `string` | A credential profile id. Counts that profile\'s requests instead of a wallet\'s. | [Optional] [Defaults to `undefined`] |
3034
+ | **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`] |
3035
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
3036
+
3037
+ ### Return type
3038
+
3039
+ [**AccountAiUsageResponse**](AccountAiUsageResponse.md)
3040
+
3041
+ ### Authorization
3042
+
3043
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3044
+
3045
+ ### HTTP request headers
3046
+
3047
+ - **Content-Type**: Not defined
3048
+ - **Accept**: `application/json`
3049
+
3050
+
3051
+ ### HTTP response details
3052
+ | Status code | Description | Response headers |
3053
+ |-------------|-------------|------------------|
3054
+ | **200** | The usage. | - |
3055
+ | **401** | Missing or invalid bearer token. | - |
3056
+
3057
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3058
+
3059
+
2560
3060
  ## getCommand
2561
3061
 
2562
3062
  > CommandInfoResponse getCommand(sandboxId, commandId)
@@ -2913,6 +3413,82 @@ example().catch(console.error);
2913
3413
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2914
3414
 
2915
3415
 
3416
+ ## getSandboxAiUsage
3417
+
3418
+ > SandboxAiUsageResponse getSandboxAiUsage(sandboxId, days)
3419
+
3420
+ Get sandbox AI usage
3421
+
3422
+ 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.
3423
+
3424
+ ### Example
3425
+
3426
+ ```ts
3427
+ import {
3428
+ Configuration,
3429
+ BoatApi,
3430
+ } from '@boatdev/sdk';
3431
+ import type { GetSandboxAiUsageRequest } from '@boatdev/sdk';
3432
+
3433
+ async function example() {
3434
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3435
+ const config = new Configuration({
3436
+ // Configure HTTP bearer authorization: BoatBearerAuth
3437
+ accessToken: "YOUR BEARER TOKEN",
3438
+ });
3439
+ const api = new BoatApi(config);
3440
+
3441
+ const body = {
3442
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3443
+ sandboxId: sandboxId_example,
3444
+ // number | Days of history, today included. (optional)
3445
+ days: 56,
3446
+ } satisfies GetSandboxAiUsageRequest;
3447
+
3448
+ try {
3449
+ const data = await api.getSandboxAiUsage(body);
3450
+ console.log(data);
3451
+ } catch (error) {
3452
+ console.error(error);
3453
+ }
3454
+ }
3455
+
3456
+ // Run the test
3457
+ example().catch(console.error);
3458
+ ```
3459
+
3460
+ ### Parameters
3461
+
3462
+
3463
+ | Name | Type | Description | Notes |
3464
+ |------------- | ------------- | ------------- | -------------|
3465
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3466
+ | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3467
+
3468
+ ### Return type
3469
+
3470
+ [**SandboxAiUsageResponse**](SandboxAiUsageResponse.md)
3471
+
3472
+ ### Authorization
3473
+
3474
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3475
+
3476
+ ### HTTP request headers
3477
+
3478
+ - **Content-Type**: Not defined
3479
+ - **Accept**: `application/json`
3480
+
3481
+
3482
+ ### HTTP response details
3483
+ | Status code | Description | Response headers |
3484
+ |-------------|-------------|------------------|
3485
+ | **200** | The usage. | - |
3486
+ | **401** | Missing or invalid bearer token. | - |
3487
+ | **404** | Resource not found. | - |
3488
+
3489
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3490
+
3491
+
2916
3492
  ## getSnapshotDownload
2917
3493
 
2918
3494
  > SnapshotDownloadResponse getSnapshotDownload(snapshotId)
@@ -3460,7 +4036,87 @@ async function example() {
3460
4036
  } satisfies InterruptRequest;
3461
4037
 
3462
4038
  try {
3463
- const data = await api.interrupt(body);
4039
+ const data = await api.interrupt(body);
4040
+ console.log(data);
4041
+ } catch (error) {
4042
+ console.error(error);
4043
+ }
4044
+ }
4045
+
4046
+ // Run the test
4047
+ example().catch(console.error);
4048
+ ```
4049
+
4050
+ ### Parameters
4051
+
4052
+
4053
+ | Name | Type | Description | Notes |
4054
+ |------------- | ------------- | ------------- | -------------|
4055
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4056
+ | **conversation** | `string` | Interrupt only this conversation id. Omit to interrupt the whole sandbox. | [Optional] [Defaults to `undefined`] |
4057
+
4058
+ ### Return type
4059
+
4060
+ [**SandboxActionResponse**](SandboxActionResponse.md)
4061
+
4062
+ ### Authorization
4063
+
4064
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
4065
+
4066
+ ### HTTP request headers
4067
+
4068
+ - **Content-Type**: Not defined
4069
+ - **Accept**: `application/json`
4070
+
4071
+
4072
+ ### HTTP response details
4073
+ | Status code | Description | Response headers |
4074
+ |-------------|-------------|------------------|
4075
+ | **200** | Interrupt requested. | - |
4076
+ | **401** | Missing or invalid bearer token. | - |
4077
+ | **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. | - |
4078
+ | **404** | Resource not found. | - |
4079
+ | **409** | Request conflicts with current account or sandbox state. | - |
4080
+
4081
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4082
+
4083
+
4084
+ ## limits
4085
+
4086
+ > LimitsResponse limits(org, xBoatOrg, teamId)
4087
+
4088
+ Get Boat limits
4089
+
4090
+ 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.
4091
+
4092
+ ### Example
4093
+
4094
+ ```ts
4095
+ import {
4096
+ Configuration,
4097
+ BoatApi,
4098
+ } from '@boatdev/sdk';
4099
+ import type { LimitsRequest } from '@boatdev/sdk';
4100
+
4101
+ async function example() {
4102
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4103
+ const config = new Configuration({
4104
+ // Configure HTTP bearer authorization: BoatBearerAuth
4105
+ accessToken: "YOUR BEARER TOKEN",
4106
+ });
4107
+ const api = new BoatApi(config);
4108
+
4109
+ const body = {
4110
+ // 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)
4111
+ org: org_example,
4112
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
4113
+ xBoatOrg: xBoatOrg_example,
4114
+ // string | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. (optional)
4115
+ teamId: teamId_example,
4116
+ } satisfies LimitsRequest;
4117
+
4118
+ try {
4119
+ const data = await api.limits(body);
3464
4120
  console.log(data);
3465
4121
  } catch (error) {
3466
4122
  console.error(error);
@@ -3476,12 +4132,13 @@ example().catch(console.error);
3476
4132
 
3477
4133
  | Name | Type | Description | Notes |
3478
4134
  |------------- | ------------- | ------------- | -------------|
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`] |
4135
+ | **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`] |
4136
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
4137
+ | **teamId** | `string` | Legacy alias for `org`. Takes precedence over `org` / `X-Boat-Org` when set. | [Optional] [Defaults to `undefined`] |
3481
4138
 
3482
4139
  ### Return type
3483
4140
 
3484
- [**SandboxActionResponse**](SandboxActionResponse.md)
4141
+ [**LimitsResponse**](LimitsResponse.md)
3485
4142
 
3486
4143
  ### Authorization
3487
4144
 
@@ -3496,22 +4153,19 @@ example().catch(console.error);
3496
4153
  ### HTTP response details
3497
4154
  | Status code | Description | Response headers |
3498
4155
  |-------------|-------------|------------------|
3499
- | **200** | Interrupt requested. | - |
4156
+ | **200** | Current creation and concurrent-boat limits. | - |
3500
4157
  | **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. | - |
3502
- | **404** | Resource not found. | - |
3503
- | **409** | Request conflicts with current account or sandbox state. | - |
3504
4158
 
3505
4159
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3506
4160
 
3507
4161
 
3508
- ## limits
4162
+ ## listCredentialProfiles
3509
4163
 
3510
- > LimitsResponse limits(org, xBoatOrg, teamId)
4164
+ > CredentialProfileListResponse listCredentialProfiles()
3511
4165
 
3512
- Get Boat limits
4166
+ List credential profiles
3513
4167
 
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.
4168
+ 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
4169
 
3516
4170
  ### Example
3517
4171
 
@@ -3520,7 +4174,7 @@ import {
3520
4174
  Configuration,
3521
4175
  BoatApi,
3522
4176
  } from '@boatdev/sdk';
3523
- import type { LimitsRequest } from '@boatdev/sdk';
4177
+ import type { ListCredentialProfilesRequest } from '@boatdev/sdk';
3524
4178
 
3525
4179
  async function example() {
3526
4180
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3530,17 +4184,8 @@ async function example() {
3530
4184
  });
3531
4185
  const api = new BoatApi(config);
3532
4186
 
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
4187
  try {
3543
- const data = await api.limits(body);
4188
+ const data = await api.listCredentialProfiles();
3544
4189
  console.log(data);
3545
4190
  } catch (error) {
3546
4191
  console.error(error);
@@ -3553,16 +4198,11 @@ example().catch(console.error);
3553
4198
 
3554
4199
  ### Parameters
3555
4200
 
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`] |
4201
+ This endpoint does not need any parameter.
3562
4202
 
3563
4203
  ### Return type
3564
4204
 
3565
- [**LimitsResponse**](LimitsResponse.md)
4205
+ [**CredentialProfileListResponse**](CredentialProfileListResponse.md)
3566
4206
 
3567
4207
  ### Authorization
3568
4208
 
@@ -3577,7 +4217,7 @@ example().catch(console.error);
3577
4217
  ### HTTP response details
3578
4218
  | Status code | Description | Response headers |
3579
4219
  |-------------|-------------|------------------|
3580
- | **200** | Current creation and concurrent-boat limits. | - |
4220
+ | **200** | The profiles. | - |
3581
4221
  | **401** | Missing or invalid bearer token. | - |
3582
4222
 
3583
4223
  [[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 +5584,7 @@ async function example() {
4944
5584
  const api = new BoatApi(config);
4945
5585
 
4946
5586
  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)
5587
+ // 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
5588
  org: org_example,
4949
5589
  // string | Same as the `org` query parameter. Query wins when both are set. (optional)
4950
5590
  xBoatOrg: xBoatOrg_example,
@@ -4975,7 +5615,7 @@ example().catch(console.error);
4975
5615
 
4976
5616
  | Name | Type | Description | Notes |
4977
5617
  |------------- | ------------- | ------------- | -------------|
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`] |
5618
+ | **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
5619
  | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
4980
5620
  | **limit** | `number` | Maximum items to return. | [Optional] [Defaults to `100`] |
4981
5621
  | **cursor** | `string` | Opaque pagination cursor returned as `pageInfo.nextCursor`. | [Optional] [Defaults to `undefined`] |
@@ -5036,7 +5676,221 @@ async function example() {
5036
5676
  } satisfies SaveNamedSnapshotRequest;
5037
5677
 
5038
5678
  try {
5039
- const data = await api.saveNamedSnapshot(body);
5679
+ const data = await api.saveNamedSnapshot(body);
5680
+ console.log(data);
5681
+ } catch (error) {
5682
+ console.error(error);
5683
+ }
5684
+ }
5685
+
5686
+ // Run the test
5687
+ example().catch(console.error);
5688
+ ```
5689
+
5690
+ ### Parameters
5691
+
5692
+
5693
+ | Name | Type | Description | Notes |
5694
+ |------------- | ------------- | ------------- | -------------|
5695
+ | **namedSnapshotSaveRequest** | [NamedSnapshotSaveRequest](NamedSnapshotSaveRequest.md) | | |
5696
+
5697
+ ### Return type
5698
+
5699
+ [**NamedSnapshotSavingResponse**](NamedSnapshotSavingResponse.md)
5700
+
5701
+ ### Authorization
5702
+
5703
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5704
+
5705
+ ### HTTP request headers
5706
+
5707
+ - **Content-Type**: `application/json`
5708
+ - **Accept**: `application/json`
5709
+
5710
+
5711
+ ### HTTP response details
5712
+ | Status code | Description | Response headers |
5713
+ |-------------|-------------|------------------|
5714
+ | **202** | Save accepted and running in the background. | - |
5715
+ | **400** | Invalid request body or parameters. | - |
5716
+ | **401** | Missing or invalid bearer token. | - |
5717
+ | **404** | Resource not found. | - |
5718
+ | **402** | `credit_required`: the wallet already keeps 10 or more named snapshots and has no credit left. Each named snapshot above the free 10 costs $1.70 a month, charged daily. Add credit or remove one. | - |
5719
+ | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
5720
+
5721
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5722
+
5723
+
5724
+ ## secrets
5725
+
5726
+ > SecretsResponse secrets()
5727
+
5728
+ Get Boat secrets setup
5729
+
5730
+ Returns the environment variables and secret files configured for sandboxes.
5731
+
5732
+ ### Example
5733
+
5734
+ ```ts
5735
+ import {
5736
+ Configuration,
5737
+ BoatApi,
5738
+ } from '@boatdev/sdk';
5739
+ import type { SecretsRequest } from '@boatdev/sdk';
5740
+
5741
+ async function example() {
5742
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5743
+ const config = new Configuration({
5744
+ // Configure HTTP bearer authorization: BoatBearerAuth
5745
+ accessToken: "YOUR BEARER TOKEN",
5746
+ });
5747
+ const api = new BoatApi(config);
5748
+
5749
+ try {
5750
+ const data = await api.secrets();
5751
+ console.log(data);
5752
+ } catch (error) {
5753
+ console.error(error);
5754
+ }
5755
+ }
5756
+
5757
+ // Run the test
5758
+ example().catch(console.error);
5759
+ ```
5760
+
5761
+ ### Parameters
5762
+
5763
+ This endpoint does not need any parameter.
5764
+
5765
+ ### Return type
5766
+
5767
+ [**SecretsResponse**](SecretsResponse.md)
5768
+
5769
+ ### Authorization
5770
+
5771
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5772
+
5773
+ ### HTTP request headers
5774
+
5775
+ - **Content-Type**: Not defined
5776
+ - **Accept**: `application/json`
5777
+
5778
+
5779
+ ### HTTP response details
5780
+ | Status code | Description | Response headers |
5781
+ |-------------|-------------|------------------|
5782
+ | **200** | Current secret setup metadata. | - |
5783
+ | **401** | Missing or invalid bearer token. | - |
5784
+
5785
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5786
+
5787
+
5788
+ ## selectRepo
5789
+
5790
+ > RepoSelectionResponse selectRepo(repoSelectionRequest)
5791
+
5792
+ Select repository for sandboxes
5793
+
5794
+ Idempotently selects one repository for the sandbox environment. Use `databaseId` from `GET /repos` as `repositoryId`; selecting an already-selected repository updates its `baseBranch`.
5795
+
5796
+ ### Example
5797
+
5798
+ ```ts
5799
+ import {
5800
+ Configuration,
5801
+ BoatApi,
5802
+ } from '@boatdev/sdk';
5803
+ import type { SelectRepoRequest } from '@boatdev/sdk';
5804
+
5805
+ async function example() {
5806
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5807
+ const config = new Configuration({
5808
+ // Configure HTTP bearer authorization: BoatBearerAuth
5809
+ accessToken: "YOUR BEARER TOKEN",
5810
+ });
5811
+ const api = new BoatApi(config);
5812
+
5813
+ const body = {
5814
+ // RepoSelectionRequest
5815
+ repoSelectionRequest: ...,
5816
+ } satisfies SelectRepoRequest;
5817
+
5818
+ try {
5819
+ const data = await api.selectRepo(body);
5820
+ console.log(data);
5821
+ } catch (error) {
5822
+ console.error(error);
5823
+ }
5824
+ }
5825
+
5826
+ // Run the test
5827
+ example().catch(console.error);
5828
+ ```
5829
+
5830
+ ### Parameters
5831
+
5832
+
5833
+ | Name | Type | Description | Notes |
5834
+ |------------- | ------------- | ------------- | -------------|
5835
+ | **repoSelectionRequest** | [RepoSelectionRequest](RepoSelectionRequest.md) | | |
5836
+
5837
+ ### Return type
5838
+
5839
+ [**RepoSelectionResponse**](RepoSelectionResponse.md)
5840
+
5841
+ ### Authorization
5842
+
5843
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5844
+
5845
+ ### HTTP request headers
5846
+
5847
+ - **Content-Type**: `application/json`
5848
+ - **Accept**: `application/json`
5849
+
5850
+
5851
+ ### HTTP response details
5852
+ | Status code | Description | Response headers |
5853
+ |-------------|-------------|------------------|
5854
+ | **200** | Updated repository selection. | - |
5855
+ | **400** | Invalid request body or parameters. | - |
5856
+ | **401** | Missing or invalid bearer token. | - |
5857
+ | **409** | Request conflicts with current account or sandbox state. | - |
5858
+
5859
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5860
+
5861
+
5862
+ ## setActiveOrganization
5863
+
5864
+ > ActiveOrgResponse setActiveOrganization(activeOrgUpdateRequest)
5865
+
5866
+ Set the active organization
5867
+
5868
+ Set the wallet new sandboxes bill when a request names none, for this account on every client: the API, the CLI (`boat org switch` sets the same value) and the dashboard. Pass an organization id or name you belong to, or `personal` (or `null`) for your own account. `GET /limits` follows it. Sandboxes already running keep the wallet they were created with; leaving or deleting the organization resets the account to personal.
5869
+
5870
+ ### Example
5871
+
5872
+ ```ts
5873
+ import {
5874
+ Configuration,
5875
+ BoatApi,
5876
+ } from '@boatdev/sdk';
5877
+ import type { SetActiveOrganizationRequest } from '@boatdev/sdk';
5878
+
5879
+ async function example() {
5880
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5881
+ const config = new Configuration({
5882
+ // Configure HTTP bearer authorization: BoatBearerAuth
5883
+ accessToken: "YOUR BEARER TOKEN",
5884
+ });
5885
+ const api = new BoatApi(config);
5886
+
5887
+ const body = {
5888
+ // ActiveOrgUpdateRequest
5889
+ activeOrgUpdateRequest: {"org":"acme"},
5890
+ } satisfies SetActiveOrganizationRequest;
5891
+
5892
+ try {
5893
+ const data = await api.setActiveOrganization(body);
5040
5894
  console.log(data);
5041
5895
  } catch (error) {
5042
5896
  console.error(error);
@@ -5052,11 +5906,11 @@ example().catch(console.error);
5052
5906
 
5053
5907
  | Name | Type | Description | Notes |
5054
5908
  |------------- | ------------- | ------------- | -------------|
5055
- | **namedSnapshotSaveRequest** | [NamedSnapshotSaveRequest](NamedSnapshotSaveRequest.md) | | |
5909
+ | **activeOrgUpdateRequest** | [ActiveOrgUpdateRequest](ActiveOrgUpdateRequest.md) | | |
5056
5910
 
5057
5911
  ### Return type
5058
5912
 
5059
- [**NamedSnapshotSavingResponse**](NamedSnapshotSavingResponse.md)
5913
+ [**ActiveOrgResponse**](ActiveOrgResponse.md)
5060
5914
 
5061
5915
  ### Authorization
5062
5916
 
@@ -5071,23 +5925,22 @@ example().catch(console.error);
5071
5925
  ### HTTP response details
5072
5926
  | Status code | Description | Response headers |
5073
5927
  |-------------|-------------|------------------|
5074
- | **202** | Save accepted and running in the background. | - |
5928
+ | **200** | The wallet now active. | - |
5075
5929
  | **400** | Invalid request body or parameters. | - |
5076
5930
  | **401** | Missing or invalid bearer token. | - |
5077
- | **404** | Resource not found. | - |
5078
- | **402** | `credit_required`: the wallet already keeps 10 or more named snapshots and has no credit left. Each named snapshot above the free 10 costs $1.70 a month, charged daily. Add credit or remove one. | - |
5079
- | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
5931
+ | **403** | `not_org_member`: no organization with that id or name that you belong to. | - |
5932
+ | **409** | `ambiguous_org`: several of your organizations share that name; pass the id. | - |
5080
5933
 
5081
5934
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5082
5935
 
5083
5936
 
5084
- ## secrets
5937
+ ## setCredentialProfileCustomApi
5085
5938
 
5086
- > SecretsResponse secrets()
5939
+ > CredentialProfileResponse setCredentialProfileCustomApi(profile, name, setCustomApiRequest)
5087
5940
 
5088
- Get Boat secrets setup
5941
+ Set a custom API
5089
5942
 
5090
- Returns the environment variables and secret files configured for sandboxes.
5943
+ Adds or replaces one custom API. The sandbox gets `<NAME>` and `<NAME>_BASE_URL`. Needs an API key with `account.admin`.
5091
5944
 
5092
5945
  ### Example
5093
5946
 
@@ -5096,7 +5949,7 @@ import {
5096
5949
  Configuration,
5097
5950
  BoatApi,
5098
5951
  } from '@boatdev/sdk';
5099
- import type { SecretsRequest } from '@boatdev/sdk';
5952
+ import type { SetCredentialProfileCustomApiRequest } from '@boatdev/sdk';
5100
5953
 
5101
5954
  async function example() {
5102
5955
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5106,8 +5959,17 @@ async function example() {
5106
5959
  });
5107
5960
  const api = new BoatApi(config);
5108
5961
 
5962
+ const body = {
5963
+ // string | Profile id or name.
5964
+ profile: profile_example,
5965
+ // 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.
5966
+ name: name_example,
5967
+ // SetCustomApiRequest
5968
+ setCustomApiRequest: {"value":"sk_live_123","baseUrl":"https://api.stripe.com/v1"},
5969
+ } satisfies SetCredentialProfileCustomApiRequest;
5970
+
5109
5971
  try {
5110
- const data = await api.secrets();
5972
+ const data = await api.setCredentialProfileCustomApi(body);
5111
5973
  console.log(data);
5112
5974
  } catch (error) {
5113
5975
  console.error(error);
@@ -5120,11 +5982,16 @@ example().catch(console.error);
5120
5982
 
5121
5983
  ### Parameters
5122
5984
 
5123
- This endpoint does not need any parameter.
5985
+
5986
+ | Name | Type | Description | Notes |
5987
+ |------------- | ------------- | ------------- | -------------|
5988
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
5989
+ | **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`] |
5990
+ | **setCustomApiRequest** | [SetCustomApiRequest](SetCustomApiRequest.md) | | |
5124
5991
 
5125
5992
  ### Return type
5126
5993
 
5127
- [**SecretsResponse**](SecretsResponse.md)
5994
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
5128
5995
 
5129
5996
  ### Authorization
5130
5997
 
@@ -5132,26 +5999,29 @@ This endpoint does not need any parameter.
5132
5999
 
5133
6000
  ### HTTP request headers
5134
6001
 
5135
- - **Content-Type**: Not defined
6002
+ - **Content-Type**: `application/json`
5136
6003
  - **Accept**: `application/json`
5137
6004
 
5138
6005
 
5139
6006
  ### HTTP response details
5140
6007
  | Status code | Description | Response headers |
5141
6008
  |-------------|-------------|------------------|
5142
- | **200** | Current secret setup metadata. | - |
6009
+ | **200** | The updated profile. | - |
6010
+ | **400** | Invalid request body or parameters. | - |
5143
6011
  | **401** | Missing or invalid bearer token. | - |
6012
+ | **403** | Authenticated token is not allowed to perform this action. | - |
6013
+ | **404** | Resource not found. | - |
5144
6014
 
5145
6015
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5146
6016
 
5147
6017
 
5148
- ## selectRepo
6018
+ ## setCredentialProfileKey
5149
6019
 
5150
- > RepoSelectionResponse selectRepo(repoSelectionRequest)
6020
+ > CredentialProfileResponse setCredentialProfileKey(profile, credential, setCredentialKeyRequest)
5151
6021
 
5152
- Select repository for sandboxes
6022
+ Set a credential profile API key
5153
6023
 
5154
- Idempotently selects one repository for the sandbox environment. Use `databaseId` from `GET /repos` as `repositoryId`; selecting an already-selected repository updates its `baseBranch`.
6024
+ 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`.
5155
6025
 
5156
6026
  ### Example
5157
6027
 
@@ -5160,7 +6030,7 @@ import {
5160
6030
  Configuration,
5161
6031
  BoatApi,
5162
6032
  } from '@boatdev/sdk';
5163
- import type { SelectRepoRequest } from '@boatdev/sdk';
6033
+ import type { SetCredentialProfileKeyRequest } from '@boatdev/sdk';
5164
6034
 
5165
6035
  async function example() {
5166
6036
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5171,12 +6041,16 @@ async function example() {
5171
6041
  const api = new BoatApi(config);
5172
6042
 
5173
6043
  const body = {
5174
- // RepoSelectionRequest
5175
- repoSelectionRequest: ...,
5176
- } satisfies SelectRepoRequest;
6044
+ // string | Profile id or name.
6045
+ profile: profile_example,
6046
+ // CredentialId
6047
+ credential: ...,
6048
+ // SetCredentialKeyRequest
6049
+ setCredentialKeyRequest: ...,
6050
+ } satisfies SetCredentialProfileKeyRequest;
5177
6051
 
5178
6052
  try {
5179
- const data = await api.selectRepo(body);
6053
+ const data = await api.setCredentialProfileKey(body);
5180
6054
  console.log(data);
5181
6055
  } catch (error) {
5182
6056
  console.error(error);
@@ -5192,11 +6066,13 @@ example().catch(console.error);
5192
6066
 
5193
6067
  | Name | Type | Description | Notes |
5194
6068
  |------------- | ------------- | ------------- | -------------|
5195
- | **repoSelectionRequest** | [RepoSelectionRequest](RepoSelectionRequest.md) | | |
6069
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
6070
+ | **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] |
6071
+ | **setCredentialKeyRequest** | [SetCredentialKeyRequest](SetCredentialKeyRequest.md) | | |
5196
6072
 
5197
6073
  ### Return type
5198
6074
 
5199
- [**RepoSelectionResponse**](RepoSelectionResponse.md)
6075
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
5200
6076
 
5201
6077
  ### Authorization
5202
6078
 
@@ -5211,21 +6087,22 @@ example().catch(console.error);
5211
6087
  ### HTTP response details
5212
6088
  | Status code | Description | Response headers |
5213
6089
  |-------------|-------------|------------------|
5214
- | **200** | Updated repository selection. | - |
6090
+ | **200** | The updated profile. | - |
5215
6091
  | **400** | Invalid request body or parameters. | - |
5216
6092
  | **401** | Missing or invalid bearer token. | - |
5217
- | **409** | Request conflicts with current account or sandbox state. | - |
6093
+ | **403** | Authenticated token is not allowed to perform this action. | - |
6094
+ | **404** | Resource not found. | - |
5218
6095
 
5219
6096
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5220
6097
 
5221
6098
 
5222
- ## setActiveOrganization
6099
+ ## setEnvironmentSecretFile
5223
6100
 
5224
- > ActiveOrgResponse setActiveOrganization(activeOrgUpdateRequest)
6101
+ > EnvironmentItemChangeResponse setEnvironmentSecretFile(environmentId, setEnvironmentSecretFileRequest, org)
5225
6102
 
5226
- Set the active organization
6103
+ Write one secret file
5227
6104
 
5228
- Set the wallet new sandboxes bill when a request names none, for this account on every client: the API, the CLI (`boat org switch` sets the same value) and the dashboard. Pass an organization id or name you belong to, or `personal` (or `null`) for your own account. `GET /limits` follows it. Sandboxes already running keep the wallet they were created with; leaving or deleting the organization resets the account to personal.
6105
+ Adds or replaces a single secret file by path. Mints a new immutable version.
5229
6106
 
5230
6107
  ### Example
5231
6108
 
@@ -5234,7 +6111,7 @@ import {
5234
6111
  Configuration,
5235
6112
  BoatApi,
5236
6113
  } from '@boatdev/sdk';
5237
- import type { SetActiveOrganizationRequest } from '@boatdev/sdk';
6114
+ import type { SetEnvironmentSecretFileOperationRequest } from '@boatdev/sdk';
5238
6115
 
5239
6116
  async function example() {
5240
6117
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5245,12 +6122,16 @@ async function example() {
5245
6122
  const api = new BoatApi(config);
5246
6123
 
5247
6124
  const body = {
5248
- // ActiveOrgUpdateRequest
5249
- activeOrgUpdateRequest: {"org":"acme"},
5250
- } satisfies SetActiveOrganizationRequest;
6125
+ // string
6126
+ environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
6127
+ // SetEnvironmentSecretFileRequest
6128
+ setEnvironmentSecretFileRequest: ...,
6129
+ // 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)
6130
+ org: org_example,
6131
+ } satisfies SetEnvironmentSecretFileOperationRequest;
5251
6132
 
5252
6133
  try {
5253
- const data = await api.setActiveOrganization(body);
6134
+ const data = await api.setEnvironmentSecretFile(body);
5254
6135
  console.log(data);
5255
6136
  } catch (error) {
5256
6137
  console.error(error);
@@ -5266,11 +6147,13 @@ example().catch(console.error);
5266
6147
 
5267
6148
  | Name | Type | Description | Notes |
5268
6149
  |------------- | ------------- | ------------- | -------------|
5269
- | **activeOrgUpdateRequest** | [ActiveOrgUpdateRequest](ActiveOrgUpdateRequest.md) | | |
6150
+ | **environmentId** | `string` | | [Defaults to `undefined`] |
6151
+ | **setEnvironmentSecretFileRequest** | [SetEnvironmentSecretFileRequest](SetEnvironmentSecretFileRequest.md) | | |
6152
+ | **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
6153
 
5271
6154
  ### Return type
5272
6155
 
5273
- [**ActiveOrgResponse**](ActiveOrgResponse.md)
6156
+ [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
5274
6157
 
5275
6158
  ### Authorization
5276
6159
 
@@ -5285,22 +6168,21 @@ example().catch(console.error);
5285
6168
  ### HTTP response details
5286
6169
  | Status code | Description | Response headers |
5287
6170
  |-------------|-------------|------------------|
5288
- | **200** | The wallet now active. | - |
6171
+ | **200** | New version minted. | - |
5289
6172
  | **400** | Invalid request body or parameters. | - |
5290
6173
  | **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. | - |
6174
+ | **404** | Resource not found. | - |
5293
6175
 
5294
6176
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5295
6177
 
5296
6178
 
5297
- ## setEnvironmentSecretFile
6179
+ ## setEnvironmentVar
5298
6180
 
5299
- > EnvironmentItemChangeResponse setEnvironmentSecretFile(environmentId, setEnvironmentSecretFileRequest)
6181
+ > EnvironmentItemChangeResponse setEnvironmentVar(environmentId, key, setEnvironmentVarRequest, org)
5300
6182
 
5301
- Write one secret file
6183
+ Set one environment variable
5302
6184
 
5303
- Adds or replaces a single secret file by path. Mints a new immutable version.
6185
+ Sets or replaces a single variable without reading or rewriting the rest. Mints a new immutable version.
5304
6186
 
5305
6187
  ### Example
5306
6188
 
@@ -5309,7 +6191,7 @@ import {
5309
6191
  Configuration,
5310
6192
  BoatApi,
5311
6193
  } from '@boatdev/sdk';
5312
- import type { SetEnvironmentSecretFileOperationRequest } from '@boatdev/sdk';
6194
+ import type { SetEnvironmentVarOperationRequest } from '@boatdev/sdk';
5313
6195
 
5314
6196
  async function example() {
5315
6197
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5322,12 +6204,16 @@ async function example() {
5322
6204
  const body = {
5323
6205
  // string
5324
6206
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
5325
- // SetEnvironmentSecretFileRequest
5326
- setEnvironmentSecretFileRequest: ...,
5327
- } satisfies SetEnvironmentSecretFileOperationRequest;
6207
+ // string | Environment variable name.
6208
+ key: key_example,
6209
+ // SetEnvironmentVarRequest
6210
+ setEnvironmentVarRequest: ...,
6211
+ // 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)
6212
+ org: org_example,
6213
+ } satisfies SetEnvironmentVarOperationRequest;
5328
6214
 
5329
6215
  try {
5330
- const data = await api.setEnvironmentSecretFile(body);
6216
+ const data = await api.setEnvironmentVar(body);
5331
6217
  console.log(data);
5332
6218
  } catch (error) {
5333
6219
  console.error(error);
@@ -5344,7 +6230,9 @@ example().catch(console.error);
5344
6230
  | Name | Type | Description | Notes |
5345
6231
  |------------- | ------------- | ------------- | -------------|
5346
6232
  | **environmentId** | `string` | | [Defaults to `undefined`] |
5347
- | **setEnvironmentSecretFileRequest** | [SetEnvironmentSecretFileRequest](SetEnvironmentSecretFileRequest.md) | | |
6233
+ | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
6234
+ | **setEnvironmentVarRequest** | [SetEnvironmentVarRequest](SetEnvironmentVarRequest.md) | | |
6235
+ | **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
6236
 
5349
6237
  ### Return type
5350
6238
 
@@ -5371,13 +6259,13 @@ example().catch(console.error);
5371
6259
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5372
6260
 
5373
6261
 
5374
- ## setEnvironmentVar
6262
+ ## setSandboxAiAccess
5375
6263
 
5376
- > EnvironmentItemChangeResponse setEnvironmentVar(environmentId, key, setEnvironmentVarRequest)
6264
+ > SandboxAiAccessResponse setSandboxAiAccess(sandboxId, setSandboxAiAccessRequest)
5377
6265
 
5378
- Set one environment variable
6266
+ Block or unblock sandbox AI access
5379
6267
 
5380
- Sets or replaces a single variable without reading or rewriting the rest. Mints a new immutable version.
6268
+ 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
6269
 
5382
6270
  ### Example
5383
6271
 
@@ -5386,7 +6274,7 @@ import {
5386
6274
  Configuration,
5387
6275
  BoatApi,
5388
6276
  } from '@boatdev/sdk';
5389
- import type { SetEnvironmentVarOperationRequest } from '@boatdev/sdk';
6277
+ import type { SetSandboxAiAccessOperationRequest } from '@boatdev/sdk';
5390
6278
 
5391
6279
  async function example() {
5392
6280
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -5397,16 +6285,14 @@ async function example() {
5397
6285
  const api = new BoatApi(config);
5398
6286
 
5399
6287
  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;
6288
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6289
+ sandboxId: sandboxId_example,
6290
+ // SetSandboxAiAccessRequest
6291
+ setSandboxAiAccessRequest: ...,
6292
+ } satisfies SetSandboxAiAccessOperationRequest;
5407
6293
 
5408
6294
  try {
5409
- const data = await api.setEnvironmentVar(body);
6295
+ const data = await api.setSandboxAiAccess(body);
5410
6296
  console.log(data);
5411
6297
  } catch (error) {
5412
6298
  console.error(error);
@@ -5422,13 +6308,12 @@ example().catch(console.error);
5422
6308
 
5423
6309
  | Name | Type | Description | Notes |
5424
6310
  |------------- | ------------- | ------------- | -------------|
5425
- | **environmentId** | `string` | | [Defaults to `undefined`] |
5426
- | **key** | `string` | Environment variable name. | [Defaults to `undefined`] |
5427
- | **setEnvironmentVarRequest** | [SetEnvironmentVarRequest](SetEnvironmentVarRequest.md) | | |
6311
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6312
+ | **setSandboxAiAccessRequest** | [SetSandboxAiAccessRequest](SetSandboxAiAccessRequest.md) | | |
5428
6313
 
5429
6314
  ### Return type
5430
6315
 
5431
- [**EnvironmentItemChangeResponse**](EnvironmentItemChangeResponse.md)
6316
+ [**SandboxAiAccessResponse**](SandboxAiAccessResponse.md)
5432
6317
 
5433
6318
  ### Authorization
5434
6319
 
@@ -5443,9 +6328,10 @@ example().catch(console.error);
5443
6328
  ### HTTP response details
5444
6329
  | Status code | Description | Response headers |
5445
6330
  |-------------|-------------|------------------|
5446
- | **200** | New version minted. | - |
6331
+ | **200** | The new state. | - |
5447
6332
  | **400** | Invalid request body or parameters. | - |
5448
6333
  | **401** | Missing or invalid bearer token. | - |
6334
+ | **403** | Authenticated token is not allowed to perform this action. | - |
5449
6335
  | **404** | Resource not found. | - |
5450
6336
 
5451
6337
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -5989,6 +6875,165 @@ example().catch(console.error);
5989
6875
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5990
6876
 
5991
6877
 
6878
+ ## updateAiProxy
6879
+
6880
+ > AiProxySettings updateAiProxy(updateAiProxyRequest, org, xBoatOrg)
6881
+
6882
+ Turn the AI credentials proxy on or off
6883
+
6884
+ 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`.
6885
+
6886
+ ### Example
6887
+
6888
+ ```ts
6889
+ import {
6890
+ Configuration,
6891
+ BoatApi,
6892
+ } from '@boatdev/sdk';
6893
+ import type { UpdateAiProxyOperationRequest } from '@boatdev/sdk';
6894
+
6895
+ async function example() {
6896
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6897
+ const config = new Configuration({
6898
+ // Configure HTTP bearer authorization: BoatBearerAuth
6899
+ accessToken: "YOUR BEARER TOKEN",
6900
+ });
6901
+ const api = new BoatApi(config);
6902
+
6903
+ const body = {
6904
+ // UpdateAiProxyRequest
6905
+ updateAiProxyRequest: ...,
6906
+ // 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)
6907
+ org: org_example,
6908
+ // string | Same as the `org` query parameter. Query wins when both are set. (optional)
6909
+ xBoatOrg: xBoatOrg_example,
6910
+ } satisfies UpdateAiProxyOperationRequest;
6911
+
6912
+ try {
6913
+ const data = await api.updateAiProxy(body);
6914
+ console.log(data);
6915
+ } catch (error) {
6916
+ console.error(error);
6917
+ }
6918
+ }
6919
+
6920
+ // Run the test
6921
+ example().catch(console.error);
6922
+ ```
6923
+
6924
+ ### Parameters
6925
+
6926
+
6927
+ | Name | Type | Description | Notes |
6928
+ |------------- | ------------- | ------------- | -------------|
6929
+ | **updateAiProxyRequest** | [UpdateAiProxyRequest](UpdateAiProxyRequest.md) | | |
6930
+ | **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`] |
6931
+ | **xBoatOrg** | `string` | Same as the `org` query parameter. Query wins when both are set. | [Optional] [Defaults to `undefined`] |
6932
+
6933
+ ### Return type
6934
+
6935
+ [**AiProxySettings**](AiProxySettings.md)
6936
+
6937
+ ### Authorization
6938
+
6939
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6940
+
6941
+ ### HTTP request headers
6942
+
6943
+ - **Content-Type**: `application/json`
6944
+ - **Accept**: `application/json`
6945
+
6946
+
6947
+ ### HTTP response details
6948
+ | Status code | Description | Response headers |
6949
+ |-------------|-------------|------------------|
6950
+ | **200** | The new state. | - |
6951
+ | **400** | Invalid request body or parameters. | - |
6952
+ | **401** | Missing or invalid bearer token. | - |
6953
+ | **403** | Authenticated token is not allowed to perform this action. | - |
6954
+
6955
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6956
+
6957
+
6958
+ ## updateCredentialProfile
6959
+
6960
+ > CredentialProfileResponse updateCredentialProfile(profile, updateCredentialProfileRequest)
6961
+
6962
+ Update a credential profile
6963
+
6964
+ 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`.
6965
+
6966
+ ### Example
6967
+
6968
+ ```ts
6969
+ import {
6970
+ Configuration,
6971
+ BoatApi,
6972
+ } from '@boatdev/sdk';
6973
+ import type { UpdateCredentialProfileOperationRequest } from '@boatdev/sdk';
6974
+
6975
+ async function example() {
6976
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6977
+ const config = new Configuration({
6978
+ // Configure HTTP bearer authorization: BoatBearerAuth
6979
+ accessToken: "YOUR BEARER TOKEN",
6980
+ });
6981
+ const api = new BoatApi(config);
6982
+
6983
+ const body = {
6984
+ // string | Profile id or name.
6985
+ profile: profile_example,
6986
+ // UpdateCredentialProfileRequest
6987
+ updateCredentialProfileRequest: {"isDefault":true},
6988
+ } satisfies UpdateCredentialProfileOperationRequest;
6989
+
6990
+ try {
6991
+ const data = await api.updateCredentialProfile(body);
6992
+ console.log(data);
6993
+ } catch (error) {
6994
+ console.error(error);
6995
+ }
6996
+ }
6997
+
6998
+ // Run the test
6999
+ example().catch(console.error);
7000
+ ```
7001
+
7002
+ ### Parameters
7003
+
7004
+
7005
+ | Name | Type | Description | Notes |
7006
+ |------------- | ------------- | ------------- | -------------|
7007
+ | **profile** | `string` | Profile id or name. | [Defaults to `undefined`] |
7008
+ | **updateCredentialProfileRequest** | [UpdateCredentialProfileRequest](UpdateCredentialProfileRequest.md) | | |
7009
+
7010
+ ### Return type
7011
+
7012
+ [**CredentialProfileResponse**](CredentialProfileResponse.md)
7013
+
7014
+ ### Authorization
7015
+
7016
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7017
+
7018
+ ### HTTP request headers
7019
+
7020
+ - **Content-Type**: `application/json`
7021
+ - **Accept**: `application/json`
7022
+
7023
+
7024
+ ### HTTP response details
7025
+ | Status code | Description | Response headers |
7026
+ |-------------|-------------|------------------|
7027
+ | **200** | The updated profile. | - |
7028
+ | **400** | Invalid request body or parameters. | - |
7029
+ | **401** | Missing or invalid bearer token. | - |
7030
+ | **403** | Authenticated token is not allowed to perform this action. | - |
7031
+ | **404** | Resource not found. | - |
7032
+ | **409** | Request conflicts with current account or sandbox state. | - |
7033
+
7034
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7035
+
7036
+
5992
7037
  ## updateDataRetention
5993
7038
 
5994
7039
  > DataRetentionPolicyResponse updateDataRetention(dataRetentionUpdateRequest)
@@ -6066,7 +7111,7 @@ example().catch(console.error);
6066
7111
 
6067
7112
  ## updateEnvironment
6068
7113
 
6069
- > SandboxEnvironmentResponse updateEnvironment(environmentId, updateSandboxEnvironmentRequest)
7114
+ > SandboxEnvironmentResponse updateEnvironment(environmentId, updateSandboxEnvironmentRequest, org)
6070
7115
 
6071
7116
  Update a sandbox environment
6072
7117
 
@@ -6094,6 +7139,8 @@ async function example() {
6094
7139
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
6095
7140
  // UpdateSandboxEnvironmentRequest
6096
7141
  updateSandboxEnvironmentRequest: ...,
7142
+ // 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)
7143
+ org: org_example,
6097
7144
  } satisfies UpdateEnvironmentRequest;
6098
7145
 
6099
7146
  try {
@@ -6115,6 +7162,7 @@ example().catch(console.error);
6115
7162
  |------------- | ------------- | ------------- | -------------|
6116
7163
  | **environmentId** | `string` | Environment id returned by `GET /environments`. | [Defaults to `undefined`] |
6117
7164
  | **updateSandboxEnvironmentRequest** | [UpdateSandboxEnvironmentRequest](UpdateSandboxEnvironmentRequest.md) | | |
7165
+ | **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
7166
 
6119
7167
  ### Return type
6120
7168
 
@@ -6291,7 +7339,7 @@ example().catch(console.error);
6291
7339
 
6292
7340
  ## upgradeEnvironment
6293
7341
 
6294
- > UpgradeSandboxEnvironmentResponse upgradeEnvironment(environmentId, upgradeSandboxEnvironmentRequest)
7342
+ > UpgradeSandboxEnvironmentResponse upgradeEnvironment(environmentId, org, upgradeSandboxEnvironmentRequest)
6295
7343
 
6296
7344
  Upgrade sandboxes to an environment\'s latest version
6297
7345
 
@@ -6317,6 +7365,8 @@ async function example() {
6317
7365
  const body = {
6318
7366
  // string
6319
7367
  environmentId: 38400000-8cf0-11bd-b23e-10b96e4ef00d,
7368
+ // 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)
7369
+ org: org_example,
6320
7370
  // UpgradeSandboxEnvironmentRequest (optional)
6321
7371
  upgradeSandboxEnvironmentRequest: ...,
6322
7372
  } satisfies UpgradeEnvironmentRequest;
@@ -6339,6 +7389,7 @@ example().catch(console.error);
6339
7389
  | Name | Type | Description | Notes |
6340
7390
  |------------- | ------------- | ------------- | -------------|
6341
7391
  | **environmentId** | `string` | | [Defaults to `undefined`] |
7392
+ | **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
7393
  | **upgradeSandboxEnvironmentRequest** | [UpgradeSandboxEnvironmentRequest](UpgradeSandboxEnvironmentRequest.md) | | [Optional] |
6343
7394
 
6344
7395
  ### Return type