Serenities AI™
Back to API Overview

Files API

Upload, download, and manage files and folders. Get storage usage statistics.

19 endpoints

Endpoints

POST
/api/v1/files/list

List user files. Optional params: folderId (filter by folder, use "root" for root level), conversationId, sortBy ("uploadedAt", "size", "fileName"), sortOrder ("asc", "desc"), limit, offset. Returns {files[], total}.

Parameters

conversationIdstring

Filter by conversation ID

folderIdstring

Filter by folder ID. Use "root" for root level

sortBystring

Sort field: "uploadedAt", "size", or "fileName"

sortOrderstring

Sort order: "asc" or "desc"

limitnumber

Max files to return (1-100, default: 50)

offsetnumber

Number of files to skip for pagination

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/list \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "conversationId": "example",
  "folderId": "example",
  "sortBy": "example"
}'
POST
/api/v1/files/get

Get a specific file by ID

Parameters

fileIdstringrequired

File ID from list

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/get \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example"
}'
POST
/api/v1/files/getDownloadUrl

Get a download URL for a file, made for you and valid for 10 minutes

Parameters

fileIdstringrequired

File ID from list

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/getDownloadUrl \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example"
}'
POST
/api/v1/files/delete

Delete a file (move to trash)

Parameters

fileIdstringrequired

File ID to delete

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/delete \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example"
}'
POST
/api/v1/files/rename

Rename a file

Parameters

fileIdstringrequired

File ID to rename

newNamestringrequired

New file name

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/rename \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example",
  "newName": "example"
}'
POST
/api/v1/files/move

Move a file to a different folder

Parameters

fileIdstringrequired

File ID to move

folderIdstringrequired

Target folder ID, or null for root

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/move \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example",
  "folderId": "example"
}'
POST
/api/v1/files/copy

Copy a file. The copy starts private.

Parameters

fileIdstringrequired

File ID to copy

withoutPasswordboolean

Must be true to copy a file that has a password: the copy leaves the password behind (it opens to no one but your workspace).

folderIdstring

Folder for the copy, or null for root. Left out = the original's folder.

namestring

The copy's file name with extension. Left out = the original's name.

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/copy \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example",
  "withoutPassword": true,
  "folderId": "example"
}'
POST
/api/v1/files/listFolders

List folders. Optional param "parentId" (null for root level folders). Returns array with id, name, parentId.

Parameters

parentIdstring

Parent folder ID, or null for root level

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/listFolders \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "parentId": "example"
}'
POST
/api/v1/files/createFolder

Create a new folder

Parameters

namestringrequired

Folder name

parentIdstring

Parent folder ID, or null for root

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/createFolder \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "example",
  "parentId": "example"
}'
POST
/api/v1/files/renameFolder

Rename a folder

Parameters

folderIdstringrequired

Folder ID to rename

newNamestringrequired

New folder name

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/renameFolder \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "folderId": "example",
  "newName": "example"
}'
POST
/api/v1/files/deleteFolder

Delete an empty folder

Parameters

folderIdstringrequired

Folder ID to delete. Folder must be empty.

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/deleteFolder \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "folderId": "example"
}'
POST
/api/v1/files/getUsage

Get storage stats. No params. Returns {totalSize (bytes), fileCount}.

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/getUsage \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{}'
POST
/api/v1/files/setAccessRules

Set access rules for a file. Controls who can create/read/delete files in published apps.

Parameters

fileIdstringrequired

File ID from list

accessRulesobjectrequired

Access rules per operation (create/read/delete) — each a Condition (rule, legacy array, or { all | any | not } group with operators/function) — plus optional metadata (password/expiresAt/allowDownload).

trackCreatorboolean

Whether to track who uploads each file (default: true)

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/setAccessRules \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example",
  "accessRules": {},
  "trackCreator": true
}'
POST
/api/v1/files/getAccessRules

Get access rules for a file

Parameters

fileIdstringrequired

File ID from list

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/getAccessRules \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileId": "example"
}'
POST
/api/v1/files/getFolderAccessRules

Get access rules for a folder (derived from files inside)

Parameters

folderIdstringrequired

Folder ID

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/getFolderAccessRules \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "folderId": "example"
}'
POST
/api/v1/files/setFolderAccessRules

Set access rules for all files in a folder. Files uploaded or moved into the folder (or its subfolders) later inherit these rules automatically unless the file has rules of its own.

Parameters

folderIdstringrequired

Folder ID

accessRulesobjectrequired

Access rules to apply to all files in the folder (same Condition shape as files.setAccessRules).

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/setFolderAccessRules \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "folderId": "example",
  "accessRules": {}
}'
POST
/api/v1/files/getQuota

Get storage quota info. Returns usedBytes, limitBytes, availableBytes, maxFileSizeBytes, percentUsed. Call BEFORE upload to check available space.

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/getQuota \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{}'
POST
/api/v1/files/createUploadTicket

Get a one-shot URL to upload a file to, so the bytes never pass through the conversation as base64. Returns { uploadUrl, ticketId, expiresAt, method, headers } — send the raw file body with PUT. Refused up front (with availableBytes) if the file will not fit, so you never upload and then find out.

Parameters

fileNamestringrequired

File name with extension

sizeBytesintegerrequired

Exact byte length of the file you are about to send. Checked against the plan and remaining storage NOW, and the upload is refused if the body does not match it.

mimeTypestring

MIME type (auto-detected from the extension if omitted)

folderIdstring

Target folder ID, or null for root

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/createUploadTicket \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileName": "example",
  "sizeBytes": {},
  "mimeType": "example"
}'
POST
/api/v1/files/upload

Upload a file, either as base64 `content` or by giving a `sourceUrl` for the server to fetch. Prefer sourceUrl — it keeps the bytes out of the conversation. Check getQuota first for available space.

Parameters

fileNamestringrequired

Original file name with extension

contentstring

Base64 encoded file content. Every byte travels through the caller — for anything already reachable over HTTPS use sourceUrl instead.

sourceUrlstring

HTTPS URL to fetch the file FROM, server-side. Use this instead of content whenever the bytes exist at a URL: nothing is base64-encoded through the caller, so a 1.7MB PDF costs a URL rather than ~600K tokens of transport. Same extension, size, quota and folder rules as a base64 upload.

mimeTypestring

MIME type (auto-detected if not provided; a sourceUrl response Content-Type is used when it is not given)

folderIdstring

Target folder ID, or null for root

Example Request

curl -X POST https://app.serenitiesai.com/api/v1/files/upload \
  -H "Authorization: Bearer mk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "fileName": "example",
  "content": "example",
  "sourceUrl": "example"
}'