Files
List entries under the requested directory. Omitting path uses the sandbox’s default working directory. depth defaults to 1 and recursive listings are capped at 10,000 entries.
path?stringAbsolute target path: /-rooted, or on Windows also a drive or UNC path (/-rooted paths resolve against the daemon's current drive). Omitted on GET /files to use the sandbox’s default working directory. Relative and empty paths are refused with INVALID_FILE_PATH.
depth?stringRecursive listing depth for GET /files; omitted for the flat default (1).
application/json- response
[index: integer]?One filesystem entry returned by /files and /files/info.
curl -X GET 'http://sandbox:2280/files'[ { "group": "string", "isDir": true, "modTime": "string", "mode": "string", "modifiedAt": "string", "name": "string", "owner": "string", "path": "string", "permissions": "string", "size": 0 }]Delete one file. Directories require recursive=true or recursive=1.
path?stringAbsolute path to remove.
recursive?stringRecursive delete flag as a string query value.
The path was deleted.
curl -X DELETE 'http://sandbox:2280/files'Stream regular files at absolute paths using the sandbox user's permissions. Invalid paths, non-regular files and permission denials discovered before streaming refuse the request with 400 or 403. Other failures, including failures after streaming starts, use error parts carrying error envelopes; the outer response then stays 200.
application/json- body
JSON body for POST /files/bulk-download.
paths?array<string>Absolute paths of regular files to stream back as multipart file or error parts. Permission denials and non-regular files discovered before streaming refuse the request.
Multipart file and error parts with the fixed boundary DAYTONA-FILE-BOUNDARY.
multipart/form-datacurl -X POST 'http://sandbox:2280/files/bulk-download' \ -H 'Content-Type: application/json' \ -d '{}'Upload files using paired absolute files[i].path and files[i].file multipart fields. A relative or empty path, or a non-regular destination, returns 400 INVALID_FILE_PATH; non-regular destinations use <path>: not a regular file. Earlier uploads are not rolled back. Other partial success is reported per file in the JSON body. New files and directories belong to the configured sandbox user, and writes require that user’s permissions. With atomic=true, each successful file is replaced atomically; unsupported atomic replacement is reported for that file while other files continue.
atomic?booleanReplace each destination file atomically; fail that file if atomic replacement is unsupported. A replacement keeps the existing owner when the sandbox user may assign it, and is otherwise owned by the sandbox user. A non-regular destination refuses the request with 400 INVALID_FILE_PATH; earlier uploads are not rolled back.
Multipart form using files[i].path metadata parts and files[i].file content parts.
multipart/form-data- body
files[0].path*stringDestination path for the file in the matching files[0].file part. Repeat with files[1].path, files[2].path, and so on for additional files.
files[0].file*fileFile content for the path in files[0].path.
binaryapplication/json- response
Partial-success response from POST /files/bulk-upload.
errors*array<string>Human-readable per-part failures.
files*array<>Successfully written files.
curl -X POST 'http://sandbox:2280/files/bulk-upload' \ -F 'files[0].path=string' \ -F 'files[0].file=string'{ "errors": [ "string" ], "files": [ { "bytes": 0, "path": "string" } ]}Stream one regular file at an absolute path as application/octet-stream, using the sandbox user's permissions. Directories, FIFOs, sockets and devices are refused without reading them.
path?stringAbsolute target path: /-rooted, or on Windows also a drive or UNC path (/-rooted paths resolve against the daemon's current drive). Omitted on GET /files to use the sandbox’s default working directory. Relative and empty paths are refused with INVALID_FILE_PATH.
depth?stringRecursive listing depth for GET /files; omitted for the flat default (1).
Raw file bytes.
application/octet-streamcurl -X GET 'http://sandbox:2280/files/download'Walk the tree rooted at the absolute path as the sandbox user and return literal substring matches with one-based line numbers. Non-regular files are skipped. Directories and files below the root that the sandbox user cannot read are skipped and listed in skipped (at most 1000); only an unreadable root fails the request.
path?stringAbsolute root path to walk recursively.
pattern?stringFilename glob (search) or literal substring (find) pattern.
application/json- response
Literal line matches from GET /files/find.
items*array<>Matches, in walk order.
skipped*array<string>Absolute paths below the root that the sandbox user cannot read, so they were not searched. Empty when nothing was skipped; at most 1000 entries.
curl -X GET 'http://sandbox:2280/files/find'{ "items": [ { "content": "string", "file": "string", "line": 0 } ], "skipped": [ "string" ]}Create the requested directory tree. Omitting mode uses the route default.
path?stringAbsolute directory path to create.
mode?stringOptional octal mode string; omitted or empty uses the route default.
The directory exists.
curl -X POST 'http://sandbox:2280/files/folder'Return one FileInfo record for the requested path.
path?stringAbsolute target path: /-rooted, or on Windows also a drive or UNC path (/-rooted paths resolve against the daemon's current drive). Omitted on GET /files to use the sandbox’s default working directory. Relative and empty paths are refused with INVALID_FILE_PATH.
depth?stringRecursive listing depth for GET /files; omitted for the flat default (1).
application/json- response
One filesystem entry returned by /files and /files/info.
group*stringNumeric group id rendered as a string.
isDir*booleanWhether the entry is a directory.
modTime*stringLast modification time as a formatted string. Prefer modifiedAt for RFC 3339 formatting.
mode*stringFile mode string, for example -rw-r--r-- or drwxr-xr-x.
modifiedAt*stringRFC 3339 UTC timestamp for the last modification time.
name*stringBase name of the entry.
owner*stringNumeric owner id rendered as a string.
path*stringAbsolute path to the entry, using the sandbox's path syntax.
permissions*stringFour-digit octal permissions (0644, 0755, …).
size*integerEntry size in bytes.
int640 <= valuecurl -X GET 'http://sandbox:2280/files/info'{ "group": "string", "isDir": true, "modTime": "string", "mode": "string", "modifiedAt": "string", "name": "string", "owner": "string", "path": "string", "permissions": "string", "size": 0}Move or rename a path, including between filesystems.
source?stringAbsolute source path to move.
destination?stringAbsolute destination path.
The path was moved.
curl -X POST 'http://sandbox:2280/files/move'Change mode and, on platforms that support it, owner and group.
path?stringAbsolute path whose permissions should change. On Linux, ownership and permissions apply to the symlink target when the path names a symlink.
mode?stringOptional octal mode string.
owner?stringOptional owner id or name, when the platform supports chown.
group?stringOptional group id or name, when the platform supports chgrp.
Permissions were updated.
curl -X POST 'http://sandbox:2280/files/permissions'Replace a literal substring across regular files at absolute paths as the sandbox user. Permission denials return 403; other file-specific failures, including skipped non-regular files, stay inside the 200 response body. Earlier replacements are not rolled back when a later file fails.
application/json- body
JSON body for POST /files/replace.
files?array<string>Absolute paths of regular files to rewrite. Non-regular files are skipped with a per-file failure; permission denials return FILE_ACCESS_DENIED.
newValue?|Replacement text. Omitted only when the caller wants the route to reject the request.
pattern?stringLiteral substring to replace.
application/json- response
[index: integer]?One file's outcome from POST /files/replace.
curl -X POST 'http://sandbox:2280/files/replace' \ -H 'Content-Type: application/json' \ -d '{}'[ { "error": "string", "file": "string", "success": true }]Walk the tree rooted at path as the sandbox user and return absolute file paths whose base name matches the glob pattern. Directories and files below the root that the sandbox user cannot read are skipped and listed in skipped (at most 1000); only an unreadable root fails the request.
path?stringAbsolute root path to walk recursively.
pattern?stringFilename glob (search) or literal substring (find) pattern.
application/json- response
Recursive filename-glob search results from GET /files/search.
files*array<string>Absolute matching file paths.
skipped*array<string>Absolute paths below the root that the sandbox user cannot read, so their contents were not searched. Empty when nothing was skipped; at most 1000 entries.
curl -X GET 'http://sandbox:2280/files/search'{ "files": [ "string" ], "skipped": [ "string" ]}Upload the multipart part named file to the query’s absolute destination path. Existing destinations must be regular files; directories, FIFOs, sockets and devices return 400 INVALID_FILE_PATH with <path>: not a regular file, without writing to them. New files and parent directories belong to the configured sandbox user; existing files retain their ownership, except that atomic=true over a file the sandbox user cannot give back to its owner leaves the replacement owned by the sandbox user. Writes require that user’s permissions, otherwise return 403 FILE_ACCESS_DENIED without creating a destination. With atomic=true, replace the destination atomically or fail if unsupported.
path?stringAbsolute destination path for the uploaded file. Existing destinations must be regular files; otherwise returns 400 INVALID_FILE_PATH, <path>: not a regular file.
atomic?booleanReplace the destination file atomically; fail if atomic replacement is unsupported. The replacement keeps the existing owner when the sandbox user may assign it, and is otherwise owned by the sandbox user.
Multipart form with one file part named file.
multipart/form-data- body
file*fileFile content.
binaryThe file was uploaded.
curl -X POST 'http://sandbox:2280/files/upload' \ -F 'file=string'Server-sent events for one absolute directory path, using the sandbox user's permissions. The stream emits start with {}, fs with WatchFsEvent, and overflow with WatchOverflowEvent. On macOS, a permission denial discovered after streaming starts emits error with an error envelope and closes the stream. follow=true is accepted and ignored for compatibility.
path?stringAbsolute directory path to watch.
recursive?booleanWhether nested subdirectories should be watched too.
follow?booleanAccepted but ignored.
SSE stream of start, fs, and overflow events; macOS may emit a terminal error envelope after an access denial.
text/event-streamcurl -X GET 'http://sandbox:2280/files/watch'