@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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/account.yml +592 -0
  4. package/dist/agent.yml +908 -0
  5. package/dist/ai-agent.yml +5471 -0
  6. package/dist/api.yml +4140 -0
  7. package/dist/apim.yml +1286 -0
  8. package/dist/asynchelper.yml +3391 -0
  9. package/dist/audit.yml +2006 -0
  10. package/dist/connection.yml +8665 -0
  11. package/dist/connector.yml +1406 -0
  12. package/dist/ediprofile.yml +911 -0
  13. package/dist/editransaction.yml +1210 -0
  14. package/dist/enduser.yml +1724 -0
  15. package/dist/environment.yml +568 -0
  16. package/dist/eventreport.yml +692 -0
  17. package/dist/export.yml +17610 -0
  18. package/dist/filedefinition.yml +1396 -0
  19. package/dist/filestorage.yml +3102 -0
  20. package/dist/flow.yml +7928 -0
  21. package/dist/guardrail.yml +2763 -0
  22. package/dist/httpconnector.yml +2277 -0
  23. package/dist/httpconnectorendpoint.yml +722 -0
  24. package/dist/httpconnectorresource.yml +396 -0
  25. package/dist/iclient.yml +4452 -0
  26. package/dist/import.yml +15381 -0
  27. package/dist/integration.yml +4406 -0
  28. package/dist/job.yml +2014 -0
  29. package/dist/lookupcache.yml +1325 -0
  30. package/dist/marketplace.yml +685 -0
  31. package/dist/mcp-oauth-provider.yml +590 -0
  32. package/dist/mcp-server.yml +2656 -0
  33. package/dist/notification.yml +488 -0
  34. package/dist/processor.yml +1253 -0
  35. package/dist/profile.yml +455 -0
  36. package/dist/recyclebin.yml +768 -0
  37. package/dist/script.yml +1128 -0
  38. package/dist/stack.yml +1291 -0
  39. package/dist/state.yml +894 -0
  40. package/dist/subscription.yml +1405 -0
  41. package/dist/sync.yml +4857 -0
  42. package/dist/tag.yml +553 -0
  43. package/dist/template.yml +897 -0
  44. package/dist/tool.yml +33656 -0
  45. package/dist/tradingpartnerconnector.yml +1490 -0
  46. package/dist/user.yml +831 -0
  47. package/package.json +41 -0
  48. 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