@celigo/api-specs 0.2.1
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.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/account.yml +592 -0
- package/dist/agent.yml +908 -0
- package/dist/ai-agent.yml +5471 -0
- package/dist/api.yml +4140 -0
- package/dist/apim.yml +1286 -0
- package/dist/asynchelper.yml +3391 -0
- package/dist/audit.yml +2006 -0
- package/dist/connection.yml +8665 -0
- package/dist/connector.yml +1406 -0
- package/dist/ediprofile.yml +911 -0
- package/dist/editransaction.yml +1210 -0
- package/dist/enduser.yml +1724 -0
- package/dist/environment.yml +568 -0
- package/dist/eventreport.yml +692 -0
- package/dist/export.yml +17610 -0
- package/dist/filedefinition.yml +1396 -0
- package/dist/filestorage.yml +3102 -0
- package/dist/flow.yml +7928 -0
- package/dist/guardrail.yml +2763 -0
- package/dist/httpconnector.yml +2277 -0
- package/dist/httpconnectorendpoint.yml +722 -0
- package/dist/httpconnectorresource.yml +396 -0
- package/dist/iclient.yml +4452 -0
- package/dist/import.yml +15381 -0
- package/dist/integration.yml +4406 -0
- package/dist/job.yml +2014 -0
- package/dist/lookupcache.yml +1325 -0
- package/dist/marketplace.yml +685 -0
- package/dist/mcp-oauth-provider.yml +590 -0
- package/dist/mcp-server.yml +2656 -0
- package/dist/notification.yml +488 -0
- package/dist/processor.yml +1253 -0
- package/dist/profile.yml +455 -0
- package/dist/recyclebin.yml +768 -0
- package/dist/script.yml +1128 -0
- package/dist/stack.yml +1291 -0
- package/dist/state.yml +894 -0
- package/dist/subscription.yml +1405 -0
- package/dist/sync.yml +4857 -0
- package/dist/tag.yml +553 -0
- package/dist/template.yml +897 -0
- package/dist/tool.yml +33656 -0
- package/dist/tradingpartnerconnector.yml +1490 -0
- package/dist/user.yml +831 -0
- package/package.json +41 -0
- package/schemas.json +8420 -0
|
@@ -0,0 +1,3102 @@
|
|
|
1
|
+
openapi: 3.2.0
|
|
2
|
+
info:
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
title: File Storage
|
|
5
|
+
description: Manage files and folders in Celigo Storage.
|
|
6
|
+
servers:
|
|
7
|
+
- url: https://api.integrator.io
|
|
8
|
+
description: Production (US / default region)
|
|
9
|
+
- url: https://api.eu.integrator.io
|
|
10
|
+
description: Production (EU region)
|
|
11
|
+
- url: https://api.au.integrator.io
|
|
12
|
+
description: Production (AU region)
|
|
13
|
+
- url: https://api.ca.integrator.io
|
|
14
|
+
description: Production (CA region)
|
|
15
|
+
security:
|
|
16
|
+
- bearerAuth: []
|
|
17
|
+
tags:
|
|
18
|
+
- name: File Storage
|
|
19
|
+
description: |-
|
|
20
|
+
Celigo Storage is managed file storage built into integrator.io for staging files between flows and giving integrations persistent files to work with. Organize content into files and folders, transfer bytes directly through short-lived presigned S3 URLs, and reference stored files from flows. Items are addressed by `_id` and placed by parent folder; renames and moves keep the `_id` stable, and deletes go to a 30-day recycle bin before they can be purged.
|
|
21
|
+
|
|
22
|
+
## Storage item schema
|
|
23
|
+
|
|
24
|
+
{% openapi-schemas spec="filestorage" schemas="StorageItem" grouped="true" %}
|
|
25
|
+
paths:
|
|
26
|
+
/v1/storage/files/initiateUpload:
|
|
27
|
+
post:
|
|
28
|
+
x-internal: false
|
|
29
|
+
summary: Initiate file upload
|
|
30
|
+
description: |-
|
|
31
|
+
Starts one or more file uploads. For each file, reserves quota, creates a
|
|
32
|
+
pending item, and returns presigned S3 URLs to transfer the bytes to:
|
|
33
|
+
a single PUT URL for files up to 5 GB, or a multipart `uploadId`,
|
|
34
|
+
`partUrls`, and `completeUrl` for larger files. Upload the bytes directly
|
|
35
|
+
to those URLs, then the item flips to active once S3 confirms it — no
|
|
36
|
+
further API call is needed. URLs expire after one hour; reissue them with
|
|
37
|
+
`POST /v1/storage/files/refresh-urls`. Each file is validated
|
|
38
|
+
independently, so the response can mix per-file successes and failures
|
|
39
|
+
while the request itself returns 200.
|
|
40
|
+
operationId: initiateStorageUpload
|
|
41
|
+
tags:
|
|
42
|
+
- File Storage
|
|
43
|
+
requestBody:
|
|
44
|
+
required: true
|
|
45
|
+
content:
|
|
46
|
+
application/json:
|
|
47
|
+
schema:
|
|
48
|
+
$ref: '#/components/schemas/InitiateUploadRequest'
|
|
49
|
+
examples:
|
|
50
|
+
single:
|
|
51
|
+
summary: Single small file
|
|
52
|
+
value:
|
|
53
|
+
_parentId: 683a1f2e9b0c4d001e8f7a23
|
|
54
|
+
files:
|
|
55
|
+
- name: logo.png
|
|
56
|
+
mimeType: image/png
|
|
57
|
+
size: 245760
|
|
58
|
+
uploadType: single
|
|
59
|
+
multipart:
|
|
60
|
+
summary: Large file via multipart
|
|
61
|
+
value:
|
|
62
|
+
files:
|
|
63
|
+
- name: full-backup.zip
|
|
64
|
+
mimeType: application/zip
|
|
65
|
+
size: 8589934592
|
|
66
|
+
uploadType: multipart
|
|
67
|
+
numParts: 50
|
|
68
|
+
resumeMultipart:
|
|
69
|
+
summary: Request the next batch of part URLs
|
|
70
|
+
value:
|
|
71
|
+
files:
|
|
72
|
+
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
73
|
+
name: database-export.sql
|
|
74
|
+
uploadType: multipart
|
|
75
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
76
|
+
issuedPartsCount: 5
|
|
77
|
+
numParts: 5
|
|
78
|
+
responses:
|
|
79
|
+
'200':
|
|
80
|
+
description: Per-file upload instructions, in request order.
|
|
81
|
+
content:
|
|
82
|
+
application/json:
|
|
83
|
+
schema:
|
|
84
|
+
$ref: '#/components/schemas/InitiateUploadResponse'
|
|
85
|
+
examples:
|
|
86
|
+
mixed:
|
|
87
|
+
summary: Single success, multipart success, and a rejection
|
|
88
|
+
value:
|
|
89
|
+
files:
|
|
90
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
91
|
+
name: logo.png
|
|
92
|
+
statusCode: 200
|
|
93
|
+
body:
|
|
94
|
+
uploadType: single
|
|
95
|
+
uploadUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/presigned-put-url
|
|
96
|
+
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
97
|
+
name: database-export.sql
|
|
98
|
+
statusCode: 200
|
|
99
|
+
body:
|
|
100
|
+
uploadType: multipart
|
|
101
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
102
|
+
partUrls:
|
|
103
|
+
- partNumber: 6
|
|
104
|
+
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/part-6
|
|
105
|
+
- partNumber: 7
|
|
106
|
+
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/part-7
|
|
107
|
+
completeUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/complete
|
|
108
|
+
- name: invalid-file
|
|
109
|
+
statusCode: 400
|
|
110
|
+
errors:
|
|
111
|
+
- code: STORAGE_INVALID_MIME_TYPE
|
|
112
|
+
message: Invalid MIME type
|
|
113
|
+
'400':
|
|
114
|
+
$ref: '#/components/responses/400-bad-request'
|
|
115
|
+
'401':
|
|
116
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
117
|
+
'403':
|
|
118
|
+
$ref: '#/components/responses/403-forbidden'
|
|
119
|
+
'404':
|
|
120
|
+
$ref: '#/components/responses/404-not-found'
|
|
121
|
+
'422':
|
|
122
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
123
|
+
/v1/storage/files/refresh-urls:
|
|
124
|
+
post:
|
|
125
|
+
x-internal: false
|
|
126
|
+
summary: Refresh upload URLs
|
|
127
|
+
description: |-
|
|
128
|
+
Reissues presigned upload URLs for pending uploads whose URLs have
|
|
129
|
+
expired (URLs last one hour). For a single PUT, returns a fresh upload
|
|
130
|
+
URL; for multipart, returns fresh URLs for the requested part numbers plus
|
|
131
|
+
the complete URL. Already-uploaded parts are preserved. Each item is
|
|
132
|
+
processed independently.
|
|
133
|
+
operationId: refreshStorageUploadUrls
|
|
134
|
+
tags:
|
|
135
|
+
- File Storage
|
|
136
|
+
requestBody:
|
|
137
|
+
required: true
|
|
138
|
+
content:
|
|
139
|
+
application/json:
|
|
140
|
+
schema:
|
|
141
|
+
$ref: '#/components/schemas/RefreshUrlsRequest'
|
|
142
|
+
examples:
|
|
143
|
+
mixed:
|
|
144
|
+
summary: Refresh a single PUT and a multipart batch
|
|
145
|
+
value:
|
|
146
|
+
items:
|
|
147
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
148
|
+
uploadType: single
|
|
149
|
+
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
150
|
+
uploadType: multipart
|
|
151
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
152
|
+
partNumbers:
|
|
153
|
+
- 3
|
|
154
|
+
- 4
|
|
155
|
+
- 5
|
|
156
|
+
responses:
|
|
157
|
+
'200':
|
|
158
|
+
description: Per-item refreshed upload instructions.
|
|
159
|
+
content:
|
|
160
|
+
application/json:
|
|
161
|
+
schema:
|
|
162
|
+
$ref: '#/components/schemas/RefreshUrlsResponse'
|
|
163
|
+
examples:
|
|
164
|
+
default:
|
|
165
|
+
value:
|
|
166
|
+
items:
|
|
167
|
+
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
168
|
+
name: database-export.sql
|
|
169
|
+
statusCode: 200
|
|
170
|
+
body:
|
|
171
|
+
uploadType: multipart
|
|
172
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
173
|
+
partUrls:
|
|
174
|
+
- partNumber: 3
|
|
175
|
+
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/fresh-part-3
|
|
176
|
+
completeUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/fresh-complete
|
|
177
|
+
'400':
|
|
178
|
+
$ref: '#/components/responses/400-bad-request'
|
|
179
|
+
'401':
|
|
180
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
181
|
+
'403':
|
|
182
|
+
$ref: '#/components/responses/403-forbidden'
|
|
183
|
+
'404':
|
|
184
|
+
$ref: '#/components/responses/404-not-found'
|
|
185
|
+
'422':
|
|
186
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
187
|
+
/v1/storage/files/{_id}/cancel:
|
|
188
|
+
post:
|
|
189
|
+
x-internal: false
|
|
190
|
+
summary: Cancel a multipart upload
|
|
191
|
+
description: |-
|
|
192
|
+
Aborts an in-progress multipart upload, discarding any uploaded parts and
|
|
193
|
+
releasing the reserved quota. Use this to abandon a multipart upload
|
|
194
|
+
started with `POST /v1/storage/files/initiateUpload`; single PUT uploads
|
|
195
|
+
do not need canceling. If the upload has in fact already completed in S3,
|
|
196
|
+
the item is activated instead and the request is rejected as not pending.
|
|
197
|
+
operationId: cancelStorageUpload
|
|
198
|
+
tags:
|
|
199
|
+
- File Storage
|
|
200
|
+
parameters:
|
|
201
|
+
- name: _id
|
|
202
|
+
in: path
|
|
203
|
+
required: true
|
|
204
|
+
description: ID of the pending multipart item to cancel.
|
|
205
|
+
schema:
|
|
206
|
+
type: string
|
|
207
|
+
format: objectId
|
|
208
|
+
x-celigo-refModel: storageitems
|
|
209
|
+
examples:
|
|
210
|
+
- 683b2a0e1c3d5f001a9e8b03
|
|
211
|
+
responses:
|
|
212
|
+
'204':
|
|
213
|
+
description: Multipart upload aborted and the pending item removed.
|
|
214
|
+
'401':
|
|
215
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
216
|
+
'404':
|
|
217
|
+
$ref: '#/components/responses/404-not-found'
|
|
218
|
+
'422':
|
|
219
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
220
|
+
/v1/storage/files/{_id}/download:
|
|
221
|
+
get:
|
|
222
|
+
x-internal: false
|
|
223
|
+
summary: Get a file download URL
|
|
224
|
+
description: |-
|
|
225
|
+
Returns a short-lived presigned S3 URL for downloading a file's content,
|
|
226
|
+
along with how many seconds it stays valid. Fetch the bytes directly from
|
|
227
|
+
that URL — the content does not pass through this API. Files only; folders
|
|
228
|
+
have no content to download.
|
|
229
|
+
operationId: getStorageFileDownloadUrl
|
|
230
|
+
tags:
|
|
231
|
+
- File Storage
|
|
232
|
+
parameters:
|
|
233
|
+
- name: _id
|
|
234
|
+
in: path
|
|
235
|
+
required: true
|
|
236
|
+
description: ID of the file to download.
|
|
237
|
+
schema:
|
|
238
|
+
type: string
|
|
239
|
+
format: objectId
|
|
240
|
+
x-celigo-refModel: storageitems
|
|
241
|
+
examples:
|
|
242
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
243
|
+
responses:
|
|
244
|
+
'200':
|
|
245
|
+
description: A presigned download URL and its lifetime.
|
|
246
|
+
content:
|
|
247
|
+
application/json:
|
|
248
|
+
schema:
|
|
249
|
+
type: object
|
|
250
|
+
required:
|
|
251
|
+
- downloadUrl
|
|
252
|
+
- expiresIn
|
|
253
|
+
properties:
|
|
254
|
+
downloadUrl:
|
|
255
|
+
type: string
|
|
256
|
+
format: uri
|
|
257
|
+
description: Presigned S3 URL to GET the file's bytes from.
|
|
258
|
+
examples:
|
|
259
|
+
- https://integrator-file-storage.s3.us-west-2.amazonaws.com/file-storage/...
|
|
260
|
+
expiresIn:
|
|
261
|
+
type: integer
|
|
262
|
+
description: Seconds the URL stays valid from the time of this response.
|
|
263
|
+
examples:
|
|
264
|
+
- 3600
|
|
265
|
+
examples:
|
|
266
|
+
default:
|
|
267
|
+
value:
|
|
268
|
+
downloadUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/file-storage/...
|
|
269
|
+
expiresIn: 3600
|
|
270
|
+
'401':
|
|
271
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
272
|
+
'403':
|
|
273
|
+
$ref: '#/components/responses/403-forbidden'
|
|
274
|
+
'404':
|
|
275
|
+
$ref: '#/components/responses/404-not-found'
|
|
276
|
+
'422':
|
|
277
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
278
|
+
/v1/storage/items:
|
|
279
|
+
get:
|
|
280
|
+
x-internal: false
|
|
281
|
+
summary: List or search items
|
|
282
|
+
description: |-
|
|
283
|
+
Browse or search Celigo Storage. In list mode (no `search`), returns the
|
|
284
|
+
direct children of a folder — omit `_parentId` for the account root — and
|
|
285
|
+
includes a `breadcrumb` of the path to that folder. In search mode (with
|
|
286
|
+
`search`), recursively matches item names across the whole account and
|
|
287
|
+
returns each hit's `location`. Results are paginated with the `Link`
|
|
288
|
+
response header.
|
|
289
|
+
operationId: listStorageItems
|
|
290
|
+
tags:
|
|
291
|
+
- File Storage
|
|
292
|
+
parameters:
|
|
293
|
+
- name: _parentId
|
|
294
|
+
in: query
|
|
295
|
+
required: false
|
|
296
|
+
description: |-
|
|
297
|
+
Folder whose direct children to list. Omit for the account root.
|
|
298
|
+
Ignored in search mode.
|
|
299
|
+
schema:
|
|
300
|
+
type: string
|
|
301
|
+
format: objectId
|
|
302
|
+
x-celigo-refModel: storageitems
|
|
303
|
+
examples:
|
|
304
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
305
|
+
- name: search
|
|
306
|
+
in: query
|
|
307
|
+
required: false
|
|
308
|
+
description: |-
|
|
309
|
+
Recursive, case-insensitive substring match on item names across the
|
|
310
|
+
whole account. Switches the endpoint to search mode, where
|
|
311
|
+
`_parentId` is ignored and each item carries its `location`. Matches
|
|
312
|
+
names only, not contents or descriptions.
|
|
313
|
+
schema:
|
|
314
|
+
type: string
|
|
315
|
+
minLength: 2
|
|
316
|
+
examples:
|
|
317
|
+
- report
|
|
318
|
+
- name: type
|
|
319
|
+
in: query
|
|
320
|
+
required: false
|
|
321
|
+
description: Restrict results to one item type.
|
|
322
|
+
schema:
|
|
323
|
+
type: string
|
|
324
|
+
enum:
|
|
325
|
+
- file
|
|
326
|
+
- folder
|
|
327
|
+
x-enumDescriptions:
|
|
328
|
+
file: Return only files.
|
|
329
|
+
folder: Return only folders.
|
|
330
|
+
examples:
|
|
331
|
+
- file
|
|
332
|
+
- name: mimeType
|
|
333
|
+
in: query
|
|
334
|
+
required: false
|
|
335
|
+
description: Restrict results to files of a single media type.
|
|
336
|
+
schema:
|
|
337
|
+
type: string
|
|
338
|
+
examples:
|
|
339
|
+
- image/png
|
|
340
|
+
- name: sort_by
|
|
341
|
+
in: query
|
|
342
|
+
required: false
|
|
343
|
+
description: Field to sort by.
|
|
344
|
+
schema:
|
|
345
|
+
type: string
|
|
346
|
+
enum:
|
|
347
|
+
- name
|
|
348
|
+
- lastModified
|
|
349
|
+
default: name
|
|
350
|
+
x-enumDescriptions:
|
|
351
|
+
name: Sort alphabetically by name.
|
|
352
|
+
lastModified: Sort by the last-modified timestamp.
|
|
353
|
+
examples:
|
|
354
|
+
- name
|
|
355
|
+
- name: sort_order
|
|
356
|
+
in: query
|
|
357
|
+
required: false
|
|
358
|
+
description: Sort direction.
|
|
359
|
+
schema:
|
|
360
|
+
type: string
|
|
361
|
+
enum:
|
|
362
|
+
- asc
|
|
363
|
+
- desc
|
|
364
|
+
default: asc
|
|
365
|
+
x-enumDescriptions:
|
|
366
|
+
asc: Ascending — A→Z for name, oldest first for lastModified.
|
|
367
|
+
desc: Descending — Z→A for name, newest first for lastModified.
|
|
368
|
+
examples:
|
|
369
|
+
- asc
|
|
370
|
+
- name: lastModified_gte
|
|
371
|
+
in: query
|
|
372
|
+
required: false
|
|
373
|
+
description: Return only items modified at or after this time.
|
|
374
|
+
schema:
|
|
375
|
+
type: string
|
|
376
|
+
format: date-time
|
|
377
|
+
examples:
|
|
378
|
+
- '2026-03-01T00:00:00.000Z'
|
|
379
|
+
- name: lastModified_lte
|
|
380
|
+
in: query
|
|
381
|
+
required: false
|
|
382
|
+
description: Return only items modified at or before this time.
|
|
383
|
+
schema:
|
|
384
|
+
type: string
|
|
385
|
+
format: date-time
|
|
386
|
+
examples:
|
|
387
|
+
- '2026-03-31T23:59:59.999Z'
|
|
388
|
+
- name: pageSize
|
|
389
|
+
in: query
|
|
390
|
+
required: false
|
|
391
|
+
description: Maximum number of items to return per page.
|
|
392
|
+
schema:
|
|
393
|
+
type: integer
|
|
394
|
+
minimum: 1
|
|
395
|
+
maximum: 1000
|
|
396
|
+
default: 1000
|
|
397
|
+
examples:
|
|
398
|
+
- 100
|
|
399
|
+
- name: after
|
|
400
|
+
in: query
|
|
401
|
+
required: false
|
|
402
|
+
description: |-
|
|
403
|
+
Opaque cursor for the next page. Take it from the `Link` response
|
|
404
|
+
header's `rel="next"` URL rather than constructing it. Cannot be
|
|
405
|
+
combined with `before`.
|
|
406
|
+
schema:
|
|
407
|
+
type: string
|
|
408
|
+
examples:
|
|
409
|
+
- eyJsYXN0SWQiOiI2ODNiMmEwZTFjM2Q1ZjAwMWE5ZThiMDEifQ
|
|
410
|
+
- name: before
|
|
411
|
+
in: query
|
|
412
|
+
required: false
|
|
413
|
+
description: |-
|
|
414
|
+
Opaque cursor for the previous page, taken from the `Link` header's
|
|
415
|
+
`rel="prev"` URL. Cannot be combined with `after`.
|
|
416
|
+
schema:
|
|
417
|
+
type: string
|
|
418
|
+
examples:
|
|
419
|
+
- eyJmaXJzdElkIjoiNjg0YzNiMWYyZDRlNmcwMDJiMGg5YzM0In0
|
|
420
|
+
responses:
|
|
421
|
+
'200':
|
|
422
|
+
description: |-
|
|
423
|
+
Matching items. Includes `breadcrumb` in list mode and per-item
|
|
424
|
+
`location` in search mode.
|
|
425
|
+
headers:
|
|
426
|
+
Link:
|
|
427
|
+
description: |-
|
|
428
|
+
RFC 5988 pagination links. Includes `<...>; rel="next"` (and
|
|
429
|
+
`rel="prev"` when paging backward) with cursor params; the
|
|
430
|
+
`rel="next"` entry is absent on the final page.
|
|
431
|
+
schema:
|
|
432
|
+
type: string
|
|
433
|
+
content:
|
|
434
|
+
application/json:
|
|
435
|
+
schema:
|
|
436
|
+
type: object
|
|
437
|
+
required:
|
|
438
|
+
- items
|
|
439
|
+
properties:
|
|
440
|
+
items:
|
|
441
|
+
type: array
|
|
442
|
+
items:
|
|
443
|
+
$ref: '#/components/schemas/StorageItem'
|
|
444
|
+
breadcrumb:
|
|
445
|
+
type: array
|
|
446
|
+
description: |-
|
|
447
|
+
Path from the root to the listed folder, nearest the root
|
|
448
|
+
first. Present in list mode when `_parentId` is set.
|
|
449
|
+
items:
|
|
450
|
+
type: object
|
|
451
|
+
properties:
|
|
452
|
+
_id:
|
|
453
|
+
type: string
|
|
454
|
+
format: objectId
|
|
455
|
+
x-celigo-refModel: storageitems
|
|
456
|
+
description: Folder ID.
|
|
457
|
+
examples:
|
|
458
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
459
|
+
name:
|
|
460
|
+
type: string
|
|
461
|
+
description: Folder name.
|
|
462
|
+
examples:
|
|
463
|
+
- My Files
|
|
464
|
+
examples:
|
|
465
|
+
listMode:
|
|
466
|
+
summary: List a folder's children
|
|
467
|
+
value:
|
|
468
|
+
items:
|
|
469
|
+
- _id: 684c3b1f2d4e6g002b0h9c34
|
|
470
|
+
type: folder
|
|
471
|
+
name: Reports
|
|
472
|
+
status: active
|
|
473
|
+
isSystem: false
|
|
474
|
+
createdAt: '2026-03-28T10:00:00.000Z'
|
|
475
|
+
lastModified: '2026-03-28T14:30:00.000Z'
|
|
476
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
477
|
+
type: file
|
|
478
|
+
name: logo.png
|
|
479
|
+
size: 245760
|
|
480
|
+
mimeType: image/png
|
|
481
|
+
status: active
|
|
482
|
+
isSystem: false
|
|
483
|
+
createdAt: '2026-03-28T09:00:00.000Z'
|
|
484
|
+
lastModified: '2026-03-28T09:00:00.000Z'
|
|
485
|
+
breadcrumb:
|
|
486
|
+
- _id: 683a1f2e9b0c4d001e8f7a23
|
|
487
|
+
name: My Files
|
|
488
|
+
searchMode:
|
|
489
|
+
summary: Search by name
|
|
490
|
+
value:
|
|
491
|
+
items:
|
|
492
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
493
|
+
type: file
|
|
494
|
+
name: logo.png
|
|
495
|
+
size: 245760
|
|
496
|
+
mimeType: image/png
|
|
497
|
+
status: active
|
|
498
|
+
isSystem: false
|
|
499
|
+
location:
|
|
500
|
+
_id: 683a1f2e9b0c4d001e8f7a23
|
|
501
|
+
name: My Files
|
|
502
|
+
createdAt: '2026-03-28T09:00:00.000Z'
|
|
503
|
+
lastModified: '2026-03-28T09:00:00.000Z'
|
|
504
|
+
'400':
|
|
505
|
+
$ref: '#/components/responses/400-bad-request'
|
|
506
|
+
'401':
|
|
507
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
508
|
+
'403':
|
|
509
|
+
$ref: '#/components/responses/403-forbidden'
|
|
510
|
+
'404':
|
|
511
|
+
$ref: '#/components/responses/404-not-found'
|
|
512
|
+
'422':
|
|
513
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
514
|
+
post:
|
|
515
|
+
x-internal: false
|
|
516
|
+
summary: Create a folder
|
|
517
|
+
description: |-
|
|
518
|
+
Creates an empty folder. Folders are organizational only — they hold no
|
|
519
|
+
content and do not count against storage quota. To create files, use
|
|
520
|
+
`POST /v1/storage/files/initiateUpload`.
|
|
521
|
+
operationId: createStorageFolder
|
|
522
|
+
tags:
|
|
523
|
+
- File Storage
|
|
524
|
+
requestBody:
|
|
525
|
+
required: true
|
|
526
|
+
content:
|
|
527
|
+
application/json:
|
|
528
|
+
schema:
|
|
529
|
+
$ref: '#/components/schemas/CreateFolderRequest'
|
|
530
|
+
examples:
|
|
531
|
+
rootFolder:
|
|
532
|
+
summary: Folder at the account root
|
|
533
|
+
value:
|
|
534
|
+
name: Reports
|
|
535
|
+
nestedFolder:
|
|
536
|
+
summary: Folder inside another folder
|
|
537
|
+
value:
|
|
538
|
+
name: Reports
|
|
539
|
+
_parentId: 683a1f2e9b0c4d001e8f7a23
|
|
540
|
+
description: Quarterly financial reports
|
|
541
|
+
responses:
|
|
542
|
+
'201':
|
|
543
|
+
description: Created folder.
|
|
544
|
+
content:
|
|
545
|
+
application/json:
|
|
546
|
+
schema:
|
|
547
|
+
$ref: '#/components/schemas/StorageItem'
|
|
548
|
+
examples:
|
|
549
|
+
default:
|
|
550
|
+
value:
|
|
551
|
+
_id: 684c3b1f2d4e6g002b0h9c34
|
|
552
|
+
type: folder
|
|
553
|
+
name: Reports
|
|
554
|
+
description: Quarterly financial reports
|
|
555
|
+
status: active
|
|
556
|
+
isSystem: false
|
|
557
|
+
createdAt: '2026-03-30T10:30:00.000Z'
|
|
558
|
+
lastModified: '2026-03-30T10:30:00.000Z'
|
|
559
|
+
'400':
|
|
560
|
+
$ref: '#/components/responses/400-bad-request'
|
|
561
|
+
'401':
|
|
562
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
563
|
+
'403':
|
|
564
|
+
$ref: '#/components/responses/403-forbidden'
|
|
565
|
+
'404':
|
|
566
|
+
$ref: '#/components/responses/404-not-found'
|
|
567
|
+
'422':
|
|
568
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
569
|
+
/v1/storage/items/batch:
|
|
570
|
+
post:
|
|
571
|
+
x-internal: false
|
|
572
|
+
summary: Look up items in batch
|
|
573
|
+
description: |-
|
|
574
|
+
Returns metadata for up to 100 items in one call. Send the item ids and
|
|
575
|
+
optionally a `fields` projection; by default each result carries only
|
|
576
|
+
`_id`. Requesting `path` adds a breadcrumb path built from the item's
|
|
577
|
+
ancestor folder names.
|
|
578
|
+
|
|
579
|
+
With `failFast: true` (the default), the first unknown id fails the whole
|
|
580
|
+
request with `422 STORAGE_BATCH_ITEM_NOT_FOUND`. With `failFast: false`,
|
|
581
|
+
unknown ids come back inline as
|
|
582
|
+
`{_id, notFound: true, reason: "STORAGE_BATCH_ITEM_NOT_FOUND"}` entries
|
|
583
|
+
alongside the found items.
|
|
584
|
+
operationId: batchGetStorageItems
|
|
585
|
+
tags:
|
|
586
|
+
- File Storage
|
|
587
|
+
requestBody:
|
|
588
|
+
required: true
|
|
589
|
+
content:
|
|
590
|
+
application/json:
|
|
591
|
+
schema:
|
|
592
|
+
type: object
|
|
593
|
+
required:
|
|
594
|
+
- ids
|
|
595
|
+
properties:
|
|
596
|
+
ids:
|
|
597
|
+
type: array
|
|
598
|
+
minItems: 1
|
|
599
|
+
maxItems: 100
|
|
600
|
+
description: |-
|
|
601
|
+
Item ids to look up. Each must be a 24-character ObjectId;
|
|
602
|
+
a malformed id fails the request with
|
|
603
|
+
`400 STORAGE_BATCH_INVALID_REQUEST` before any lookup runs.
|
|
604
|
+
items:
|
|
605
|
+
type: string
|
|
606
|
+
format: objectId
|
|
607
|
+
x-celigo-refModel: storageitems
|
|
608
|
+
examples:
|
|
609
|
+
- - 683b2a0e1c3d5f001a9e8b01
|
|
610
|
+
- 684c3b1f2d4e6a002b0f9c34
|
|
611
|
+
fields:
|
|
612
|
+
type: array
|
|
613
|
+
minItems: 1
|
|
614
|
+
description: |-
|
|
615
|
+
Which fields to return per item (`_id` is always included).
|
|
616
|
+
Omitted means `_id` only. An unknown field name fails with
|
|
617
|
+
`400 STORAGE_BATCH_INVALID_REQUEST` naming the allowed set.
|
|
618
|
+
items:
|
|
619
|
+
type: string
|
|
620
|
+
enum:
|
|
621
|
+
- name
|
|
622
|
+
- description
|
|
623
|
+
- size
|
|
624
|
+
- mimeType
|
|
625
|
+
- type
|
|
626
|
+
- status
|
|
627
|
+
- _parentId
|
|
628
|
+
- __ancestorIds
|
|
629
|
+
- path
|
|
630
|
+
x-enumDescriptions:
|
|
631
|
+
name: Item name.
|
|
632
|
+
description: Item description.
|
|
633
|
+
size: File size in bytes.
|
|
634
|
+
mimeType: File MIME type.
|
|
635
|
+
type: Item type (`file` or `folder`).
|
|
636
|
+
status: Item lifecycle status.
|
|
637
|
+
_parentId: Parent folder id.
|
|
638
|
+
__ancestorIds: Ancestor folder id chain from the root.
|
|
639
|
+
path: Breadcrumb path built from ancestor folder names, e.g. `/invoices/2026/inv-001.pdf`.
|
|
640
|
+
examples:
|
|
641
|
+
- - name
|
|
642
|
+
- size
|
|
643
|
+
- path
|
|
644
|
+
failFast:
|
|
645
|
+
type: boolean
|
|
646
|
+
default: true
|
|
647
|
+
description: |-
|
|
648
|
+
When true (the default), an unknown id fails the whole request
|
|
649
|
+
with 422. When false, unknown ids are reported inline per item
|
|
650
|
+
and the request still returns 200.
|
|
651
|
+
examples:
|
|
652
|
+
projection:
|
|
653
|
+
summary: Look up names and paths, tolerating unknown ids
|
|
654
|
+
value:
|
|
655
|
+
ids:
|
|
656
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
657
|
+
- 684c3b1f2d4e6a002b0f9c34
|
|
658
|
+
fields:
|
|
659
|
+
- name
|
|
660
|
+
- size
|
|
661
|
+
- path
|
|
662
|
+
failFast: false
|
|
663
|
+
responses:
|
|
664
|
+
'200':
|
|
665
|
+
description: Per-id results, in the same order as the requested `ids`.
|
|
666
|
+
content:
|
|
667
|
+
application/json:
|
|
668
|
+
schema:
|
|
669
|
+
type: object
|
|
670
|
+
properties:
|
|
671
|
+
items:
|
|
672
|
+
type: array
|
|
673
|
+
description: One entry per requested id, in request order.
|
|
674
|
+
items:
|
|
675
|
+
type: object
|
|
676
|
+
required:
|
|
677
|
+
- _id
|
|
678
|
+
properties:
|
|
679
|
+
_id:
|
|
680
|
+
type: string
|
|
681
|
+
format: objectId
|
|
682
|
+
x-celigo-refModel: storageitems
|
|
683
|
+
description: Item id this entry corresponds to.
|
|
684
|
+
name:
|
|
685
|
+
type: string
|
|
686
|
+
description: Present when requested via `fields`.
|
|
687
|
+
size:
|
|
688
|
+
type: integer
|
|
689
|
+
description: File size in bytes. Present when requested via `fields`.
|
|
690
|
+
path:
|
|
691
|
+
type: string
|
|
692
|
+
description: |-
|
|
693
|
+
Breadcrumb path from the root, built from ancestor
|
|
694
|
+
folder names. Present when requested via `fields`.
|
|
695
|
+
examples:
|
|
696
|
+
- /invoices/2026/inv-001.pdf
|
|
697
|
+
notFound:
|
|
698
|
+
type: boolean
|
|
699
|
+
description: |-
|
|
700
|
+
Present (true) only on unknown ids when
|
|
701
|
+
`failFast: false`.
|
|
702
|
+
reason:
|
|
703
|
+
type: string
|
|
704
|
+
description: |-
|
|
705
|
+
Error code for an unknown id when `failFast: false`
|
|
706
|
+
(`STORAGE_BATCH_ITEM_NOT_FOUND`).
|
|
707
|
+
examples:
|
|
708
|
+
mixed:
|
|
709
|
+
summary: One found, one unknown (failFast false)
|
|
710
|
+
value:
|
|
711
|
+
items:
|
|
712
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
713
|
+
name: inv-001.pdf
|
|
714
|
+
size: 18244
|
|
715
|
+
path: /invoices/2026/inv-001.pdf
|
|
716
|
+
- _id: 684c3b1f2d4e6a002b0f9c34
|
|
717
|
+
notFound: true
|
|
718
|
+
reason: STORAGE_BATCH_ITEM_NOT_FOUND
|
|
719
|
+
'400':
|
|
720
|
+
description: |-
|
|
721
|
+
Malformed request — `ids` missing/empty/over 100 entries, a
|
|
722
|
+
non-ObjectId id, an unknown `fields` entry, or a non-boolean
|
|
723
|
+
`failFast`. Error code: `STORAGE_BATCH_INVALID_REQUEST`.
|
|
724
|
+
content:
|
|
725
|
+
application/json:
|
|
726
|
+
schema:
|
|
727
|
+
$ref: '#/components/schemas/Error'
|
|
728
|
+
'401':
|
|
729
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
730
|
+
'422':
|
|
731
|
+
description: |-
|
|
732
|
+
An id was not found while `failFast` was true (the default). Each
|
|
733
|
+
error entry carries the offending `_id`.
|
|
734
|
+
content:
|
|
735
|
+
application/json:
|
|
736
|
+
schema:
|
|
737
|
+
type: object
|
|
738
|
+
properties:
|
|
739
|
+
errors:
|
|
740
|
+
type: array
|
|
741
|
+
items:
|
|
742
|
+
type: object
|
|
743
|
+
properties:
|
|
744
|
+
code:
|
|
745
|
+
type: string
|
|
746
|
+
description: Error code (`STORAGE_BATCH_ITEM_NOT_FOUND`).
|
|
747
|
+
message:
|
|
748
|
+
type: string
|
|
749
|
+
description: Human-readable error message naming the id.
|
|
750
|
+
_id:
|
|
751
|
+
type: string
|
|
752
|
+
format: objectId
|
|
753
|
+
description: The id that was not found.
|
|
754
|
+
examples:
|
|
755
|
+
not_found:
|
|
756
|
+
value:
|
|
757
|
+
errors:
|
|
758
|
+
- code: STORAGE_BATCH_ITEM_NOT_FOUND
|
|
759
|
+
message: 'File not found: 684c3b1f2d4e6a002b0f9c34'
|
|
760
|
+
_id: 684c3b1f2d4e6a002b0f9c34
|
|
761
|
+
/v1/storage/items/move:
|
|
762
|
+
post:
|
|
763
|
+
x-internal: false
|
|
764
|
+
summary: Move items in bulk
|
|
765
|
+
description: |-
|
|
766
|
+
Moves up to 100 files or folders into one destination folder (or the
|
|
767
|
+
account root) in a single call. Metadata only — content stays in place,
|
|
768
|
+
ids are unchanged, and quota is unaffected. Folders re-parent immediately
|
|
769
|
+
and re-anchor their descendants asynchronously.
|
|
770
|
+
|
|
771
|
+
The destination is validated once up front — a bad destination rejects the
|
|
772
|
+
whole batch. Each source id is then processed best-effort: the response is
|
|
773
|
+
`200` when every item moved, or `207` when results are mixed, with a
|
|
774
|
+
per-id `status` of `success` or `error`. An optional `name` renames the
|
|
775
|
+
item as it lands (single-id requests only) so a destination name collision
|
|
776
|
+
can be resolved without a second call.
|
|
777
|
+
operationId: bulkMoveStorageItems
|
|
778
|
+
tags:
|
|
779
|
+
- File Storage
|
|
780
|
+
requestBody:
|
|
781
|
+
required: true
|
|
782
|
+
content:
|
|
783
|
+
application/json:
|
|
784
|
+
schema:
|
|
785
|
+
type: object
|
|
786
|
+
required:
|
|
787
|
+
- _parentFolderId
|
|
788
|
+
- _storageItemIds
|
|
789
|
+
properties:
|
|
790
|
+
_parentFolderId:
|
|
791
|
+
type:
|
|
792
|
+
- string
|
|
793
|
+
- 'null'
|
|
794
|
+
format: objectId
|
|
795
|
+
x-celigo-refModel: storageitems
|
|
796
|
+
description: |-
|
|
797
|
+
Destination folder. Send null to move the items to the account
|
|
798
|
+
root. The key must be present — omitting it fails with
|
|
799
|
+
`400 STORAGE_BULK_MOVE_PARENT_REQUIRED`. Must not appear in
|
|
800
|
+
`_storageItemIds` (`422 STORAGE_BULK_MOVE_DESTINATION_IN_SOURCES`).
|
|
801
|
+
examples:
|
|
802
|
+
- 684c3b1f2d4e6a002b0f9c34
|
|
803
|
+
_storageItemIds:
|
|
804
|
+
type: array
|
|
805
|
+
minItems: 1
|
|
806
|
+
maxItems: 100
|
|
807
|
+
description: |-
|
|
808
|
+
Ids of the items to move. Over 100 entries fails with
|
|
809
|
+
`422 STORAGE_BULK_MOVE_TOO_MANY_ITEMS`.
|
|
810
|
+
items:
|
|
811
|
+
type: string
|
|
812
|
+
format: objectId
|
|
813
|
+
x-celigo-refModel: storageitems
|
|
814
|
+
examples:
|
|
815
|
+
- - 683b2a0e1c3d5f001a9e8b01
|
|
816
|
+
name:
|
|
817
|
+
type: string
|
|
818
|
+
description: |-
|
|
819
|
+
New name applied to the moved item in the same write as the
|
|
820
|
+
re-parent. Only allowed when `_storageItemIds` has exactly one
|
|
821
|
+
entry — with more, the request fails with
|
|
822
|
+
`400 STORAGE_BULK_MOVE_NAME_DISALLOWED`.
|
|
823
|
+
examples:
|
|
824
|
+
bulk:
|
|
825
|
+
summary: Move two items into a folder
|
|
826
|
+
value:
|
|
827
|
+
_parentFolderId: 684c3b1f2d4e6a002b0f9c34
|
|
828
|
+
_storageItemIds:
|
|
829
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
830
|
+
- 683b2a0e1c3d5f001a9e8b02
|
|
831
|
+
rename_on_move:
|
|
832
|
+
summary: Move one item to the root and rename it
|
|
833
|
+
value:
|
|
834
|
+
_parentFolderId: null
|
|
835
|
+
_storageItemIds:
|
|
836
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
837
|
+
name: inv-001-final.pdf
|
|
838
|
+
responses:
|
|
839
|
+
'200':
|
|
840
|
+
description: Every item moved successfully.
|
|
841
|
+
content:
|
|
842
|
+
application/json:
|
|
843
|
+
schema:
|
|
844
|
+
$ref: '#/components/schemas/BulkMoveResults'
|
|
845
|
+
examples:
|
|
846
|
+
all_success:
|
|
847
|
+
value:
|
|
848
|
+
results:
|
|
849
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
850
|
+
status: success
|
|
851
|
+
_parentId: 684c3b1f2d4e6a002b0f9c34
|
|
852
|
+
__ancestorIds:
|
|
853
|
+
- 684c3b1f2d4e6a002b0f9c34
|
|
854
|
+
type: file
|
|
855
|
+
'207':
|
|
856
|
+
description: |-
|
|
857
|
+
Mixed results — at least one item failed to move. Inspect each
|
|
858
|
+
entry's `status`.
|
|
859
|
+
content:
|
|
860
|
+
application/json:
|
|
861
|
+
schema:
|
|
862
|
+
$ref: '#/components/schemas/BulkMoveResults'
|
|
863
|
+
examples:
|
|
864
|
+
mixed:
|
|
865
|
+
value:
|
|
866
|
+
results:
|
|
867
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
868
|
+
status: success
|
|
869
|
+
_parentId: 684c3b1f2d4e6a002b0f9c34
|
|
870
|
+
__ancestorIds:
|
|
871
|
+
- 684c3b1f2d4e6a002b0f9c34
|
|
872
|
+
type: file
|
|
873
|
+
- _id: 683b2a0e1c3d5f001a9e8b02
|
|
874
|
+
status: error
|
|
875
|
+
errorCode: STORAGE_MOVE_SAME_PARENT_DISALLOWED
|
|
876
|
+
message: The item is already in the destination folder
|
|
877
|
+
'400':
|
|
878
|
+
description: |-
|
|
879
|
+
Malformed request — `_parentFolderId` key missing
|
|
880
|
+
(`STORAGE_BULK_MOVE_PARENT_REQUIRED`), `_storageItemIds`
|
|
881
|
+
missing or empty (`STORAGE_BULK_MOVE_IDS_REQUIRED`), or `name` sent
|
|
882
|
+
with more than one id (`STORAGE_BULK_MOVE_NAME_DISALLOWED`).
|
|
883
|
+
content:
|
|
884
|
+
application/json:
|
|
885
|
+
schema:
|
|
886
|
+
$ref: '#/components/schemas/Error'
|
|
887
|
+
'401':
|
|
888
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
889
|
+
'403':
|
|
890
|
+
$ref: '#/components/responses/403-forbidden'
|
|
891
|
+
'404':
|
|
892
|
+
$ref: '#/components/responses/404-not-found'
|
|
893
|
+
'422':
|
|
894
|
+
description: |-
|
|
895
|
+
Batch-level rejection — too many ids
|
|
896
|
+
(`STORAGE_BULK_MOVE_TOO_MANY_ITEMS`), the destination appears among
|
|
897
|
+
the source ids (`STORAGE_BULK_MOVE_DESTINATION_IN_SOURCES`), or the
|
|
898
|
+
destination is not a folder.
|
|
899
|
+
content:
|
|
900
|
+
application/json:
|
|
901
|
+
schema:
|
|
902
|
+
$ref: '#/components/schemas/Error'
|
|
903
|
+
/v1/storage/items/recycleBinTTL:
|
|
904
|
+
get:
|
|
905
|
+
x-internal: false
|
|
906
|
+
summary: List recycle-bin items
|
|
907
|
+
description: |-
|
|
908
|
+
Lists the items currently in the recycle bin, newest deletion first. Only
|
|
909
|
+
items deleted directly are listed — descendants removed as part of a
|
|
910
|
+
folder deletion are hidden, since they are restored or purged with their
|
|
911
|
+
parent. Each item carries `deletedAt` and `deletedBy`. Restore an item
|
|
912
|
+
with `POST /v1/storage/items/{_id}/restore` or remove it for good with
|
|
913
|
+
`DELETE /v1/storage/items/{_id}/purge`.
|
|
914
|
+
operationId: listStorageRecycleBin
|
|
915
|
+
tags:
|
|
916
|
+
- File Storage
|
|
917
|
+
parameters:
|
|
918
|
+
- name: pageSize
|
|
919
|
+
in: query
|
|
920
|
+
required: false
|
|
921
|
+
description: Maximum number of items to return per page.
|
|
922
|
+
schema:
|
|
923
|
+
type: integer
|
|
924
|
+
minimum: 1
|
|
925
|
+
maximum: 1000
|
|
926
|
+
default: 1000
|
|
927
|
+
examples:
|
|
928
|
+
- 100
|
|
929
|
+
- name: after
|
|
930
|
+
in: query
|
|
931
|
+
required: false
|
|
932
|
+
description: |-
|
|
933
|
+
Opaque forward-paging cursor. Take it from the previous response's
|
|
934
|
+
`Link` header (`rel="next"`); omit for the first page. Cannot be
|
|
935
|
+
combined with `before`.
|
|
936
|
+
schema:
|
|
937
|
+
type: string
|
|
938
|
+
examples:
|
|
939
|
+
- WyIyMDI2LTA4LTA5VDA0OjQ2OjUwLjI0NloiLCI2YTc3ZmQ0YTAxYjgxODdjMmYzNGEzOGEiLCJkZWxldGVkQXQiLCJkZXNjIl0
|
|
940
|
+
- name: before
|
|
941
|
+
in: query
|
|
942
|
+
required: false
|
|
943
|
+
description: |-
|
|
944
|
+
Opaque backward-paging cursor from a previous response's `Link`
|
|
945
|
+
header. Cannot be combined with `after`.
|
|
946
|
+
schema:
|
|
947
|
+
type: string
|
|
948
|
+
responses:
|
|
949
|
+
'200':
|
|
950
|
+
description: |-
|
|
951
|
+
Recycle-bin items. Pagination is cursor-based via the `Link`
|
|
952
|
+
header — the body carries only `items`.
|
|
953
|
+
headers:
|
|
954
|
+
Link:
|
|
955
|
+
description: |-
|
|
956
|
+
RFC-5988 pagination links. When more pages remain, includes a
|
|
957
|
+
`<...?after=...>; rel="next"` entry; absent on the final page.
|
|
958
|
+
schema:
|
|
959
|
+
type: string
|
|
960
|
+
content:
|
|
961
|
+
application/json:
|
|
962
|
+
schema:
|
|
963
|
+
type: object
|
|
964
|
+
required:
|
|
965
|
+
- items
|
|
966
|
+
properties:
|
|
967
|
+
items:
|
|
968
|
+
type: array
|
|
969
|
+
items:
|
|
970
|
+
$ref: '#/components/schemas/StorageItem'
|
|
971
|
+
examples:
|
|
972
|
+
default:
|
|
973
|
+
value:
|
|
974
|
+
items:
|
|
975
|
+
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
976
|
+
type: file
|
|
977
|
+
name: old-report.pdf
|
|
978
|
+
size: 245760
|
|
979
|
+
mimeType: application/pdf
|
|
980
|
+
status: active
|
|
981
|
+
isSystem: false
|
|
982
|
+
deletedBy: 60a1b2c3d4e5f6001a2b3c4d
|
|
983
|
+
deletedAt: '2026-04-27T10:00:00.000Z'
|
|
984
|
+
createdAt: '2026-03-01T09:00:00.000Z'
|
|
985
|
+
lastModified: '2026-03-28T10:00:00.000Z'
|
|
986
|
+
- _id: 684c3b1f2d4e6g002b0h9c34
|
|
987
|
+
type: folder
|
|
988
|
+
name: Archived Reports
|
|
989
|
+
status: active
|
|
990
|
+
isSystem: false
|
|
991
|
+
deletedBy: 60a1b2c3d4e5f6001a2b3c4d
|
|
992
|
+
deletedAt: '2026-04-25T14:30:00.000Z'
|
|
993
|
+
createdAt: '2026-02-15T08:00:00.000Z'
|
|
994
|
+
lastModified: '2026-03-26T14:30:00.000Z'
|
|
995
|
+
'400':
|
|
996
|
+
description: |-
|
|
997
|
+
The `after`/`before` cursor is malformed, was not issued by this
|
|
998
|
+
listing, or both were sent together. Error code:
|
|
999
|
+
`STORAGE_INVALID_CURSOR`. Restart from the first page (omit the
|
|
1000
|
+
cursor).
|
|
1001
|
+
content:
|
|
1002
|
+
application/json:
|
|
1003
|
+
schema:
|
|
1004
|
+
$ref: '#/components/schemas/Error'
|
|
1005
|
+
examples:
|
|
1006
|
+
invalid_cursor:
|
|
1007
|
+
value:
|
|
1008
|
+
errors:
|
|
1009
|
+
- code: STORAGE_INVALID_CURSOR
|
|
1010
|
+
message: Invalid or corrupted cursor
|
|
1011
|
+
'401':
|
|
1012
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1013
|
+
'403':
|
|
1014
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1015
|
+
/v1/storage/items/{_id}:
|
|
1016
|
+
put:
|
|
1017
|
+
x-internal: false
|
|
1018
|
+
summary: Rename or describe an item
|
|
1019
|
+
description: |-
|
|
1020
|
+
Updates an item's `name` and/or `description`. Renaming keeps the item's
|
|
1021
|
+
`_id` stable, so references from flows, exports, imports, and tokens
|
|
1022
|
+
survive. To move an item to a different folder, use
|
|
1023
|
+
`PATCH /v1/storage/items/{_id}/move`; to replace a file's content, use
|
|
1024
|
+
`PATCH /v1/storage/items/{_id}/replace`.
|
|
1025
|
+
operationId: updateStorageItem
|
|
1026
|
+
tags:
|
|
1027
|
+
- File Storage
|
|
1028
|
+
parameters:
|
|
1029
|
+
- name: _id
|
|
1030
|
+
in: path
|
|
1031
|
+
required: true
|
|
1032
|
+
description: Item ID.
|
|
1033
|
+
schema:
|
|
1034
|
+
type: string
|
|
1035
|
+
format: objectId
|
|
1036
|
+
x-celigo-refModel: storageitems
|
|
1037
|
+
examples:
|
|
1038
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1039
|
+
requestBody:
|
|
1040
|
+
required: true
|
|
1041
|
+
content:
|
|
1042
|
+
application/json:
|
|
1043
|
+
schema:
|
|
1044
|
+
$ref: '#/components/schemas/UpdateRequest'
|
|
1045
|
+
examples:
|
|
1046
|
+
rename:
|
|
1047
|
+
summary: Rename and update description
|
|
1048
|
+
value:
|
|
1049
|
+
name: quarterly-report-final.pdf
|
|
1050
|
+
description: Updated Q1 2026 financial report
|
|
1051
|
+
responses:
|
|
1052
|
+
'200':
|
|
1053
|
+
description: Updated item.
|
|
1054
|
+
content:
|
|
1055
|
+
application/json:
|
|
1056
|
+
schema:
|
|
1057
|
+
$ref: '#/components/schemas/StorageItem'
|
|
1058
|
+
examples:
|
|
1059
|
+
default:
|
|
1060
|
+
value:
|
|
1061
|
+
_id: 683b2a0e1c3d5f001a9e8b01
|
|
1062
|
+
type: file
|
|
1063
|
+
name: quarterly-report-final.pdf
|
|
1064
|
+
description: Updated Q1 2026 financial report
|
|
1065
|
+
size: 245760
|
|
1066
|
+
mimeType: application/pdf
|
|
1067
|
+
status: active
|
|
1068
|
+
isSystem: false
|
|
1069
|
+
createdAt: '2026-03-28T10:00:00.000Z'
|
|
1070
|
+
lastModified: '2026-03-28T14:30:00.000Z'
|
|
1071
|
+
'400':
|
|
1072
|
+
$ref: '#/components/responses/400-bad-request'
|
|
1073
|
+
'401':
|
|
1074
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1075
|
+
'403':
|
|
1076
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1077
|
+
'404':
|
|
1078
|
+
$ref: '#/components/responses/404-not-found'
|
|
1079
|
+
'422':
|
|
1080
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1081
|
+
delete:
|
|
1082
|
+
x-internal: false
|
|
1083
|
+
summary: Delete an item
|
|
1084
|
+
description: |-
|
|
1085
|
+
Soft-deletes a file or folder to the recycle bin, where it is retained
|
|
1086
|
+
for 30 days and can be restored with
|
|
1087
|
+
`POST /v1/storage/items/{_id}/restore`. Deleting a folder also removes
|
|
1088
|
+
its entire subtree; the folder is removed immediately and its descendants
|
|
1089
|
+
follow asynchronously. Delete is never blocked by references — flows,
|
|
1090
|
+
exports, imports, and tokens that point at the item are left dangling and
|
|
1091
|
+
fail at runtime, so check `GET /v1/storage/items/{_id}/dependencies`
|
|
1092
|
+
first. A pending multipart upload cannot be deleted here — cancel it with
|
|
1093
|
+
`POST /v1/storage/files/{_id}/cancel`.
|
|
1094
|
+
operationId: deleteStorageItem
|
|
1095
|
+
tags:
|
|
1096
|
+
- File Storage
|
|
1097
|
+
parameters:
|
|
1098
|
+
- name: _id
|
|
1099
|
+
in: path
|
|
1100
|
+
required: true
|
|
1101
|
+
description: Item ID.
|
|
1102
|
+
schema:
|
|
1103
|
+
type: string
|
|
1104
|
+
format: objectId
|
|
1105
|
+
x-celigo-refModel: storageitems
|
|
1106
|
+
examples:
|
|
1107
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1108
|
+
responses:
|
|
1109
|
+
'204':
|
|
1110
|
+
description: |-
|
|
1111
|
+
Item soft-deleted. For a folder, the root is removed and its
|
|
1112
|
+
descendants are removed asynchronously.
|
|
1113
|
+
'401':
|
|
1114
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1115
|
+
'403':
|
|
1116
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1117
|
+
'404':
|
|
1118
|
+
$ref: '#/components/responses/404-not-found'
|
|
1119
|
+
'422':
|
|
1120
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1121
|
+
/v1/storage/items/{_id}/replace:
|
|
1122
|
+
patch:
|
|
1123
|
+
x-internal: false
|
|
1124
|
+
summary: Replace file content
|
|
1125
|
+
description: |-
|
|
1126
|
+
Overwrites an existing file's content in place. Returns presigned upload
|
|
1127
|
+
URLs in the same shape as one initiate-upload file entry; transfer the new
|
|
1128
|
+
bytes to them just as for a new upload. The item's `_id`, name, and folder
|
|
1129
|
+
placement are preserved, so every reference to the file stays intact — use
|
|
1130
|
+
this instead of delete-and-recreate when a file is referenced by flows or
|
|
1131
|
+
exports. The previous content remains downloadable until the replacement
|
|
1132
|
+
finalizes. Rename with `PUT /v1/storage/items/{_id}` instead; this
|
|
1133
|
+
endpoint does not accept a name.
|
|
1134
|
+
operationId: replaceStorageFileContent
|
|
1135
|
+
tags:
|
|
1136
|
+
- File Storage
|
|
1137
|
+
parameters:
|
|
1138
|
+
- name: _id
|
|
1139
|
+
in: path
|
|
1140
|
+
required: true
|
|
1141
|
+
description: ID of the file to replace.
|
|
1142
|
+
schema:
|
|
1143
|
+
type: string
|
|
1144
|
+
format: objectId
|
|
1145
|
+
x-celigo-refModel: storageitems
|
|
1146
|
+
examples:
|
|
1147
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1148
|
+
requestBody:
|
|
1149
|
+
required: true
|
|
1150
|
+
content:
|
|
1151
|
+
application/json:
|
|
1152
|
+
schema:
|
|
1153
|
+
$ref: '#/components/schemas/ReplaceRequest'
|
|
1154
|
+
examples:
|
|
1155
|
+
single:
|
|
1156
|
+
summary: Replace with a single PUT
|
|
1157
|
+
value:
|
|
1158
|
+
mimeType: application/pdf
|
|
1159
|
+
size: 5242880
|
|
1160
|
+
uploadType: single
|
|
1161
|
+
multipart:
|
|
1162
|
+
summary: Replace with a multipart upload
|
|
1163
|
+
value:
|
|
1164
|
+
mimeType: application/pdf
|
|
1165
|
+
size: 5242880
|
|
1166
|
+
uploadType: multipart
|
|
1167
|
+
numParts: 5
|
|
1168
|
+
resumeMultipart:
|
|
1169
|
+
summary: Request the next batch of part URLs
|
|
1170
|
+
value:
|
|
1171
|
+
uploadType: multipart
|
|
1172
|
+
numParts: 5
|
|
1173
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
1174
|
+
issuedPartsCount: 5
|
|
1175
|
+
responses:
|
|
1176
|
+
'200':
|
|
1177
|
+
description: Upload instructions for the replacement content.
|
|
1178
|
+
content:
|
|
1179
|
+
application/json:
|
|
1180
|
+
schema:
|
|
1181
|
+
$ref: '#/components/schemas/UploadResult'
|
|
1182
|
+
examples:
|
|
1183
|
+
single:
|
|
1184
|
+
summary: Single PUT
|
|
1185
|
+
value:
|
|
1186
|
+
_id: 683b2a0e1c3d5f001a9e8b01
|
|
1187
|
+
name: quarterly-report.pdf
|
|
1188
|
+
statusCode: 200
|
|
1189
|
+
body:
|
|
1190
|
+
uploadType: single
|
|
1191
|
+
uploadUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/presigned-put-url
|
|
1192
|
+
multipart:
|
|
1193
|
+
summary: Multipart
|
|
1194
|
+
value:
|
|
1195
|
+
_id: 683b2a0e1c3d5f001a9e8b01
|
|
1196
|
+
name: quarterly-report.pdf
|
|
1197
|
+
statusCode: 200
|
|
1198
|
+
body:
|
|
1199
|
+
uploadType: multipart
|
|
1200
|
+
uploadId: abcD12efGHIjklMN3opQrst
|
|
1201
|
+
partUrls:
|
|
1202
|
+
- partNumber: 1
|
|
1203
|
+
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/part-1
|
|
1204
|
+
- partNumber: 2
|
|
1205
|
+
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/part-2
|
|
1206
|
+
completeUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/complete
|
|
1207
|
+
'400':
|
|
1208
|
+
$ref: '#/components/responses/400-bad-request'
|
|
1209
|
+
'401':
|
|
1210
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1211
|
+
'403':
|
|
1212
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1213
|
+
'404':
|
|
1214
|
+
$ref: '#/components/responses/404-not-found'
|
|
1215
|
+
'409':
|
|
1216
|
+
description: |-
|
|
1217
|
+
A concurrent replace is already in progress for this file
|
|
1218
|
+
(`STORAGE_ITEM_REPLACE_CONFLICT`). Retry once the in-flight
|
|
1219
|
+
replacement finalizes or is abandoned.
|
|
1220
|
+
content:
|
|
1221
|
+
application/json:
|
|
1222
|
+
schema:
|
|
1223
|
+
$ref: '#/components/schemas/Error'
|
|
1224
|
+
examples:
|
|
1225
|
+
default:
|
|
1226
|
+
value:
|
|
1227
|
+
errors:
|
|
1228
|
+
- code: STORAGE_ITEM_REPLACE_CONFLICT
|
|
1229
|
+
message: A replacement upload is already in progress for this file.
|
|
1230
|
+
'422':
|
|
1231
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1232
|
+
/v1/storage/items/{_id}/merge:
|
|
1233
|
+
post:
|
|
1234
|
+
x-internal: false
|
|
1235
|
+
summary: Merge a folder into another
|
|
1236
|
+
description: |-
|
|
1237
|
+
Merges the contents of a source folder into an existing destination
|
|
1238
|
+
folder, then removes the source. Runs asynchronously: the request is
|
|
1239
|
+
validated and queued, and the endpoint immediately returns `202` with a
|
|
1240
|
+
job receipt — contents move in the background and the source folder
|
|
1241
|
+
disappears once the merge completes. A soft-deleted source folder may be
|
|
1242
|
+
merged, which restores its contents into the destination. Folders only —
|
|
1243
|
+
move individual files with the move endpoint. Requires delete access on
|
|
1244
|
+
the source folder and write access on the destination.
|
|
1245
|
+
operationId: mergeStorageFolder
|
|
1246
|
+
tags:
|
|
1247
|
+
- File Storage
|
|
1248
|
+
parameters:
|
|
1249
|
+
- name: _id
|
|
1250
|
+
in: path
|
|
1251
|
+
required: true
|
|
1252
|
+
description: ID of the source folder to merge and remove.
|
|
1253
|
+
schema:
|
|
1254
|
+
type: string
|
|
1255
|
+
format: objectId
|
|
1256
|
+
x-celigo-refModel: storageitems
|
|
1257
|
+
examples:
|
|
1258
|
+
- 6a6e1d9e6ac4879f0ac8006f
|
|
1259
|
+
requestBody:
|
|
1260
|
+
required: true
|
|
1261
|
+
content:
|
|
1262
|
+
application/json:
|
|
1263
|
+
schema:
|
|
1264
|
+
$ref: '#/components/schemas/MergeRequest'
|
|
1265
|
+
examples:
|
|
1266
|
+
default:
|
|
1267
|
+
summary: Merge into another folder
|
|
1268
|
+
value:
|
|
1269
|
+
_destinationId: 6a6e1d9e7042f856e8d731ab
|
|
1270
|
+
responses:
|
|
1271
|
+
'202':
|
|
1272
|
+
description: |-
|
|
1273
|
+
Merge accepted and queued. The source folder remains visible until
|
|
1274
|
+
the background job completes, then is removed.
|
|
1275
|
+
content:
|
|
1276
|
+
application/json:
|
|
1277
|
+
schema:
|
|
1278
|
+
type: object
|
|
1279
|
+
required:
|
|
1280
|
+
- jobId
|
|
1281
|
+
- jobType
|
|
1282
|
+
- status
|
|
1283
|
+
- sourceFolderId
|
|
1284
|
+
- _destinationId
|
|
1285
|
+
properties:
|
|
1286
|
+
jobId:
|
|
1287
|
+
type: string
|
|
1288
|
+
description: Identifier of the queued merge job.
|
|
1289
|
+
examples:
|
|
1290
|
+
- f6b61847-40a8-4c74-91b6-0e641dccee13
|
|
1291
|
+
jobType:
|
|
1292
|
+
type: string
|
|
1293
|
+
enum:
|
|
1294
|
+
- folderMerge
|
|
1295
|
+
x-enumDescriptions:
|
|
1296
|
+
folderMerge: Asynchronous folder-merge job.
|
|
1297
|
+
description: Kind of background job that was queued.
|
|
1298
|
+
status:
|
|
1299
|
+
type: string
|
|
1300
|
+
enum:
|
|
1301
|
+
- accepted
|
|
1302
|
+
x-enumDescriptions:
|
|
1303
|
+
accepted: The merge was validated and queued for processing.
|
|
1304
|
+
description: Acknowledgement state of the request.
|
|
1305
|
+
sourceFolderId:
|
|
1306
|
+
type: string
|
|
1307
|
+
format: objectId
|
|
1308
|
+
description: The source folder being merged and removed.
|
|
1309
|
+
examples:
|
|
1310
|
+
- 6a6e1d9e6ac4879f0ac8006f
|
|
1311
|
+
_destinationId:
|
|
1312
|
+
type: string
|
|
1313
|
+
format: objectId
|
|
1314
|
+
description: The folder receiving the source folder's contents.
|
|
1315
|
+
examples:
|
|
1316
|
+
- 6a6e1d9e7042f856e8d731ab
|
|
1317
|
+
examples:
|
|
1318
|
+
accepted:
|
|
1319
|
+
value:
|
|
1320
|
+
jobId: f6b61847-40a8-4c74-91b6-0e641dccee13
|
|
1321
|
+
jobType: folderMerge
|
|
1322
|
+
status: accepted
|
|
1323
|
+
sourceFolderId: 6a6e1d9e6ac4879f0ac8006f
|
|
1324
|
+
_destinationId: 6a6e1d9e7042f856e8d731ab
|
|
1325
|
+
'400':
|
|
1326
|
+
description: '`_destinationId` is missing from the request body.'
|
|
1327
|
+
content:
|
|
1328
|
+
application/json:
|
|
1329
|
+
schema:
|
|
1330
|
+
$ref: '#/components/schemas/Error'
|
|
1331
|
+
examples:
|
|
1332
|
+
missing_destination:
|
|
1333
|
+
value:
|
|
1334
|
+
errors:
|
|
1335
|
+
- code: STORAGE_MERGE_DESTINATION_REQUIRED
|
|
1336
|
+
message: _destinationId is required in the request body
|
|
1337
|
+
'401':
|
|
1338
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1339
|
+
'403':
|
|
1340
|
+
description: |-
|
|
1341
|
+
Caller lacks delete access on the source or write access on the
|
|
1342
|
+
destination, the source is a protected system folder, or the account
|
|
1343
|
+
is not entitled to Celigo Storage.
|
|
1344
|
+
content:
|
|
1345
|
+
application/json:
|
|
1346
|
+
schema:
|
|
1347
|
+
$ref: '#/components/schemas/Error'
|
|
1348
|
+
'404':
|
|
1349
|
+
description: The source or destination folder does not exist.
|
|
1350
|
+
content:
|
|
1351
|
+
application/json:
|
|
1352
|
+
schema:
|
|
1353
|
+
$ref: '#/components/schemas/Error'
|
|
1354
|
+
'422':
|
|
1355
|
+
description: |-
|
|
1356
|
+
The merge is structurally invalid — the source or destination is not
|
|
1357
|
+
a folder, the source and destination are the same folder, the
|
|
1358
|
+
destination sits inside the source (circular merge), or the merged
|
|
1359
|
+
tree would exceed the maximum folder depth.
|
|
1360
|
+
content:
|
|
1361
|
+
application/json:
|
|
1362
|
+
schema:
|
|
1363
|
+
$ref: '#/components/schemas/Error'
|
|
1364
|
+
/v1/storage/items/{_id}/move:
|
|
1365
|
+
patch:
|
|
1366
|
+
x-internal: false
|
|
1367
|
+
summary: Move an item
|
|
1368
|
+
description: |-
|
|
1369
|
+
Moves a file or folder to a different folder. Metadata only — the content
|
|
1370
|
+
stays in place, the item's `_id` is unchanged so references survive, and
|
|
1371
|
+
quota is unaffected. Moving a folder re-parents the folder immediately and
|
|
1372
|
+
re-anchors its descendants asynchronously, so the response reflects only
|
|
1373
|
+
the moved item itself. A folder cannot be moved into itself or one of its
|
|
1374
|
+
own descendants.
|
|
1375
|
+
operationId: moveStorageItem
|
|
1376
|
+
tags:
|
|
1377
|
+
- File Storage
|
|
1378
|
+
parameters:
|
|
1379
|
+
- name: _id
|
|
1380
|
+
in: path
|
|
1381
|
+
required: true
|
|
1382
|
+
description: ID of the item to move.
|
|
1383
|
+
schema:
|
|
1384
|
+
type: string
|
|
1385
|
+
format: objectId
|
|
1386
|
+
x-celigo-refModel: storageitems
|
|
1387
|
+
examples:
|
|
1388
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1389
|
+
requestBody:
|
|
1390
|
+
required: true
|
|
1391
|
+
content:
|
|
1392
|
+
application/json:
|
|
1393
|
+
schema:
|
|
1394
|
+
$ref: '#/components/schemas/MoveRequest'
|
|
1395
|
+
examples:
|
|
1396
|
+
toFolder:
|
|
1397
|
+
summary: Move into a folder
|
|
1398
|
+
value:
|
|
1399
|
+
_parentId: 684c3b1f2d4e6g002b0h9c34
|
|
1400
|
+
toRoot:
|
|
1401
|
+
summary: Move to the account root
|
|
1402
|
+
value:
|
|
1403
|
+
_parentId: null
|
|
1404
|
+
responses:
|
|
1405
|
+
'200':
|
|
1406
|
+
description: |-
|
|
1407
|
+
The moved item's changed fields. Only the item's own re-parenting is
|
|
1408
|
+
reflected; for a folder, descendants re-anchor asynchronously.
|
|
1409
|
+
content:
|
|
1410
|
+
application/json:
|
|
1411
|
+
schema:
|
|
1412
|
+
type: object
|
|
1413
|
+
required:
|
|
1414
|
+
- _id
|
|
1415
|
+
properties:
|
|
1416
|
+
_id:
|
|
1417
|
+
type: string
|
|
1418
|
+
format: objectId
|
|
1419
|
+
x-celigo-refModel: storageitems
|
|
1420
|
+
description: ID of the moved item.
|
|
1421
|
+
examples:
|
|
1422
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1423
|
+
_parentId:
|
|
1424
|
+
type:
|
|
1425
|
+
- string
|
|
1426
|
+
- 'null'
|
|
1427
|
+
format: objectId
|
|
1428
|
+
x-celigo-refModel: storageitems
|
|
1429
|
+
description: New parent folder, or null if moved to the root.
|
|
1430
|
+
examples:
|
|
1431
|
+
- 684c3b1f2d4e6g002b0h9c34
|
|
1432
|
+
__ancestorIds:
|
|
1433
|
+
type: array
|
|
1434
|
+
description: New ancestor chain from the root to the parent.
|
|
1435
|
+
items:
|
|
1436
|
+
type: string
|
|
1437
|
+
format: objectId
|
|
1438
|
+
x-celigo-refModel: storageitems
|
|
1439
|
+
examples:
|
|
1440
|
+
- - 684c3b1f2d4e6g002b0h9c34
|
|
1441
|
+
examples:
|
|
1442
|
+
default:
|
|
1443
|
+
value:
|
|
1444
|
+
_id: 683b2a0e1c3d5f001a9e8b01
|
|
1445
|
+
_parentId: 684c3b1f2d4e6g002b0h9c34
|
|
1446
|
+
__ancestorIds:
|
|
1447
|
+
- 684c3b1f2d4e6g002b0h9c34
|
|
1448
|
+
'400':
|
|
1449
|
+
$ref: '#/components/responses/400-bad-request'
|
|
1450
|
+
'401':
|
|
1451
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1452
|
+
'403':
|
|
1453
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1454
|
+
'404':
|
|
1455
|
+
$ref: '#/components/responses/404-not-found'
|
|
1456
|
+
'422':
|
|
1457
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1458
|
+
/v1/storage/items/{_id}/copy:
|
|
1459
|
+
post:
|
|
1460
|
+
x-internal: false
|
|
1461
|
+
summary: Copy a file
|
|
1462
|
+
description: |-
|
|
1463
|
+
Creates an independent copy of a file in a destination folder, with a new
|
|
1464
|
+
`_id` and its own copy of the content. Consumes quota equal to the source
|
|
1465
|
+
file's size. Files only — folder copy is not supported. Names are not
|
|
1466
|
+
deduplicated, so copying into the source's own folder without a new name
|
|
1467
|
+
produces a second file with the same name.
|
|
1468
|
+
operationId: copyStorageFile
|
|
1469
|
+
tags:
|
|
1470
|
+
- File Storage
|
|
1471
|
+
parameters:
|
|
1472
|
+
- name: _id
|
|
1473
|
+
in: path
|
|
1474
|
+
required: true
|
|
1475
|
+
description: ID of the file to copy.
|
|
1476
|
+
schema:
|
|
1477
|
+
type: string
|
|
1478
|
+
format: objectId
|
|
1479
|
+
x-celigo-refModel: storageitems
|
|
1480
|
+
examples:
|
|
1481
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1482
|
+
requestBody:
|
|
1483
|
+
required: true
|
|
1484
|
+
content:
|
|
1485
|
+
application/json:
|
|
1486
|
+
schema:
|
|
1487
|
+
$ref: '#/components/schemas/CopyRequest'
|
|
1488
|
+
examples:
|
|
1489
|
+
rename:
|
|
1490
|
+
summary: Copy into a folder with a new name
|
|
1491
|
+
value:
|
|
1492
|
+
_destinationId: 684c3b1f2d4e6g002b0h9c34
|
|
1493
|
+
name: quarterly-report-copy.pdf
|
|
1494
|
+
toRoot:
|
|
1495
|
+
summary: Copy to the account root, keeping the name
|
|
1496
|
+
value:
|
|
1497
|
+
_destinationId: null
|
|
1498
|
+
responses:
|
|
1499
|
+
'201':
|
|
1500
|
+
description: The newly created copy.
|
|
1501
|
+
content:
|
|
1502
|
+
application/json:
|
|
1503
|
+
schema:
|
|
1504
|
+
$ref: '#/components/schemas/StorageItem'
|
|
1505
|
+
examples:
|
|
1506
|
+
default:
|
|
1507
|
+
value:
|
|
1508
|
+
_id: 685d4c2g3e5f7h003c1i0d45
|
|
1509
|
+
type: file
|
|
1510
|
+
name: quarterly-report-copy.pdf
|
|
1511
|
+
_parentId: 684c3b1f2d4e6g002b0h9c34
|
|
1512
|
+
size: 5242880
|
|
1513
|
+
mimeType: application/pdf
|
|
1514
|
+
description: Q1 2026 financial report
|
|
1515
|
+
status: active
|
|
1516
|
+
isSystem: false
|
|
1517
|
+
createdAt: '2026-04-20T10:00:00.000Z'
|
|
1518
|
+
lastModified: '2026-04-20T10:00:00.000Z'
|
|
1519
|
+
'400':
|
|
1520
|
+
$ref: '#/components/responses/400-bad-request'
|
|
1521
|
+
'401':
|
|
1522
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1523
|
+
'403':
|
|
1524
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1525
|
+
'404':
|
|
1526
|
+
$ref: '#/components/responses/404-not-found'
|
|
1527
|
+
'422':
|
|
1528
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1529
|
+
/v1/storage/items/{_id}/restore:
|
|
1530
|
+
post:
|
|
1531
|
+
x-internal: false
|
|
1532
|
+
summary: Restore an item
|
|
1533
|
+
description: |-
|
|
1534
|
+
Restores a soft-deleted item from the recycle bin back to its original
|
|
1535
|
+
location. Restoring a folder also restores the descendants that were
|
|
1536
|
+
removed with it; the folder comes back immediately and its descendants
|
|
1537
|
+
follow asynchronously. Only items deleted directly can be restored — a
|
|
1538
|
+
descendant removed by its parent's deletion comes back only when that
|
|
1539
|
+
parent folder is restored.
|
|
1540
|
+
operationId: restoreStorageItem
|
|
1541
|
+
tags:
|
|
1542
|
+
- File Storage
|
|
1543
|
+
parameters:
|
|
1544
|
+
- name: _id
|
|
1545
|
+
in: path
|
|
1546
|
+
required: true
|
|
1547
|
+
description: ID of the recycle-bin item to restore.
|
|
1548
|
+
schema:
|
|
1549
|
+
type: string
|
|
1550
|
+
format: objectId
|
|
1551
|
+
x-celigo-refModel: storageitems
|
|
1552
|
+
examples:
|
|
1553
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1554
|
+
responses:
|
|
1555
|
+
'204':
|
|
1556
|
+
description: |-
|
|
1557
|
+
Item restored. For a folder, the root is restored and its descendants
|
|
1558
|
+
follow asynchronously.
|
|
1559
|
+
'401':
|
|
1560
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1561
|
+
'403':
|
|
1562
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1563
|
+
'404':
|
|
1564
|
+
$ref: '#/components/responses/404-not-found'
|
|
1565
|
+
'422':
|
|
1566
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1567
|
+
/v1/storage/items/{_id}/purge:
|
|
1568
|
+
delete:
|
|
1569
|
+
x-internal: false
|
|
1570
|
+
summary: Purge an item
|
|
1571
|
+
description: |-
|
|
1572
|
+
Permanently deletes a soft-deleted item from the recycle bin and frees its
|
|
1573
|
+
storage. This cannot be undone. Purging a folder also purges its
|
|
1574
|
+
descendants; the folder and its subtree are removed asynchronously. Only
|
|
1575
|
+
items deleted directly can be purged — a descendant removed by its
|
|
1576
|
+
parent's deletion is purged together with that parent. The item must
|
|
1577
|
+
already be in the recycle bin.
|
|
1578
|
+
operationId: purgeStorageItem
|
|
1579
|
+
tags:
|
|
1580
|
+
- File Storage
|
|
1581
|
+
parameters:
|
|
1582
|
+
- name: _id
|
|
1583
|
+
in: path
|
|
1584
|
+
required: true
|
|
1585
|
+
description: ID of the recycle-bin item to purge.
|
|
1586
|
+
schema:
|
|
1587
|
+
type: string
|
|
1588
|
+
format: objectId
|
|
1589
|
+
x-celigo-refModel: storageitems
|
|
1590
|
+
examples:
|
|
1591
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1592
|
+
responses:
|
|
1593
|
+
'204':
|
|
1594
|
+
description: |-
|
|
1595
|
+
Item permanently deleted. For a folder, the subtree is purged
|
|
1596
|
+
asynchronously.
|
|
1597
|
+
'401':
|
|
1598
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1599
|
+
'403':
|
|
1600
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1601
|
+
'404':
|
|
1602
|
+
$ref: '#/components/responses/404-not-found'
|
|
1603
|
+
'422':
|
|
1604
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1605
|
+
/v1/storage/items/{_id}/dependencies:
|
|
1606
|
+
get:
|
|
1607
|
+
x-internal: false
|
|
1608
|
+
operationId: listStorageItemDependencies
|
|
1609
|
+
tags:
|
|
1610
|
+
- File Storage
|
|
1611
|
+
summary: List dependencies of an item
|
|
1612
|
+
description: |-
|
|
1613
|
+
Returns the resources that reference this item — flows, exports, imports,
|
|
1614
|
+
MCP servers, and access tokens. These references are soft: they never
|
|
1615
|
+
block a delete or move, and go dangling if the item is removed. Check this
|
|
1616
|
+
before deleting or moving an item to see what may break.
|
|
1617
|
+
parameters:
|
|
1618
|
+
- name: _id
|
|
1619
|
+
in: path
|
|
1620
|
+
required: true
|
|
1621
|
+
description: Item ID.
|
|
1622
|
+
schema:
|
|
1623
|
+
type: string
|
|
1624
|
+
format: objectId
|
|
1625
|
+
x-celigo-refModel: storageitems
|
|
1626
|
+
examples:
|
|
1627
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1628
|
+
responses:
|
|
1629
|
+
'200':
|
|
1630
|
+
description: |-
|
|
1631
|
+
Dependency map. Keys are resource-type strings; values are arrays of
|
|
1632
|
+
dependency entries. Returns `{}` when nothing references the item.
|
|
1633
|
+
content:
|
|
1634
|
+
application/json:
|
|
1635
|
+
schema:
|
|
1636
|
+
$ref: '#/components/schemas/DependencyResponse'
|
|
1637
|
+
examples:
|
|
1638
|
+
withDependents:
|
|
1639
|
+
summary: Item referenced by a flow
|
|
1640
|
+
value:
|
|
1641
|
+
flows:
|
|
1642
|
+
- id: 673e486ac12b3453ea0ba99a
|
|
1643
|
+
name: Nightly export
|
|
1644
|
+
paths:
|
|
1645
|
+
- pageGenerators[*]._exportId
|
|
1646
|
+
accessLevel: manage
|
|
1647
|
+
dependencyIds:
|
|
1648
|
+
export:
|
|
1649
|
+
- 673e486adc497ab5e649f1ca
|
|
1650
|
+
empty:
|
|
1651
|
+
summary: No dependents
|
|
1652
|
+
value: {}
|
|
1653
|
+
'401':
|
|
1654
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1655
|
+
'404':
|
|
1656
|
+
$ref: '#/components/responses/404-not-found'
|
|
1657
|
+
/v1/storageitems/{_id}/audit:
|
|
1658
|
+
get:
|
|
1659
|
+
x-internal: false
|
|
1660
|
+
summary: Get audit log for an item
|
|
1661
|
+
description: |-
|
|
1662
|
+
Returns the change history for a storage item — creation, renames and
|
|
1663
|
+
description edits, moves, content replacements, downloads, deletes,
|
|
1664
|
+
restores, and purges — newest first. Each entry records who made the
|
|
1665
|
+
change, when, and which fields were affected.
|
|
1666
|
+
tags:
|
|
1667
|
+
- File Storage
|
|
1668
|
+
operationId: getStorageItemAudit
|
|
1669
|
+
parameters:
|
|
1670
|
+
- name: _id
|
|
1671
|
+
in: path
|
|
1672
|
+
description: Item ID.
|
|
1673
|
+
required: true
|
|
1674
|
+
schema:
|
|
1675
|
+
type: string
|
|
1676
|
+
format: objectId
|
|
1677
|
+
x-celigo-refModel: storageitems
|
|
1678
|
+
examples:
|
|
1679
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1680
|
+
- name: limit
|
|
1681
|
+
in: query
|
|
1682
|
+
description: Maximum number of audit entries to return per page.
|
|
1683
|
+
required: false
|
|
1684
|
+
schema:
|
|
1685
|
+
type: integer
|
|
1686
|
+
minimum: 1
|
|
1687
|
+
maximum: 1000
|
|
1688
|
+
default: 1000
|
|
1689
|
+
examples:
|
|
1690
|
+
- 100
|
|
1691
|
+
- name: after
|
|
1692
|
+
in: query
|
|
1693
|
+
required: false
|
|
1694
|
+
description: |-
|
|
1695
|
+
Opaque pagination cursor for the next page. Take it from the `after`
|
|
1696
|
+
value in the `Link` response header's `rel="next"` URL rather than
|
|
1697
|
+
constructing it.
|
|
1698
|
+
schema:
|
|
1699
|
+
type: string
|
|
1700
|
+
examples:
|
|
1701
|
+
- W3siJGRhdGUiOiIyMDI2LTA1LTAxVDAwOjAwOjAwLjAwMFoifSwiNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0
|
|
1702
|
+
- name: from
|
|
1703
|
+
in: query
|
|
1704
|
+
required: false
|
|
1705
|
+
description: Only return entries at or after this timestamp.
|
|
1706
|
+
schema:
|
|
1707
|
+
type: string
|
|
1708
|
+
format: date-time
|
|
1709
|
+
examples:
|
|
1710
|
+
- '2026-05-01T00:00:00.000Z'
|
|
1711
|
+
- name: to
|
|
1712
|
+
in: query
|
|
1713
|
+
required: false
|
|
1714
|
+
description: Only return entries at or before this timestamp.
|
|
1715
|
+
schema:
|
|
1716
|
+
type: string
|
|
1717
|
+
format: date-time
|
|
1718
|
+
examples:
|
|
1719
|
+
- '2026-05-31T23:59:59.999Z'
|
|
1720
|
+
- name: action
|
|
1721
|
+
in: query
|
|
1722
|
+
required: false
|
|
1723
|
+
description: Filter by the change type. Maps to the `event` field on each entry.
|
|
1724
|
+
schema:
|
|
1725
|
+
type: string
|
|
1726
|
+
enum:
|
|
1727
|
+
- create
|
|
1728
|
+
- update
|
|
1729
|
+
- delete
|
|
1730
|
+
- download
|
|
1731
|
+
- restore
|
|
1732
|
+
- purge
|
|
1733
|
+
examples:
|
|
1734
|
+
- update
|
|
1735
|
+
x-enumDescriptions:
|
|
1736
|
+
create: An item was created.
|
|
1737
|
+
update: An item was renamed, re-described, moved, or had its content replaced.
|
|
1738
|
+
delete: An item was soft-deleted to the recycle bin.
|
|
1739
|
+
download: A presigned download URL was issued for a file.
|
|
1740
|
+
restore: An item was restored from the recycle bin.
|
|
1741
|
+
purge: An item was permanently purged from the recycle bin.
|
|
1742
|
+
- name: source
|
|
1743
|
+
in: query
|
|
1744
|
+
required: false
|
|
1745
|
+
description: Filter by how the change was initiated.
|
|
1746
|
+
schema:
|
|
1747
|
+
type: string
|
|
1748
|
+
enum:
|
|
1749
|
+
- ui
|
|
1750
|
+
- api
|
|
1751
|
+
- system
|
|
1752
|
+
examples:
|
|
1753
|
+
- ui
|
|
1754
|
+
x-enumDescriptions:
|
|
1755
|
+
ui: Change made through the Celigo web UI.
|
|
1756
|
+
api: Change made via the REST API.
|
|
1757
|
+
system: Change made automatically by the platform.
|
|
1758
|
+
- name: _byUserId
|
|
1759
|
+
in: query
|
|
1760
|
+
required: false
|
|
1761
|
+
description: Filter to changes performed by a single user.
|
|
1762
|
+
schema:
|
|
1763
|
+
type: string
|
|
1764
|
+
format: objectId
|
|
1765
|
+
x-celigo-refModel: users
|
|
1766
|
+
examples:
|
|
1767
|
+
- 624cb0346309dc3a543733a2
|
|
1768
|
+
responses:
|
|
1769
|
+
'200':
|
|
1770
|
+
description: Array of audit entries, newest first.
|
|
1771
|
+
headers:
|
|
1772
|
+
Link:
|
|
1773
|
+
description: |-
|
|
1774
|
+
RFC 5988 pagination link. Includes `<...>; rel="next"` with an
|
|
1775
|
+
`after` cursor when more entries exist; absent on the final page.
|
|
1776
|
+
schema:
|
|
1777
|
+
type: string
|
|
1778
|
+
content:
|
|
1779
|
+
application/json:
|
|
1780
|
+
schema:
|
|
1781
|
+
type: array
|
|
1782
|
+
items:
|
|
1783
|
+
type: object
|
|
1784
|
+
properties:
|
|
1785
|
+
_id:
|
|
1786
|
+
type: string
|
|
1787
|
+
format: objectId
|
|
1788
|
+
description: Unique identifier for this audit entry.
|
|
1789
|
+
examples:
|
|
1790
|
+
- 69f63dd77009ea11abf0bce3
|
|
1791
|
+
resourceType:
|
|
1792
|
+
type: string
|
|
1793
|
+
description: Always `storageitem` for this endpoint.
|
|
1794
|
+
examples:
|
|
1795
|
+
- storageitem
|
|
1796
|
+
_resourceId:
|
|
1797
|
+
type: string
|
|
1798
|
+
format: objectId
|
|
1799
|
+
x-celigo-refModel: storageitems
|
|
1800
|
+
description: ID of the item this entry belongs to.
|
|
1801
|
+
examples:
|
|
1802
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
1803
|
+
event:
|
|
1804
|
+
type: string
|
|
1805
|
+
description: Type of change that occurred.
|
|
1806
|
+
enum:
|
|
1807
|
+
- create
|
|
1808
|
+
- update
|
|
1809
|
+
- delete
|
|
1810
|
+
- download
|
|
1811
|
+
- restore
|
|
1812
|
+
- purge
|
|
1813
|
+
x-enumDescriptions:
|
|
1814
|
+
create: Item was created.
|
|
1815
|
+
update: Item was renamed, re-described, moved, or had its content replaced.
|
|
1816
|
+
delete: Item was soft-deleted to the recycle bin.
|
|
1817
|
+
download: A presigned download URL was issued for the file.
|
|
1818
|
+
restore: Item was restored from the recycle bin.
|
|
1819
|
+
purge: Item was permanently purged.
|
|
1820
|
+
source:
|
|
1821
|
+
type: string
|
|
1822
|
+
description: How the change was initiated.
|
|
1823
|
+
enum:
|
|
1824
|
+
- api
|
|
1825
|
+
- ui
|
|
1826
|
+
- system
|
|
1827
|
+
x-enumDescriptions:
|
|
1828
|
+
api: Change made via the REST API.
|
|
1829
|
+
ui: Change made through the Celigo UI.
|
|
1830
|
+
system: Change made by an automated platform process.
|
|
1831
|
+
time:
|
|
1832
|
+
type: string
|
|
1833
|
+
format: date-time
|
|
1834
|
+
description: When the change occurred.
|
|
1835
|
+
examples:
|
|
1836
|
+
- '2026-05-02T18:09:26.975Z'
|
|
1837
|
+
byUser:
|
|
1838
|
+
type: object
|
|
1839
|
+
description: User who made the change.
|
|
1840
|
+
properties:
|
|
1841
|
+
_id:
|
|
1842
|
+
type: string
|
|
1843
|
+
format: objectId
|
|
1844
|
+
x-celigo-refModel: users
|
|
1845
|
+
description: User ID.
|
|
1846
|
+
examples:
|
|
1847
|
+
- 624cb0346309dc3a543733a2
|
|
1848
|
+
email:
|
|
1849
|
+
type: string
|
|
1850
|
+
format: email
|
|
1851
|
+
description: User email address.
|
|
1852
|
+
examples:
|
|
1853
|
+
- user@example.com
|
|
1854
|
+
name:
|
|
1855
|
+
type: string
|
|
1856
|
+
description: User display name.
|
|
1857
|
+
examples:
|
|
1858
|
+
- Tyler Lamparter
|
|
1859
|
+
fieldChanges:
|
|
1860
|
+
type: array
|
|
1861
|
+
description: Fields that were modified.
|
|
1862
|
+
items:
|
|
1863
|
+
type: object
|
|
1864
|
+
properties:
|
|
1865
|
+
fieldPath:
|
|
1866
|
+
type: string
|
|
1867
|
+
description: Dot-notation path of the changed field.
|
|
1868
|
+
examples:
|
|
1869
|
+
- name
|
|
1870
|
+
oldValue:
|
|
1871
|
+
description: Previous value (absent on create).
|
|
1872
|
+
newValue:
|
|
1873
|
+
description: New value (absent on delete).
|
|
1874
|
+
deletedInfo:
|
|
1875
|
+
type: object
|
|
1876
|
+
description: Metadata about the deleted item. Present on `delete` events.
|
|
1877
|
+
properties:
|
|
1878
|
+
name:
|
|
1879
|
+
type: string
|
|
1880
|
+
description: Name of the item at the time of deletion.
|
|
1881
|
+
examples:
|
|
1882
|
+
- old-report.pdf
|
|
1883
|
+
examples:
|
|
1884
|
+
default:
|
|
1885
|
+
value:
|
|
1886
|
+
- _id: 69f63dd77009ea11abf0bce3
|
|
1887
|
+
resourceType: storageitem
|
|
1888
|
+
_resourceId: 683b2a0e1c3d5f001a9e8b01
|
|
1889
|
+
source: api
|
|
1890
|
+
event: update
|
|
1891
|
+
time: '2026-05-02T18:09:26.975Z'
|
|
1892
|
+
byUser:
|
|
1893
|
+
_id: 624cb0346309dc3a543733a2
|
|
1894
|
+
email: user@example.com
|
|
1895
|
+
name: Tyler Lamparter
|
|
1896
|
+
fieldChanges:
|
|
1897
|
+
- fieldPath: name
|
|
1898
|
+
oldValue: report.pdf
|
|
1899
|
+
newValue: quarterly-report.pdf
|
|
1900
|
+
'204':
|
|
1901
|
+
description: No audit entries exist for this item.
|
|
1902
|
+
'400':
|
|
1903
|
+
$ref: '#/components/responses/400-bad-request'
|
|
1904
|
+
'401':
|
|
1905
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1906
|
+
'404':
|
|
1907
|
+
$ref: '#/components/responses/404-not-found'
|
|
1908
|
+
'422':
|
|
1909
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1910
|
+
/v1/storage/usage:
|
|
1911
|
+
get:
|
|
1912
|
+
x-internal: false
|
|
1913
|
+
summary: Get storage usage
|
|
1914
|
+
description: |-
|
|
1915
|
+
Returns account-wide storage usage and entitlement, aggregated across all
|
|
1916
|
+
environments: bytes in use (active and recycle bin), the licensed quota,
|
|
1917
|
+
the hard limit at which uploads are blocked, and whether the account is in
|
|
1918
|
+
overage.
|
|
1919
|
+
operationId: getStorageUsage
|
|
1920
|
+
tags:
|
|
1921
|
+
- File Storage
|
|
1922
|
+
parameters:
|
|
1923
|
+
- name: includeSystem
|
|
1924
|
+
in: query
|
|
1925
|
+
required: false
|
|
1926
|
+
description: When true, also returns `systemUsage` — the bytes consumed by system items.
|
|
1927
|
+
schema:
|
|
1928
|
+
type: boolean
|
|
1929
|
+
default: false
|
|
1930
|
+
examples:
|
|
1931
|
+
- true
|
|
1932
|
+
responses:
|
|
1933
|
+
'200':
|
|
1934
|
+
description: Account-wide usage and entitlement.
|
|
1935
|
+
content:
|
|
1936
|
+
application/json:
|
|
1937
|
+
schema:
|
|
1938
|
+
$ref: '#/components/schemas/Usage'
|
|
1939
|
+
examples:
|
|
1940
|
+
default:
|
|
1941
|
+
value:
|
|
1942
|
+
activeUsage: 536870912
|
|
1943
|
+
recycleBinUsage: 104857600
|
|
1944
|
+
totalUsage: 641728512
|
|
1945
|
+
systemUsage: 52428800
|
|
1946
|
+
maxAllowedUsage: 1073741824
|
|
1947
|
+
isOverage: false
|
|
1948
|
+
hardLimit: 1288490188
|
|
1949
|
+
overage: 0
|
|
1950
|
+
'401':
|
|
1951
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
1952
|
+
'403':
|
|
1953
|
+
$ref: '#/components/responses/403-forbidden'
|
|
1954
|
+
'422':
|
|
1955
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1956
|
+
/v1/storage/usage/environments:
|
|
1957
|
+
get:
|
|
1958
|
+
x-internal: false
|
|
1959
|
+
summary: Get storage usage by environment
|
|
1960
|
+
description: |-
|
|
1961
|
+
Returns the same account-wide totals as `GET /v1/storage/usage`, broken
|
|
1962
|
+
down per environment. Use it to see which environment is consuming the
|
|
1963
|
+
account's shared quota.
|
|
1964
|
+
operationId: getStorageUsageByEnvironment
|
|
1965
|
+
tags:
|
|
1966
|
+
- File Storage
|
|
1967
|
+
parameters:
|
|
1968
|
+
- name: includeSystem
|
|
1969
|
+
in: query
|
|
1970
|
+
required: false
|
|
1971
|
+
description: When true, also returns `systemUsage` in the account-wide totals.
|
|
1972
|
+
schema:
|
|
1973
|
+
type: boolean
|
|
1974
|
+
default: false
|
|
1975
|
+
examples:
|
|
1976
|
+
- true
|
|
1977
|
+
responses:
|
|
1978
|
+
'200':
|
|
1979
|
+
description: Per-environment breakdown with account-wide totals.
|
|
1980
|
+
content:
|
|
1981
|
+
application/json:
|
|
1982
|
+
schema:
|
|
1983
|
+
$ref: '#/components/schemas/UsageEnvironments'
|
|
1984
|
+
examples:
|
|
1985
|
+
default:
|
|
1986
|
+
value:
|
|
1987
|
+
environments:
|
|
1988
|
+
- _envUserId: 60a1b2c3d4e5f6001a2b3c4d
|
|
1989
|
+
name: Production
|
|
1990
|
+
activeUsage: 429496729
|
|
1991
|
+
recycleBinUsage: 52428800
|
|
1992
|
+
totalUsage: 481925529
|
|
1993
|
+
- _envUserId: 60a1b2c3d4e5f6001a2b3c4e
|
|
1994
|
+
name: Sandbox
|
|
1995
|
+
activeUsage: 107374182
|
|
1996
|
+
recycleBinUsage: 52428800
|
|
1997
|
+
totalUsage: 159802982
|
|
1998
|
+
activeUsage: 536870912
|
|
1999
|
+
recycleBinUsage: 104857600
|
|
2000
|
+
totalUsage: 641728512
|
|
2001
|
+
maxAllowedUsage: 1073741824
|
|
2002
|
+
isOverage: false
|
|
2003
|
+
hardLimit: 1288490188
|
|
2004
|
+
overage: 0
|
|
2005
|
+
'401':
|
|
2006
|
+
$ref: '#/components/responses/401-unauthorized'
|
|
2007
|
+
'403':
|
|
2008
|
+
$ref: '#/components/responses/403-forbidden'
|
|
2009
|
+
'422':
|
|
2010
|
+
$ref: '#/components/responses/422-unprocessable-entity'
|
|
2011
|
+
components:
|
|
2012
|
+
securitySchemes:
|
|
2013
|
+
bearerAuth:
|
|
2014
|
+
type: http
|
|
2015
|
+
scheme: bearer
|
|
2016
|
+
schemas:
|
|
2017
|
+
UploadRequestFile:
|
|
2018
|
+
type: object
|
|
2019
|
+
description: One file to upload within an initiate-upload request.
|
|
2020
|
+
required:
|
|
2021
|
+
- name
|
|
2022
|
+
- uploadType
|
|
2023
|
+
properties:
|
|
2024
|
+
_id:
|
|
2025
|
+
type: string
|
|
2026
|
+
format: objectId
|
|
2027
|
+
x-celigo-refModel: storageitems
|
|
2028
|
+
description: |-
|
|
2029
|
+
Existing pending item to continue. Set it only to request the next
|
|
2030
|
+
batch of part URLs for an in-progress multipart upload, alongside
|
|
2031
|
+
`uploadId` and `issuedPartsCount`. Omit for a new upload.
|
|
2032
|
+
examples:
|
|
2033
|
+
- 683b2a0e1c3d5f001a9e8b03
|
|
2034
|
+
name:
|
|
2035
|
+
type: string
|
|
2036
|
+
maxLength: 256
|
|
2037
|
+
description: File name, including extension. Duplicate names in a folder are allowed.
|
|
2038
|
+
examples:
|
|
2039
|
+
- logo.png
|
|
2040
|
+
mimeType:
|
|
2041
|
+
type: string
|
|
2042
|
+
maxLength: 256
|
|
2043
|
+
description: |-
|
|
2044
|
+
Media type to record for the file and serve as its download
|
|
2045
|
+
Content-Type. Optional; sniffed by callers from the file extension
|
|
2046
|
+
when omitted.
|
|
2047
|
+
examples:
|
|
2048
|
+
- image/png
|
|
2049
|
+
size:
|
|
2050
|
+
type: integer
|
|
2051
|
+
format: int64
|
|
2052
|
+
minimum: 0
|
|
2053
|
+
description: |-
|
|
2054
|
+
Declared size in bytes. Used to reserve quota up front. When omitted,
|
|
2055
|
+
the backend reserves a worst-case estimate (1 GB for single,
|
|
2056
|
+
`numParts` × 5 GB for multipart) and reconciles to the real size when
|
|
2057
|
+
the upload finalizes.
|
|
2058
|
+
examples:
|
|
2059
|
+
- 245760
|
|
2060
|
+
uploadType:
|
|
2061
|
+
type: string
|
|
2062
|
+
enum:
|
|
2063
|
+
- single
|
|
2064
|
+
- multipart
|
|
2065
|
+
x-enumDescriptions:
|
|
2066
|
+
single: One presigned PUT for the whole file. Use for files up to 5 GB.
|
|
2067
|
+
multipart: Chunked upload with per-part URLs. Required beyond 5 GB.
|
|
2068
|
+
description: |-
|
|
2069
|
+
How the file will be transferred. Use single for files up to 5 GB;
|
|
2070
|
+
use multipart for larger files, which returns per-part URLs plus a
|
|
2071
|
+
complete URL.
|
|
2072
|
+
numParts:
|
|
2073
|
+
type: integer
|
|
2074
|
+
minimum: 1
|
|
2075
|
+
description: |-
|
|
2076
|
+
Total number of parts the file will be split into. Required when
|
|
2077
|
+
uploadType is multipart; the response returns presigned URLs for as
|
|
2078
|
+
many parts as the part budget allows.
|
|
2079
|
+
examples:
|
|
2080
|
+
- 50
|
|
2081
|
+
uploadId:
|
|
2082
|
+
type: string
|
|
2083
|
+
description: |-
|
|
2084
|
+
S3 multipart upload ID from a prior initiate response. Provide with
|
|
2085
|
+
`issuedPartsCount` (and `_id`) to resume and request the next batch
|
|
2086
|
+
of part URLs.
|
|
2087
|
+
examples:
|
|
2088
|
+
- abcD12efGHIjklMN3opQrst
|
|
2089
|
+
issuedPartsCount:
|
|
2090
|
+
type: integer
|
|
2091
|
+
minimum: 0
|
|
2092
|
+
description: |-
|
|
2093
|
+
Number of part URLs already issued for this upload. Provide together
|
|
2094
|
+
with `uploadId` to resume; the response continues numbering after
|
|
2095
|
+
this value.
|
|
2096
|
+
examples:
|
|
2097
|
+
- 5
|
|
2098
|
+
InitiateUploadRequest:
|
|
2099
|
+
type: object
|
|
2100
|
+
description: Reserves quota and requests presigned upload URLs for one or more files.
|
|
2101
|
+
required:
|
|
2102
|
+
- files
|
|
2103
|
+
properties:
|
|
2104
|
+
_parentId:
|
|
2105
|
+
type:
|
|
2106
|
+
- string
|
|
2107
|
+
- 'null'
|
|
2108
|
+
format: objectId
|
|
2109
|
+
x-celigo-refModel: storageitems
|
|
2110
|
+
description: |-
|
|
2111
|
+
Folder to create the files in. Omit or pass null to upload to the
|
|
2112
|
+
account root. Must reference an existing active folder.
|
|
2113
|
+
examples:
|
|
2114
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
2115
|
+
files:
|
|
2116
|
+
type: array
|
|
2117
|
+
minItems: 1
|
|
2118
|
+
description: Files to initiate. Each entry is validated and reserved independently.
|
|
2119
|
+
items:
|
|
2120
|
+
$ref: '#/components/schemas/UploadRequestFile'
|
|
2121
|
+
PartUrl:
|
|
2122
|
+
type: object
|
|
2123
|
+
description: A presigned URL for uploading one part of a multipart upload.
|
|
2124
|
+
required:
|
|
2125
|
+
- partNumber
|
|
2126
|
+
- url
|
|
2127
|
+
properties:
|
|
2128
|
+
partNumber:
|
|
2129
|
+
type: integer
|
|
2130
|
+
minimum: 1
|
|
2131
|
+
description: |-
|
|
2132
|
+
1-based index of this part. Send it back as the S3 `partNumber`
|
|
2133
|
+
when uploading, and keep each part's returned `ETag` to finalize
|
|
2134
|
+
the upload.
|
|
2135
|
+
examples:
|
|
2136
|
+
- 6
|
|
2137
|
+
url:
|
|
2138
|
+
type: string
|
|
2139
|
+
format: uri
|
|
2140
|
+
description: Presigned S3 URL to PUT this part's bytes to.
|
|
2141
|
+
examples:
|
|
2142
|
+
- https://integrator-file-storage.s3.us-west-2.amazonaws.com/...
|
|
2143
|
+
UploadBody:
|
|
2144
|
+
type: object
|
|
2145
|
+
description: |-
|
|
2146
|
+
Presigned-URL instructions for one file. The fields present depend on
|
|
2147
|
+
`uploadType`: a single PUT returns one `uploadUrl`; a multipart upload
|
|
2148
|
+
returns an `uploadId`, a batch of `partUrls`, and a `completeUrl`.
|
|
2149
|
+
required:
|
|
2150
|
+
- uploadType
|
|
2151
|
+
properties:
|
|
2152
|
+
uploadType:
|
|
2153
|
+
type: string
|
|
2154
|
+
enum:
|
|
2155
|
+
- single
|
|
2156
|
+
- multipart
|
|
2157
|
+
x-enumDescriptions:
|
|
2158
|
+
single: One presigned PUT for the whole file. Used for files up to 5 GB.
|
|
2159
|
+
multipart: Per-part presigned PUTs plus a complete URL. Required beyond 5 GB.
|
|
2160
|
+
description: Transfer mechanism the caller must use for this file.
|
|
2161
|
+
uploadUrl:
|
|
2162
|
+
type: string
|
|
2163
|
+
format: uri
|
|
2164
|
+
description: |-
|
|
2165
|
+
Presigned S3 URL to PUT the file's bytes to in a single request.
|
|
2166
|
+
Present when uploadType is single. Expires after one hour; use
|
|
2167
|
+
`POST /v1/storage/files/refresh-urls` to reissue.
|
|
2168
|
+
examples:
|
|
2169
|
+
- https://integrator-file-storage.s3.us-west-2.amazonaws.com/...
|
|
2170
|
+
uploadId:
|
|
2171
|
+
type: string
|
|
2172
|
+
description: |-
|
|
2173
|
+
S3 multipart upload identifier. Present when uploadType is
|
|
2174
|
+
multipart. Pass it to refresh-urls to fetch later part batches and
|
|
2175
|
+
to cancel the upload.
|
|
2176
|
+
examples:
|
|
2177
|
+
- abcD12efGHIjklMN3opQrst
|
|
2178
|
+
partUrls:
|
|
2179
|
+
type: array
|
|
2180
|
+
description: |-
|
|
2181
|
+
Presigned URLs for the next batch of parts. Present when uploadType
|
|
2182
|
+
is multipart. A request may return fewer parts than requested when
|
|
2183
|
+
the account-wide part budget is constrained; fetch the remaining
|
|
2184
|
+
parts with refresh-urls.
|
|
2185
|
+
items:
|
|
2186
|
+
$ref: '#/components/schemas/PartUrl'
|
|
2187
|
+
completeUrl:
|
|
2188
|
+
type: string
|
|
2189
|
+
format: uri
|
|
2190
|
+
description: |-
|
|
2191
|
+
Presigned URL to POST the ordered list of part numbers and ETags to,
|
|
2192
|
+
finalizing the multipart upload. Present when uploadType is multipart.
|
|
2193
|
+
examples:
|
|
2194
|
+
- https://integrator-file-storage.s3.us-west-2.amazonaws.com/...
|
|
2195
|
+
UploadError:
|
|
2196
|
+
type: object
|
|
2197
|
+
description: A per-file failure within a batch upload response.
|
|
2198
|
+
required:
|
|
2199
|
+
- code
|
|
2200
|
+
- message
|
|
2201
|
+
properties:
|
|
2202
|
+
code:
|
|
2203
|
+
type: string
|
|
2204
|
+
description: Machine-readable storage error code.
|
|
2205
|
+
examples:
|
|
2206
|
+
- STORAGE_INVALID_MIME_TYPE
|
|
2207
|
+
message:
|
|
2208
|
+
type: string
|
|
2209
|
+
description: Human-readable explanation of the failure.
|
|
2210
|
+
examples:
|
|
2211
|
+
- Invalid MIME type
|
|
2212
|
+
UploadResult:
|
|
2213
|
+
type: object
|
|
2214
|
+
description: |-
|
|
2215
|
+
Outcome for one file in an upload response. On success, `statusCode` is
|
|
2216
|
+
200 and `body` carries the presigned-URL instructions; on failure,
|
|
2217
|
+
`statusCode` is a 4xx and `errors` explains why. Each file in a batch is
|
|
2218
|
+
validated independently, so a single response can mix successes and
|
|
2219
|
+
failures.
|
|
2220
|
+
required:
|
|
2221
|
+
- name
|
|
2222
|
+
- statusCode
|
|
2223
|
+
properties:
|
|
2224
|
+
_id:
|
|
2225
|
+
type: string
|
|
2226
|
+
format: objectId
|
|
2227
|
+
x-celigo-refModel: storageitems
|
|
2228
|
+
description: |-
|
|
2229
|
+
ID of the pending item this result refers to. Present once the item
|
|
2230
|
+
is created; absent when the file failed validation before creation.
|
|
2231
|
+
Use it to upload, refresh URLs, cancel, or download once active.
|
|
2232
|
+
examples:
|
|
2233
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
2234
|
+
name:
|
|
2235
|
+
type: string
|
|
2236
|
+
description: File name echoed back from the request, to correlate results.
|
|
2237
|
+
examples:
|
|
2238
|
+
- logo.png
|
|
2239
|
+
statusCode:
|
|
2240
|
+
type: integer
|
|
2241
|
+
description: Per-file result status, mirroring HTTP status semantics.
|
|
2242
|
+
examples:
|
|
2243
|
+
- 200
|
|
2244
|
+
body:
|
|
2245
|
+
$ref: '#/components/schemas/UploadBody'
|
|
2246
|
+
errors:
|
|
2247
|
+
type: array
|
|
2248
|
+
description: Reasons the file was rejected. Present when statusCode is a 4xx.
|
|
2249
|
+
items:
|
|
2250
|
+
$ref: '#/components/schemas/UploadError'
|
|
2251
|
+
InitiateUploadResponse:
|
|
2252
|
+
type: object
|
|
2253
|
+
description: Per-file upload instructions, in the same order as the request.
|
|
2254
|
+
required:
|
|
2255
|
+
- files
|
|
2256
|
+
properties:
|
|
2257
|
+
files:
|
|
2258
|
+
type: array
|
|
2259
|
+
items:
|
|
2260
|
+
$ref: '#/components/schemas/UploadResult'
|
|
2261
|
+
Error:
|
|
2262
|
+
type: object
|
|
2263
|
+
description: Standard error response envelope returned by integrator.io APIs.
|
|
2264
|
+
properties:
|
|
2265
|
+
errors:
|
|
2266
|
+
type: array
|
|
2267
|
+
description: List of errors that occurred while processing the request.
|
|
2268
|
+
items:
|
|
2269
|
+
type: object
|
|
2270
|
+
properties:
|
|
2271
|
+
code:
|
|
2272
|
+
oneOf:
|
|
2273
|
+
- type: string
|
|
2274
|
+
- type: integer
|
|
2275
|
+
description: |-
|
|
2276
|
+
Machine-readable error code. Usually a string like
|
|
2277
|
+
`invalid_ref`, `missing_required_field`, or `unauthorized`;
|
|
2278
|
+
may be an **integer** when the error mirrors an upstream HTTP
|
|
2279
|
+
status (e.g. `500`) — most commonly returned by connection-ping
|
|
2280
|
+
and adaptor-proxy responses.
|
|
2281
|
+
message:
|
|
2282
|
+
type: string
|
|
2283
|
+
description: Human-readable description of the error.
|
|
2284
|
+
field:
|
|
2285
|
+
type: string
|
|
2286
|
+
description: |-
|
|
2287
|
+
Optional pointer to the document field that caused the error.
|
|
2288
|
+
Used by structural validation errors (`missing_required_field`,
|
|
2289
|
+
`invalid_ref`) to indicate which field is at fault
|
|
2290
|
+
(e.g. `_id`, `type`, `http.baseURI`).
|
|
2291
|
+
source:
|
|
2292
|
+
type: string
|
|
2293
|
+
description: |-
|
|
2294
|
+
Optional origin layer for the error — e.g. `application` when
|
|
2295
|
+
the error came from the remote system the adaptor called,
|
|
2296
|
+
`connector` when the adaptor itself rejected the request.
|
|
2297
|
+
required:
|
|
2298
|
+
- message
|
|
2299
|
+
required:
|
|
2300
|
+
- errors
|
|
2301
|
+
RefreshUrlsRequest:
|
|
2302
|
+
type: object
|
|
2303
|
+
description: Reissues presigned URLs for pending uploads whose URLs have expired.
|
|
2304
|
+
required:
|
|
2305
|
+
- items
|
|
2306
|
+
properties:
|
|
2307
|
+
items:
|
|
2308
|
+
type: array
|
|
2309
|
+
minItems: 1
|
|
2310
|
+
description: Pending uploads to refresh. Each is processed independently.
|
|
2311
|
+
items:
|
|
2312
|
+
type: object
|
|
2313
|
+
required:
|
|
2314
|
+
- _id
|
|
2315
|
+
- uploadType
|
|
2316
|
+
properties:
|
|
2317
|
+
_id:
|
|
2318
|
+
type: string
|
|
2319
|
+
format: objectId
|
|
2320
|
+
x-celigo-refModel: storageitems
|
|
2321
|
+
description: Pending item to reissue URLs for.
|
|
2322
|
+
examples:
|
|
2323
|
+
- 683b2a0e1c3d5f001a9e8b03
|
|
2324
|
+
uploadType:
|
|
2325
|
+
type: string
|
|
2326
|
+
enum:
|
|
2327
|
+
- single
|
|
2328
|
+
- multipart
|
|
2329
|
+
x-enumDescriptions:
|
|
2330
|
+
single: Reissue the single PUT URL.
|
|
2331
|
+
multipart: Reissue URLs for the part numbers in `partNumbers`.
|
|
2332
|
+
description: Must match the upload type the item was initiated with.
|
|
2333
|
+
uploadId:
|
|
2334
|
+
type: string
|
|
2335
|
+
description: S3 multipart upload ID. Required when uploadType is multipart.
|
|
2336
|
+
examples:
|
|
2337
|
+
- abcD12efGHIjklMN3opQrst
|
|
2338
|
+
partNumbers:
|
|
2339
|
+
type: array
|
|
2340
|
+
description: |-
|
|
2341
|
+
Part numbers to reissue URLs for. Required when uploadType is
|
|
2342
|
+
multipart. Must continue sequentially after the last issued
|
|
2343
|
+
batch. Already-uploaded parts are preserved.
|
|
2344
|
+
items:
|
|
2345
|
+
type: integer
|
|
2346
|
+
minimum: 1
|
|
2347
|
+
examples:
|
|
2348
|
+
- - 3
|
|
2349
|
+
- 4
|
|
2350
|
+
- 5
|
|
2351
|
+
RefreshUrlsResponse:
|
|
2352
|
+
type: object
|
|
2353
|
+
description: Per-item refreshed upload instructions.
|
|
2354
|
+
required:
|
|
2355
|
+
- items
|
|
2356
|
+
properties:
|
|
2357
|
+
items:
|
|
2358
|
+
type: array
|
|
2359
|
+
items:
|
|
2360
|
+
$ref: '#/components/schemas/UploadResult'
|
|
2361
|
+
StorageItem:
|
|
2362
|
+
type: object
|
|
2363
|
+
description: A file or folder stored in Celigo Storage.
|
|
2364
|
+
properties:
|
|
2365
|
+
_id:
|
|
2366
|
+
type: string
|
|
2367
|
+
format: objectId
|
|
2368
|
+
readOnly: true
|
|
2369
|
+
x-celigo-refModel: storageitems
|
|
2370
|
+
description: |-
|
|
2371
|
+
Unique identifier for the item. Pass it to download, move, copy,
|
|
2372
|
+
replace, rename, or delete the item; folders and files share one
|
|
2373
|
+
ID space.
|
|
2374
|
+
examples:
|
|
2375
|
+
- 683b2a0e1c3d5f001a9e8b01
|
|
2376
|
+
type:
|
|
2377
|
+
type: string
|
|
2378
|
+
enum:
|
|
2379
|
+
- file
|
|
2380
|
+
- folder
|
|
2381
|
+
readOnly: true
|
|
2382
|
+
x-enumDescriptions:
|
|
2383
|
+
file: A content-bearing object backed by storage and counted against quota.
|
|
2384
|
+
folder: An organizational container with no content and no storage cost.
|
|
2385
|
+
description: |-
|
|
2386
|
+
Distinguishes a content-bearing file from an organizational folder.
|
|
2387
|
+
Fixed when the item is created and never changes.
|
|
2388
|
+
name:
|
|
2389
|
+
type: string
|
|
2390
|
+
maxLength: 256
|
|
2391
|
+
description: |-
|
|
2392
|
+
Display name, including the extension for files (for example
|
|
2393
|
+
`orders.csv`). Two items with the same name can coexist in one
|
|
2394
|
+
folder — the name is not a unique key.
|
|
2395
|
+
examples:
|
|
2396
|
+
- logo.png
|
|
2397
|
+
_parentId:
|
|
2398
|
+
type:
|
|
2399
|
+
- string
|
|
2400
|
+
- 'null'
|
|
2401
|
+
format: objectId
|
|
2402
|
+
readOnly: true
|
|
2403
|
+
x-celigo-refModel: storageitems
|
|
2404
|
+
description: |-
|
|
2405
|
+
Folder that contains this item. Null when the item sits at the
|
|
2406
|
+
account root.
|
|
2407
|
+
examples:
|
|
2408
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
2409
|
+
__ancestorIds:
|
|
2410
|
+
type: array
|
|
2411
|
+
readOnly: true
|
|
2412
|
+
description: |-
|
|
2413
|
+
Folder IDs from the root down to the immediate parent, in order.
|
|
2414
|
+
Empty for root-level items. Rewritten automatically when the item
|
|
2415
|
+
or any ancestor folder is moved.
|
|
2416
|
+
items:
|
|
2417
|
+
type: string
|
|
2418
|
+
format: objectId
|
|
2419
|
+
x-celigo-refModel: storageitems
|
|
2420
|
+
examples:
|
|
2421
|
+
- - 683a1f2e9b0c4d001e8f7a23
|
|
2422
|
+
size:
|
|
2423
|
+
type: integer
|
|
2424
|
+
format: int64
|
|
2425
|
+
readOnly: true
|
|
2426
|
+
description: |-
|
|
2427
|
+
File size in bytes. Present when type is file; folders carry no
|
|
2428
|
+
size. While an upload is pending this reflects the reserved quota,
|
|
2429
|
+
and is reconciled to the actual byte count once the upload finalizes.
|
|
2430
|
+
examples:
|
|
2431
|
+
- 245760
|
|
2432
|
+
mimeType:
|
|
2433
|
+
type: string
|
|
2434
|
+
maxLength: 256
|
|
2435
|
+
readOnly: true
|
|
2436
|
+
description: |-
|
|
2437
|
+
Media type recorded at upload time, used to set the download
|
|
2438
|
+
Content-Type. Present when type is file; absent for folders and for
|
|
2439
|
+
files uploaded without a declared type.
|
|
2440
|
+
examples:
|
|
2441
|
+
- image/png
|
|
2442
|
+
description:
|
|
2443
|
+
type: string
|
|
2444
|
+
maxLength: 1000
|
|
2445
|
+
description: Optional caller-supplied note describing the item.
|
|
2446
|
+
examples:
|
|
2447
|
+
- Quarterly financial reports
|
|
2448
|
+
status:
|
|
2449
|
+
type: string
|
|
2450
|
+
enum:
|
|
2451
|
+
- pending
|
|
2452
|
+
- active
|
|
2453
|
+
readOnly: true
|
|
2454
|
+
x-enumDescriptions:
|
|
2455
|
+
pending: Upload reserved but not yet finalized; the file cannot be downloaded, moved, or copied.
|
|
2456
|
+
active: Fully uploaded and usable. Folders are always active.
|
|
2457
|
+
description: |-
|
|
2458
|
+
Upload lifecycle state. A file is created pending at initiate-upload
|
|
2459
|
+
and flips to active once S3 confirms the bytes; folders are created
|
|
2460
|
+
active.
|
|
2461
|
+
isSystem:
|
|
2462
|
+
type: boolean
|
|
2463
|
+
readOnly: true
|
|
2464
|
+
description: |-
|
|
2465
|
+
When true, the platform created the item (for example a system or
|
|
2466
|
+
integration folder) and protects it — move, content replace, copy,
|
|
2467
|
+
delete, and purge are rejected with `STORAGE_SYSTEM_ITEM_PROTECTED`.
|
|
2468
|
+
deletedAt:
|
|
2469
|
+
type: string
|
|
2470
|
+
format: date-time
|
|
2471
|
+
readOnly: true
|
|
2472
|
+
description: |-
|
|
2473
|
+
Timestamp when the item was soft-deleted to the recycle bin. Present
|
|
2474
|
+
only for recycle-bin items; the item is permanently purged 30 days
|
|
2475
|
+
after this time unless restored.
|
|
2476
|
+
examples:
|
|
2477
|
+
- '2026-04-27T10:00:00.000Z'
|
|
2478
|
+
deletedBy:
|
|
2479
|
+
type: string
|
|
2480
|
+
readOnly: true
|
|
2481
|
+
description: |-
|
|
2482
|
+
Who soft-deleted the item — a user ID for a direct delete, or
|
|
2483
|
+
`cascadeDelete` for a descendant removed when its parent folder was
|
|
2484
|
+
deleted. Present only for recycle-bin items. Cascade-deleted items
|
|
2485
|
+
can be recovered only by restoring the folder that was deleted
|
|
2486
|
+
directly.
|
|
2487
|
+
examples:
|
|
2488
|
+
- 60a1b2c3d4e5f6001a2b3c4d
|
|
2489
|
+
location:
|
|
2490
|
+
type: object
|
|
2491
|
+
readOnly: true
|
|
2492
|
+
description: |-
|
|
2493
|
+
Folder that contains this search hit. Present only in search-mode
|
|
2494
|
+
results from `GET /v1/storage/items` (when the `search` query
|
|
2495
|
+
parameter is set).
|
|
2496
|
+
properties:
|
|
2497
|
+
_id:
|
|
2498
|
+
type: string
|
|
2499
|
+
format: objectId
|
|
2500
|
+
x-celigo-refModel: storageitems
|
|
2501
|
+
description: ID of the containing folder.
|
|
2502
|
+
examples:
|
|
2503
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
2504
|
+
name:
|
|
2505
|
+
type: string
|
|
2506
|
+
description: Name of the containing folder.
|
|
2507
|
+
examples:
|
|
2508
|
+
- My Files
|
|
2509
|
+
createdAt:
|
|
2510
|
+
type: string
|
|
2511
|
+
format: date-time
|
|
2512
|
+
readOnly: true
|
|
2513
|
+
description: Timestamp when the item was created.
|
|
2514
|
+
examples:
|
|
2515
|
+
- '2026-03-28T09:00:00.000Z'
|
|
2516
|
+
lastModified:
|
|
2517
|
+
type: string
|
|
2518
|
+
format: date-time
|
|
2519
|
+
readOnly: true
|
|
2520
|
+
description: |-
|
|
2521
|
+
Timestamp of the most recent metadata change. Updated on rename,
|
|
2522
|
+
move, and content replace, and when the folder's direct children
|
|
2523
|
+
change.
|
|
2524
|
+
examples:
|
|
2525
|
+
- '2026-03-28T14:30:00.000Z'
|
|
2526
|
+
required:
|
|
2527
|
+
- _id
|
|
2528
|
+
- type
|
|
2529
|
+
- name
|
|
2530
|
+
- status
|
|
2531
|
+
- isSystem
|
|
2532
|
+
- createdAt
|
|
2533
|
+
- lastModified
|
|
2534
|
+
CreateFolderRequest:
|
|
2535
|
+
type: object
|
|
2536
|
+
description: Request body for creating a folder.
|
|
2537
|
+
required:
|
|
2538
|
+
- name
|
|
2539
|
+
properties:
|
|
2540
|
+
name:
|
|
2541
|
+
type: string
|
|
2542
|
+
maxLength: 256
|
|
2543
|
+
description: Folder name. Duplicate names within the same parent are allowed.
|
|
2544
|
+
examples:
|
|
2545
|
+
- Reports
|
|
2546
|
+
_parentId:
|
|
2547
|
+
type:
|
|
2548
|
+
- string
|
|
2549
|
+
- 'null'
|
|
2550
|
+
format: objectId
|
|
2551
|
+
x-celigo-refModel: storageitems
|
|
2552
|
+
description: |-
|
|
2553
|
+
Parent folder to create this folder in. Omit or pass null to create
|
|
2554
|
+
it at the account root. Must reference an existing active folder.
|
|
2555
|
+
examples:
|
|
2556
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
2557
|
+
description:
|
|
2558
|
+
type: string
|
|
2559
|
+
maxLength: 1000
|
|
2560
|
+
description: Optional note describing the folder.
|
|
2561
|
+
examples:
|
|
2562
|
+
- Quarterly financial reports
|
|
2563
|
+
BulkMoveResults:
|
|
2564
|
+
type: object
|
|
2565
|
+
description: Per-id move results, one entry per source id.
|
|
2566
|
+
properties:
|
|
2567
|
+
results:
|
|
2568
|
+
type: array
|
|
2569
|
+
items:
|
|
2570
|
+
type: object
|
|
2571
|
+
required:
|
|
2572
|
+
- _id
|
|
2573
|
+
- status
|
|
2574
|
+
properties:
|
|
2575
|
+
_id:
|
|
2576
|
+
type: string
|
|
2577
|
+
format: objectId
|
|
2578
|
+
x-celigo-refModel: storageitems
|
|
2579
|
+
description: Source item id this entry corresponds to.
|
|
2580
|
+
status:
|
|
2581
|
+
type: string
|
|
2582
|
+
enum:
|
|
2583
|
+
- success
|
|
2584
|
+
- error
|
|
2585
|
+
x-enumDescriptions:
|
|
2586
|
+
success: The item was moved.
|
|
2587
|
+
error: The item failed to move; see `errorCode` and `message`.
|
|
2588
|
+
description: Outcome for this item.
|
|
2589
|
+
_parentId:
|
|
2590
|
+
type:
|
|
2591
|
+
- string
|
|
2592
|
+
- 'null'
|
|
2593
|
+
format: objectId
|
|
2594
|
+
x-celigo-refModel: storageitems
|
|
2595
|
+
description: New parent folder (null for the root). Present on success.
|
|
2596
|
+
__ancestorIds:
|
|
2597
|
+
type: array
|
|
2598
|
+
description: New ancestor chain from the root. Present on success.
|
|
2599
|
+
items:
|
|
2600
|
+
type: string
|
|
2601
|
+
format: objectId
|
|
2602
|
+
x-celigo-refModel: storageitems
|
|
2603
|
+
type:
|
|
2604
|
+
type: string
|
|
2605
|
+
enum:
|
|
2606
|
+
- file
|
|
2607
|
+
- folder
|
|
2608
|
+
x-enumDescriptions:
|
|
2609
|
+
file: The moved item is a file.
|
|
2610
|
+
folder: The moved item is a folder (descendants re-anchor asynchronously).
|
|
2611
|
+
description: Type of the moved item. Present on success.
|
|
2612
|
+
errorCode:
|
|
2613
|
+
type: string
|
|
2614
|
+
description: Error code for this item. Present on error.
|
|
2615
|
+
message:
|
|
2616
|
+
type: string
|
|
2617
|
+
description: Human-readable failure reason. Present on error.
|
|
2618
|
+
UpdateRequest:
|
|
2619
|
+
type: object
|
|
2620
|
+
description: |-
|
|
2621
|
+
Request body for renaming an item or changing its description. Provide
|
|
2622
|
+
`name`, `description`, or both. Folder placement is changed with the move
|
|
2623
|
+
endpoint, not here — `_parentId` and `__ancestorIds` are rejected.
|
|
2624
|
+
properties:
|
|
2625
|
+
name:
|
|
2626
|
+
type: string
|
|
2627
|
+
maxLength: 256
|
|
2628
|
+
description: New display name for the item.
|
|
2629
|
+
examples:
|
|
2630
|
+
- quarterly-report-final.pdf
|
|
2631
|
+
description:
|
|
2632
|
+
type: string
|
|
2633
|
+
maxLength: 1000
|
|
2634
|
+
description: New description. Pass an empty string to clear it.
|
|
2635
|
+
examples:
|
|
2636
|
+
- Updated Q1 2026 financial report
|
|
2637
|
+
ReplaceRequest:
|
|
2638
|
+
type: object
|
|
2639
|
+
description: |-
|
|
2640
|
+
Requests presigned URLs to overwrite an existing file's content in place.
|
|
2641
|
+
Same shape as one initiate-upload file entry, minus `name` — the existing
|
|
2642
|
+
name, `_id`, and folder placement are preserved. Rename with
|
|
2643
|
+
`PUT /v1/storage/items/{_id}` instead.
|
|
2644
|
+
required:
|
|
2645
|
+
- uploadType
|
|
2646
|
+
properties:
|
|
2647
|
+
mimeType:
|
|
2648
|
+
type: string
|
|
2649
|
+
maxLength: 256
|
|
2650
|
+
description: |-
|
|
2651
|
+
New media type for the replaced content. Optional; the existing
|
|
2652
|
+
mimeType is kept when omitted.
|
|
2653
|
+
examples:
|
|
2654
|
+
- application/pdf
|
|
2655
|
+
size:
|
|
2656
|
+
type: integer
|
|
2657
|
+
format: int64
|
|
2658
|
+
minimum: 0
|
|
2659
|
+
description: |-
|
|
2660
|
+
Declared size in bytes of the replacement content, used to reserve
|
|
2661
|
+
quota. Reconciled to the real size when the upload finalizes.
|
|
2662
|
+
examples:
|
|
2663
|
+
- 5242880
|
|
2664
|
+
uploadType:
|
|
2665
|
+
type: string
|
|
2666
|
+
enum:
|
|
2667
|
+
- single
|
|
2668
|
+
- multipart
|
|
2669
|
+
x-enumDescriptions:
|
|
2670
|
+
single: One presigned PUT for the whole file. Use for content up to 5 GB.
|
|
2671
|
+
multipart: Chunked upload with per-part URLs. Required beyond 5 GB.
|
|
2672
|
+
description: How the replacement content will be transferred.
|
|
2673
|
+
numParts:
|
|
2674
|
+
type: integer
|
|
2675
|
+
minimum: 1
|
|
2676
|
+
description: Number of parts the replacement will be split into. Required when uploadType is multipart.
|
|
2677
|
+
examples:
|
|
2678
|
+
- 5
|
|
2679
|
+
uploadId:
|
|
2680
|
+
type: string
|
|
2681
|
+
description: |-
|
|
2682
|
+
S3 multipart upload ID from a prior replace response. Provide with
|
|
2683
|
+
`issuedPartsCount` to resume and request the next batch of part URLs.
|
|
2684
|
+
examples:
|
|
2685
|
+
- abcD12efGHIjklMN3opQrst
|
|
2686
|
+
issuedPartsCount:
|
|
2687
|
+
type: integer
|
|
2688
|
+
minimum: 0
|
|
2689
|
+
description: |-
|
|
2690
|
+
Number of part URLs already issued. Provide together with `uploadId`
|
|
2691
|
+
to resume an in-progress replacement.
|
|
2692
|
+
examples:
|
|
2693
|
+
- 5
|
|
2694
|
+
MergeRequest:
|
|
2695
|
+
type: object
|
|
2696
|
+
description: Request body for merging a folder into another folder.
|
|
2697
|
+
required:
|
|
2698
|
+
- _destinationId
|
|
2699
|
+
properties:
|
|
2700
|
+
_destinationId:
|
|
2701
|
+
type: string
|
|
2702
|
+
format: objectId
|
|
2703
|
+
x-celigo-refModel: storageitems
|
|
2704
|
+
description: |-
|
|
2705
|
+
Destination folder that receives the source folder's contents. Must
|
|
2706
|
+
reference an existing active folder that is different from the source
|
|
2707
|
+
and not one of its descendants.
|
|
2708
|
+
examples:
|
|
2709
|
+
- 6a6e1d9e7042f856e8d731ab
|
|
2710
|
+
trigger:
|
|
2711
|
+
type: string
|
|
2712
|
+
enum:
|
|
2713
|
+
- move
|
|
2714
|
+
- rename
|
|
2715
|
+
default: move
|
|
2716
|
+
x-enumDescriptions:
|
|
2717
|
+
move: Record the merge as a move operation.
|
|
2718
|
+
rename: Record the merge as a rename operation.
|
|
2719
|
+
description: |-
|
|
2720
|
+
How the merge is recorded. Unrecognized values fall back to `move`.
|
|
2721
|
+
Ignored when the source folder is soft-deleted — the platform then
|
|
2722
|
+
records the merge as a restore automatically.
|
|
2723
|
+
MoveRequest:
|
|
2724
|
+
type: object
|
|
2725
|
+
description: Request body for moving an item to a different folder.
|
|
2726
|
+
required:
|
|
2727
|
+
- _parentId
|
|
2728
|
+
properties:
|
|
2729
|
+
_parentId:
|
|
2730
|
+
type:
|
|
2731
|
+
- string
|
|
2732
|
+
- 'null'
|
|
2733
|
+
format: objectId
|
|
2734
|
+
x-celigo-refModel: storageitems
|
|
2735
|
+
description: |-
|
|
2736
|
+
Destination folder. Pass null to move the item to the account root.
|
|
2737
|
+
The key is required even when null. Must differ from the current
|
|
2738
|
+
parent, must be an active folder, and — for a folder — must not be
|
|
2739
|
+
the item itself or one of its descendants.
|
|
2740
|
+
examples:
|
|
2741
|
+
- 684c3b1f2d4e6g002b0h9c34
|
|
2742
|
+
CopyRequest:
|
|
2743
|
+
type: object
|
|
2744
|
+
description: Request body for copying a file.
|
|
2745
|
+
properties:
|
|
2746
|
+
_destinationId:
|
|
2747
|
+
type:
|
|
2748
|
+
- string
|
|
2749
|
+
- 'null'
|
|
2750
|
+
format: objectId
|
|
2751
|
+
x-celigo-refModel: storageitems
|
|
2752
|
+
description: |-
|
|
2753
|
+
Destination folder for the copy. Pass null to copy to the account
|
|
2754
|
+
root. Must reference an existing active folder.
|
|
2755
|
+
examples:
|
|
2756
|
+
- 684c3b1f2d4e6g002b0h9c34
|
|
2757
|
+
name:
|
|
2758
|
+
type: string
|
|
2759
|
+
maxLength: 256
|
|
2760
|
+
description: |-
|
|
2761
|
+
Name for the copy. Defaults to the source file's name when omitted.
|
|
2762
|
+
Duplicate names are allowed, so a copy into the source's own folder
|
|
2763
|
+
with no name produces a second file with the same name.
|
|
2764
|
+
examples:
|
|
2765
|
+
- quarterly-report-copy.pdf
|
|
2766
|
+
DependencyEntry:
|
|
2767
|
+
type: object
|
|
2768
|
+
description: A single resource that depends on the queried resource.
|
|
2769
|
+
properties:
|
|
2770
|
+
id:
|
|
2771
|
+
type: string
|
|
2772
|
+
description: Unique identifier of the dependent resource.
|
|
2773
|
+
examples:
|
|
2774
|
+
- 61f92026dd053843b5d72350
|
|
2775
|
+
name:
|
|
2776
|
+
type: string
|
|
2777
|
+
description: Display name of the dependent resource.
|
|
2778
|
+
examples:
|
|
2779
|
+
- Import Orders to NetSuite
|
|
2780
|
+
paths:
|
|
2781
|
+
type: array
|
|
2782
|
+
description: |-
|
|
2783
|
+
Dot-notation paths within the dependent resource that reference
|
|
2784
|
+
the target resource. `[*]` denotes array elements.
|
|
2785
|
+
items:
|
|
2786
|
+
type: string
|
|
2787
|
+
examples:
|
|
2788
|
+
- - hooks.preSavePage._scriptId
|
|
2789
|
+
accessLevel:
|
|
2790
|
+
type: string
|
|
2791
|
+
description: The caller's access level on the dependent resource.
|
|
2792
|
+
examples:
|
|
2793
|
+
- manage
|
|
2794
|
+
dependencyIds:
|
|
2795
|
+
type: object
|
|
2796
|
+
description: |-
|
|
2797
|
+
Map of resource types to arrays of IDs that this dependent
|
|
2798
|
+
resource references on the target. Keys are singular or plural
|
|
2799
|
+
resource type strings; values are arrays of ID strings.
|
|
2800
|
+
additionalProperties:
|
|
2801
|
+
type: array
|
|
2802
|
+
items:
|
|
2803
|
+
type: string
|
|
2804
|
+
example:
|
|
2805
|
+
script:
|
|
2806
|
+
- 64ff4b21612a134bd2f45531
|
|
2807
|
+
required:
|
|
2808
|
+
- id
|
|
2809
|
+
- name
|
|
2810
|
+
- paths
|
|
2811
|
+
- accessLevel
|
|
2812
|
+
- dependencyIds
|
|
2813
|
+
DependencyResponse:
|
|
2814
|
+
type: object
|
|
2815
|
+
description: |
|
|
2816
|
+
Map of dependent-resource types to arrays of dependency entries.
|
|
2817
|
+
Keys are plural resource type strings (e.g. `flows`, `imports`,
|
|
2818
|
+
`connections`). An empty object `{}` means no dependents.
|
|
2819
|
+
additionalProperties:
|
|
2820
|
+
type: array
|
|
2821
|
+
items:
|
|
2822
|
+
$ref: '#/components/schemas/DependencyEntry'
|
|
2823
|
+
example:
|
|
2824
|
+
exports:
|
|
2825
|
+
- id: 64ff4b21612a134bd2f45534
|
|
2826
|
+
name: Bank FTP Export
|
|
2827
|
+
paths:
|
|
2828
|
+
- hooks.preSavePage._scriptId
|
|
2829
|
+
accessLevel: manage
|
|
2830
|
+
dependencyIds:
|
|
2831
|
+
script:
|
|
2832
|
+
- 64ff4b21612a134bd2f45531
|
|
2833
|
+
flows:
|
|
2834
|
+
- id: 64ff4b22612a134bd2f45538
|
|
2835
|
+
name: CAMT-053 to Celigo CAM Format
|
|
2836
|
+
paths:
|
|
2837
|
+
- pageGenerators[*]._exportId
|
|
2838
|
+
accessLevel: manage
|
|
2839
|
+
dependencyIds:
|
|
2840
|
+
export:
|
|
2841
|
+
- 64ff4b21612a134bd2f45534
|
|
2842
|
+
Usage:
|
|
2843
|
+
type: object
|
|
2844
|
+
description: Account-wide storage usage and entitlement, aggregated across all environments.
|
|
2845
|
+
required:
|
|
2846
|
+
- activeUsage
|
|
2847
|
+
- recycleBinUsage
|
|
2848
|
+
- totalUsage
|
|
2849
|
+
- maxAllowedUsage
|
|
2850
|
+
- isOverage
|
|
2851
|
+
- hardLimit
|
|
2852
|
+
- overage
|
|
2853
|
+
properties:
|
|
2854
|
+
activeUsage:
|
|
2855
|
+
type: integer
|
|
2856
|
+
format: int64
|
|
2857
|
+
description: Bytes consumed by active and pending files.
|
|
2858
|
+
examples:
|
|
2859
|
+
- 536870912
|
|
2860
|
+
recycleBinUsage:
|
|
2861
|
+
type: integer
|
|
2862
|
+
format: int64
|
|
2863
|
+
description: Bytes consumed by soft-deleted files still retained in the recycle bin.
|
|
2864
|
+
examples:
|
|
2865
|
+
- 104857600
|
|
2866
|
+
totalUsage:
|
|
2867
|
+
type: integer
|
|
2868
|
+
format: int64
|
|
2869
|
+
description: |-
|
|
2870
|
+
Sum of activeUsage and recycleBinUsage. This is the figure checked
|
|
2871
|
+
against hardLimit when an upload is attempted.
|
|
2872
|
+
examples:
|
|
2873
|
+
- 641728512
|
|
2874
|
+
systemUsage:
|
|
2875
|
+
type: integer
|
|
2876
|
+
format: int64
|
|
2877
|
+
description: |-
|
|
2878
|
+
Bytes consumed by system items (folders and files the platform
|
|
2879
|
+
created). Present only when the request sets `includeSystem=true`.
|
|
2880
|
+
examples:
|
|
2881
|
+
- 52428800
|
|
2882
|
+
maxAllowedUsage:
|
|
2883
|
+
type: integer
|
|
2884
|
+
format: int64
|
|
2885
|
+
description: Storage quota in bytes granted by the account's license.
|
|
2886
|
+
examples:
|
|
2887
|
+
- 1073741824
|
|
2888
|
+
isOverage:
|
|
2889
|
+
type: boolean
|
|
2890
|
+
description: |-
|
|
2891
|
+
When true, totalUsage has passed maxAllowedUsage and the account is
|
|
2892
|
+
consuming the overage buffer. Uploads still succeed until totalUsage
|
|
2893
|
+
reaches hardLimit.
|
|
2894
|
+
hardLimit:
|
|
2895
|
+
type: integer
|
|
2896
|
+
format: int64
|
|
2897
|
+
description: |-
|
|
2898
|
+
Byte ceiling at which further uploads are rejected with
|
|
2899
|
+
`STORAGE_QUOTA_EXCEEDED`. Equals maxAllowedUsage plus the licensed
|
|
2900
|
+
overage buffer, or maxAllowedUsage exactly when overage is disabled.
|
|
2901
|
+
examples:
|
|
2902
|
+
- 1288490188
|
|
2903
|
+
overage:
|
|
2904
|
+
type: integer
|
|
2905
|
+
format: int64
|
|
2906
|
+
description: Bytes currently consumed beyond maxAllowedUsage. Zero when not in overage.
|
|
2907
|
+
examples:
|
|
2908
|
+
- 0
|
|
2909
|
+
EnvironmentUsage:
|
|
2910
|
+
type: object
|
|
2911
|
+
description: Storage usage for a single environment.
|
|
2912
|
+
required:
|
|
2913
|
+
- _envUserId
|
|
2914
|
+
- activeUsage
|
|
2915
|
+
- recycleBinUsage
|
|
2916
|
+
- totalUsage
|
|
2917
|
+
properties:
|
|
2918
|
+
_envUserId:
|
|
2919
|
+
type: string
|
|
2920
|
+
format: objectId
|
|
2921
|
+
description: Environment user ID this breakdown belongs to.
|
|
2922
|
+
examples:
|
|
2923
|
+
- 60a1b2c3d4e5f6001a2b3c4d
|
|
2924
|
+
name:
|
|
2925
|
+
type: string
|
|
2926
|
+
description: Environment name, such as Production or Sandbox.
|
|
2927
|
+
examples:
|
|
2928
|
+
- Production
|
|
2929
|
+
activeUsage:
|
|
2930
|
+
type: integer
|
|
2931
|
+
format: int64
|
|
2932
|
+
description: Bytes consumed by active and pending files in this environment.
|
|
2933
|
+
examples:
|
|
2934
|
+
- 429496729
|
|
2935
|
+
recycleBinUsage:
|
|
2936
|
+
type: integer
|
|
2937
|
+
format: int64
|
|
2938
|
+
description: Bytes consumed by this environment's soft-deleted files.
|
|
2939
|
+
examples:
|
|
2940
|
+
- 52428800
|
|
2941
|
+
totalUsage:
|
|
2942
|
+
type: integer
|
|
2943
|
+
format: int64
|
|
2944
|
+
description: Sum of this environment's activeUsage and recycleBinUsage.
|
|
2945
|
+
examples:
|
|
2946
|
+
- 481925529
|
|
2947
|
+
UsageEnvironments:
|
|
2948
|
+
type: object
|
|
2949
|
+
description: |-
|
|
2950
|
+
Per-environment usage breakdown alongside the same account-wide totals
|
|
2951
|
+
returned by `GET /v1/storage/usage`.
|
|
2952
|
+
required:
|
|
2953
|
+
- environments
|
|
2954
|
+
- activeUsage
|
|
2955
|
+
- recycleBinUsage
|
|
2956
|
+
- totalUsage
|
|
2957
|
+
- maxAllowedUsage
|
|
2958
|
+
- isOverage
|
|
2959
|
+
- hardLimit
|
|
2960
|
+
- overage
|
|
2961
|
+
properties:
|
|
2962
|
+
environments:
|
|
2963
|
+
type: array
|
|
2964
|
+
description: One entry per environment in the account.
|
|
2965
|
+
items:
|
|
2966
|
+
$ref: '#/components/schemas/EnvironmentUsage'
|
|
2967
|
+
activeUsage:
|
|
2968
|
+
type: integer
|
|
2969
|
+
format: int64
|
|
2970
|
+
description: Account-wide bytes consumed by active and pending files.
|
|
2971
|
+
examples:
|
|
2972
|
+
- 536870912
|
|
2973
|
+
recycleBinUsage:
|
|
2974
|
+
type: integer
|
|
2975
|
+
format: int64
|
|
2976
|
+
description: Account-wide bytes consumed by soft-deleted files.
|
|
2977
|
+
examples:
|
|
2978
|
+
- 104857600
|
|
2979
|
+
totalUsage:
|
|
2980
|
+
type: integer
|
|
2981
|
+
format: int64
|
|
2982
|
+
description: Account-wide sum of activeUsage and recycleBinUsage.
|
|
2983
|
+
examples:
|
|
2984
|
+
- 641728512
|
|
2985
|
+
systemUsage:
|
|
2986
|
+
type: integer
|
|
2987
|
+
format: int64
|
|
2988
|
+
description: |-
|
|
2989
|
+
Account-wide bytes consumed by system items. Present only when the
|
|
2990
|
+
request sets `includeSystem=true`.
|
|
2991
|
+
examples:
|
|
2992
|
+
- 52428800
|
|
2993
|
+
maxAllowedUsage:
|
|
2994
|
+
type: integer
|
|
2995
|
+
format: int64
|
|
2996
|
+
description: Storage quota in bytes granted by the account's license.
|
|
2997
|
+
examples:
|
|
2998
|
+
- 1073741824
|
|
2999
|
+
isOverage:
|
|
3000
|
+
type: boolean
|
|
3001
|
+
description: When true, totalUsage has passed maxAllowedUsage and the account is in the overage buffer.
|
|
3002
|
+
hardLimit:
|
|
3003
|
+
type: integer
|
|
3004
|
+
format: int64
|
|
3005
|
+
description: Byte ceiling at which further uploads are rejected.
|
|
3006
|
+
examples:
|
|
3007
|
+
- 1288490188
|
|
3008
|
+
overage:
|
|
3009
|
+
type: integer
|
|
3010
|
+
format: int64
|
|
3011
|
+
description: Bytes currently consumed beyond maxAllowedUsage. Zero when not in overage.
|
|
3012
|
+
examples:
|
|
3013
|
+
- 0
|
|
3014
|
+
responses:
|
|
3015
|
+
400-bad-request:
|
|
3016
|
+
description: |
|
|
3017
|
+
Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
|
|
3018
|
+
content:
|
|
3019
|
+
application/json:
|
|
3020
|
+
schema:
|
|
3021
|
+
$ref: '#/components/schemas/Error'
|
|
3022
|
+
examples:
|
|
3023
|
+
default:
|
|
3024
|
+
value:
|
|
3025
|
+
errors:
|
|
3026
|
+
- code: invalid_request
|
|
3027
|
+
message: The request body failed validation.
|
|
3028
|
+
401-unauthorized:
|
|
3029
|
+
description: |-
|
|
3030
|
+
Unauthorized. The request lacks a valid bearer token, or the provided token
|
|
3031
|
+
failed to authenticate.
|
|
3032
|
+
|
|
3033
|
+
Note: the 401 response is produced by the auth middleware **before** the
|
|
3034
|
+
request reaches the endpoint handler, so it does **not** follow the
|
|
3035
|
+
standard `{errors: [...]}` envelope. Instead the body is a bare
|
|
3036
|
+
`{message: string}` object with no `code`, no `errors` array. Callers
|
|
3037
|
+
handling 401s should key off the HTTP status and the `message` string,
|
|
3038
|
+
not try to destructure an `errors[]`.
|
|
3039
|
+
content:
|
|
3040
|
+
application/json:
|
|
3041
|
+
schema:
|
|
3042
|
+
type: object
|
|
3043
|
+
properties:
|
|
3044
|
+
message:
|
|
3045
|
+
type: string
|
|
3046
|
+
description: |-
|
|
3047
|
+
Human-readable description of the auth failure. Known values:
|
|
3048
|
+
- `"Unauthorized"` — no `Authorization` header on the request.
|
|
3049
|
+
- `"Bearer Authentication Failed"` — header present but token
|
|
3050
|
+
is invalid, revoked, or expired.
|
|
3051
|
+
required:
|
|
3052
|
+
- message
|
|
3053
|
+
examples:
|
|
3054
|
+
missing_token:
|
|
3055
|
+
summary: No Authorization header sent
|
|
3056
|
+
value:
|
|
3057
|
+
message: Unauthorized
|
|
3058
|
+
invalid_token:
|
|
3059
|
+
summary: Bearer token invalid or revoked
|
|
3060
|
+
value:
|
|
3061
|
+
message: Bearer Authentication Failed
|
|
3062
|
+
403-forbidden:
|
|
3063
|
+
description: |
|
|
3064
|
+
Forbidden. The authenticated caller does not have permission to perform this operation.
|
|
3065
|
+
content:
|
|
3066
|
+
application/json:
|
|
3067
|
+
schema:
|
|
3068
|
+
$ref: '#/components/schemas/Error'
|
|
3069
|
+
examples:
|
|
3070
|
+
default:
|
|
3071
|
+
value:
|
|
3072
|
+
errors:
|
|
3073
|
+
- code: forbidden
|
|
3074
|
+
message: You do not have permission to access this resource.
|
|
3075
|
+
404-not-found:
|
|
3076
|
+
description: |
|
|
3077
|
+
Not found. The requested resource does not exist or is not visible to the caller.
|
|
3078
|
+
content:
|
|
3079
|
+
application/json:
|
|
3080
|
+
schema:
|
|
3081
|
+
$ref: '#/components/schemas/Error'
|
|
3082
|
+
examples:
|
|
3083
|
+
default:
|
|
3084
|
+
value:
|
|
3085
|
+
errors:
|
|
3086
|
+
- code: not_found
|
|
3087
|
+
message: The requested resource was not found.
|
|
3088
|
+
422-unprocessable-entity:
|
|
3089
|
+
description: |
|
|
3090
|
+
Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
|
|
3091
|
+
content:
|
|
3092
|
+
application/json:
|
|
3093
|
+
schema:
|
|
3094
|
+
$ref: '#/components/schemas/Error'
|
|
3095
|
+
examples:
|
|
3096
|
+
default:
|
|
3097
|
+
value:
|
|
3098
|
+
errors:
|
|
3099
|
+
- code: unprocessable_entity
|
|
3100
|
+
message: The request could not be processed due to a semantic error.
|
|
3101
|
+
x-internal: false
|
|
3102
|
+
x-enable-proxy: true
|