storage
Store files inside your integrator.io account, with no external file provider to configure. Celigo Storage is a folder tree that the platform hosts for you. Exports and imports read and write files there instead of an SFTP, S3, or Google Drive connection. MCP servers serve stored files to MCP clients as resources.
This command group manages that tree: list, upload, download, organize, and delete files and folders.
REST API: File Storage
celigo storage <subcommand> [args] [flags]Supports all global flags.
Subcommands
list
List the items in one folder (the root by default), with optional MIME, sort, and date filters.
search <query>
Search items by name recursively across the whole tree.
get <ids...>
Get metadata for one or more items by ID — a batch get, up to 100 ids per call.
upload <localPath>
Upload a local file, choosing a single or multipart transfer by size.
download <id> [localPath]
Download a stored file to disk or stdout.
replace <id> <localPath>
Replace a file's contents in place, keeping its ID, name, parent, and references.
create-folder <name>
Create a folder.
set <id> key=value …
Edit a storage item's name and/or description.
move <ids...> --to <parentId>
Move up to 100 files or folders into another folder.
copy <id> --to <parentId>
Copy a file into another folder (files only).
merge <id> --to <destinationId>
Merge a folder's contents into another folder and remove the source (folders only).
delete <id>
Soft-delete an item to the recycle bin.
cancel-upload <id>
Abort an in-progress multipart upload.
celigo storage list
List the items in a single folder. With no --parent, list returns the root. With --parent <id>, it returns that folder's immediate children. Listings are one folder deep. Use search to look through the whole tree.
Signature
Arguments
None.
Flags
--parent <id>
string
—
List the contents of this folder. Omit it for the root.
--mime <types...>
string (repeatable)
—
Keep only items whose MIME type matches one of the values; several types are OR-matched. Sent as one mimeType query parameter per value.
--sort <field>
string
—
Field to sort by, for example name, lastModified, or size. Sent as sort_by.
--order <dir>
string
—
Sort direction, asc or desc. Sent as sort_order.
--modified-gte <iso>
ISO 8601
—
Keep items whose lastModified is at or after this timestamp (inclusive). Sent as lastModified_gte.
--modified-lte <iso>
ISO 8601
—
Keep items whose lastModified is at or before this timestamp (inclusive). Sent as lastModified_lte.
Default table columns: _id, type, name, size, mimeType, status, lastModified.
Example
Corresponds to: GET /v1/storage/items — with _parentId and the filter parameters above as query parameters. The CLI follows the response's Link: rel="next" cursor and returns the accumulated pages as one list.
celigo storage search
Search items by name across the entire tree, regardless of which folder holds them. search accepts the same MIME, sort, and date filters as list.
Signature
Arguments
<query>
string
Yes
Text to match against item names. Matching is recursive from the root.
Flags
--mime <types...>
string (repeatable)
—
Keep only items whose MIME type matches one of the values; several types are OR-matched. Sent as one mimeType query parameter per value.
--sort <field>
string
—
Field to sort by, for example name, lastModified, or size. Sent as sort_by.
--order <dir>
string
—
Sort direction, asc or desc. Sent as sort_order.
--modified-gte <iso>
ISO 8601
—
Keep items whose lastModified is at or after this timestamp (inclusive). Sent as lastModified_gte.
--modified-lte <iso>
ISO 8601
—
Keep items whose lastModified is at or before this timestamp (inclusive). Sent as lastModified_lte.
Default table columns: _id, type, name, size, mimeType, status, lastModified.
Example
Corresponds to: GET /v1/storage/items?search=<query> — the same collection endpoint as list, with a search query parameter instead of _parentId.
celigo storage get
Get metadata for one or more items by ID — a batch get, up to 100 ids per call. Returns one entry per id, in request order. All metadata fields are requested by default; narrow the set with --fields. The path field is a breadcrumb built from the item's ancestor folder names (e.g. /invoices/2026/inv-001.pdf).
An unknown id fails the whole request (422) unless --no-fail-fast, which reports unknown ids inline as {"_id", "notFound": true} entries alongside the found items.
File ids only for now: despite the endpoint's item vocabulary, a folder id is rejected as not-found — folder metadata comes from list/search instead.
Signature
Arguments
<ids...>
string (variadic)
Yes
One or more storage file ids (up to 100).
Flags
--fields <fields>
string
all of them
Comma-separated fields to return per item (_id always rides along). Allowed: name, description, size, mimeType, type, status, _parentId, __ancestorIds, path.
--no-fail-fast
boolean
false
Report unknown ids inline instead of failing the whole request.
Example
Corresponds to: POST /v1/storage/items/batch — a pure read; the batch endpoint is on the CLI's read-only-POST allowlist, so it works in read mode.
celigo storage upload
Upload a local file. The CLI reads the file's size and asks the API to start an upload. It then streams the bytes to the presigned URLs it gets back. Files up to 5 MiB use a single PUT; larger files use a multipart transfer. The MIME type is derived from the file extension. Unrecognized extensions become application/octet-stream.
Signature
Arguments
<localPath>
string
Yes
Path to a local file. It must exist and be a regular file.
Flags
--parent <id>
string
—
Destination folder. Omit it to upload into the root.
--name <name>
string
the local filename
Name to store the file as.
Example
Corresponds to: POST /v1/storage/files/initiateUpload, followed by the file bytes going straight to the presigned storage URL(s) returned in the response. That second leg is an out-of-band transfer, not a Celigo API call — your API token is never sent with it.
celigo storage download
Download a stored file by ID. The optional path controls where the bytes go:
[localPath]
Result
omitted
Writes to the current directory under the stored name.
an existing directory
Writes into that directory under the stored name.
a file path
Writes to exactly that path.
-
Streams the bytes to stdout.
Signature
Arguments
<id>
string
Yes
Storage item ID of the file.
[localPath]
string
No
Destination: a directory, an explicit file path, or - for stdout. Defaults to the stored filename in the current directory.
Flags
Uses global flags only.
Example
Corresponds to: GET /v1/storage/files/{_id}/download, which returns a downloadUrl; the CLI then streams the bytes from that presigned URL (an out-of-band transfer, not a Celigo API call).
celigo storage replace
Swap a file's contents for the contents of a local file. The item keeps its ID, name, parent folder, and every inbound reference. Exports, imports, and MCP server resources that point at this file keep working and read the new bytes on their next run. Use replace for a recurring drop of the same logical file. Use upload when you want a new item.
⚠️
replaceoverwrites the stored contents. The previous bytes are gone — no earlier version is kept. Download the current contents first if you might need them.
Signature
Arguments
<id>
string
Yes
Storage item ID of the file to replace.
<localPath>
string
Yes
Local file whose contents become the item's new contents.
Flags
Uses global flags only.
Example
Corresponds to: PATCH /v1/storage/items/{_id}/replace, followed by the same single or multipart transfer to the presigned URL(s) that upload uses. The stored name is untouched — the CLI does not send one, and the API ignores a name if it receives one.
celigo storage create-folder
Create a folder, in the root or inside another folder.
Signature
Arguments
<name>
string
Yes
Folder name.
Flags
--parent <id>
string
—
Parent folder. Omit it to create the folder in the root.
Example
Corresponds to: POST /v1/storage/items with type: "folder", the name, and _parentId when --parent is given.
celigo storage set
Rename a file or folder, or change its description. These are the only two editable fields on a storage item.
set behaves differently here than in other command groups. It sends one partial PUT, and the storage endpoint merges only the fields you name. There is no GET-then-PUT round trip, so fields you omit are never cleared.
Signature
Arguments
<id>
string
Yes
Storage item ID (file or folder).
<key=value>
string
Yes (≥1)
Field assignments. Only name and description are accepted; the API rejects anything else.
Flags
Uses global flags only.
Example
Corresponds to: PUT /v1/storage/items/{_id} with a partial body containing only the fields you assigned.
celigo storage move
Move one or more items — up to 100 — into a different folder. Pass the literal root to move items to the top level. Folder moves cascade asynchronously.
A single id goes through the per-item move endpoint, exactly as before celigo-cli 2026.8.7. Several ids — or --name — route to the bulk endpoint, which validates the destination once up front and then moves each item best-effort: a mixed batch returns per-id success/error results. --name renames the item as it lands (exactly one id), resolving a destination name collision without a second call.
Signature
Arguments
<ids...>
string (variadic)
Yes
One or more storage item IDs (files or folders, up to 100).
Flags
--to <parentId>
string
—
Required. Destination folder ID, or the literal root for the top level.
--name <name>
string
—
New name applied in the same write as the move. Single id only.
Example
Corresponds to: PATCH /v1/storage/items/{_id}/move for a single id with no --name (destination as _parentId; --to root is sent as null), or POST /v1/storage/items/move for several ids or --name.
celigo storage copy
Copy a file into another folder, optionally under a new name. Files only — folders cannot be copied.
Signature
Arguments
<id>
string
Yes
Storage item ID of the file to copy.
Flags
--to <parentId>
string
—
Required. Destination folder ID, or the literal root for the top level.
--name <name>
string
the source name
Name for the copy.
Example
Corresponds to: POST /v1/storage/items/{_id}/copy with the destination as _parentId (--to root is sent as null) and the optional name.
celigo storage merge
Move one folder's contents into another folder, then remove the source folder. Folders only. To relocate a single file, use move.
The API returns 202 Accepted and transfers the items in the background. The destination fills in over the seconds that follow, not instantly. Merging a soft-deleted folder restores its contents into the destination. That is one way to recover a deleted folder's files into a folder you choose.
⚠️
mergeremoves the source folder. Once the background job finishes, the source folder no longer exists — its contents live under the destination. Confirm the destination ID before running it.
Signature
Arguments
<id>
string
Yes
Source folder ID. Must be a folder.
Flags
--to <destinationId>
string
—
Required. Destination folder ID. Must be an existing folder.
Example
Corresponds to: POST /v1/storage/items/{_id}/merge with the destination as _destinationId.
celigo storage delete
Soft-delete a file or folder. The item moves to the Recycle Bin instead of being destroyed. Deleting a folder cascades to everything inside it. The command prompts for confirmation unless you pass -y.
⚠️ Deleting a folder deletes its whole subtree. Every descendant file and folder is soft-deleted with it, and the cascade runs in the background. Exports, imports, and MCP server resources that reference a deleted file begin failing. Check what points at the item before you delete it.
Signature
Arguments
<id>
string
Yes
Storage item ID (file or folder).
Flags
-y, --yes
boolean
false
Skip the confirmation prompt.
Example
Corresponds to: DELETE /v1/storage/items/{_id}. To restore the item, use recycle-bin.
celigo storage cancel-upload
Abort an in-progress multipart upload, discarding any uploaded parts. Use it to clean up an item stuck in uploading after an interrupted upload.
Signature
Arguments
<id>
string
Yes
Storage item ID of the stuck upload.
Example
Corresponds to: POST /v1/storage/files/{_id}/cancel
Gotchas
Celigo Storage requires a separate account entitlement. Without it, writes fail with
STORAGE_NOT_ENTITLED. Reads behave differently:storage listreturns an empty list rather than an error. An empty root is therefore not proof that the tree is empty. Check your subscription if every listing comes back empty.copyhandles files only;mergehandles folders only.moveis the one verb that accepts both. Folders cannot be copied. To duplicate a folder, create the destination and copy its files in one at a time. Usemergeonly when you are willing to lose the source folder.--to rootreaches the top level.moveandcopyaccept a folder ID or the literal stringroot. The CLI sendsrootas a null parent.mergehas no equivalent — its destination must be an existing folder.mergeruns asynchronously. The command returns as soon as the API accepts the job. Alistof the destination immediately afterward can look incomplete. Re-list after a few seconds before concluding the merge failed. Foldermoveanddeletecascade in the background the same way.A multi-id
moveis best-effort. The bulk endpoint validates the destination once up front, then moves each item independently — a mixed batch returns per-id success/error results instead of failing whole. Check the per-id results before assuming everything landed.storage getreads files only. A folder id is rejected as not-found despite the endpoint's item vocabulary; folder metadata comes fromlist/search.setaccepts onlynameanddescription. Every other field on a storage item is server-owned, and the API rejects attempts to change it.mimeTypeis derived from the name at upload time and is not settable. To correct a wrong MIME type,replacethe file using a name with the correct extension.deleteis reversible;recycle-bin purgeis not. Deleted items stay in the Recycle Bin for the retention window.celigo recycle-bin restore <id>brings a file or folder back, and a restored folder brings its contents with it.celigo recycle-bin purge <id>removes the item permanently. Both take the ID alone — the Recycle Bin resolves the resource type itself.Storage names reject several characters.
[and]are invalid in file and folder names. So are the other characters that are illegal in S3 keys, SFTP paths, and Windows filenames. An invalid name fails with an error instead of being sanitized. Strip these characters from generated names before uploading.Uploads larger than 5 MiB switch to multipart automatically. At or below 5 MiB the CLI sends one presigned
PUT. Above it, the file is split into 5 MiB parts and finalized in one completion call. Very large files use a larger part size to keep the part count within the transfer limit. Either way the bytes stream from disk, so memory use stays flat for multi-gigabyte files.The listing index is eventually consistent. A newly uploaded file can take a moment to appear in
list.searchuses a separate index and can lag by minutes on a busy account.download <id>works immediately. Use the ID thatuploadreturns rather than waiting for the file to appear in a listing.downloadoverwrites the target path without prompting. There is no--forceflag and no confirmation. When scripting, download into a fresh directory, or rely on the default stored-name behavior for a predictable filename.Storage listings are never field-projected.
listandsearchalways return complete item documents. The field projection that trims otherlistcommands does not apply here.Write verbs require the right permission mode.
mergeanddeleterequirefullmode.setdoes too in practice:operatemode restrictssetto an allowlist of operational fields, and neithernamenordescriptionis on it.upload,replace,create-folder,move,copy, andcancel-uploadrun inoperatemode. Every read-only verb works inreadmode — includingget, whose batchPOSTis on the read-only-POST allowlist. See Profiles & regions.
Related
recycle-bin — restore or permanently purge items that
storage deleteremoved.exports — a file export can read from a Celigo Storage folder instead of an external file provider.
imports — a file import can write its output into a Celigo Storage folder.
mcp-servers — serve stored files to MCP clients as resources, referenced by file ID. Folder IDs are rejected.
Last updated
Was this helpful?