API ref

Files and projects

Work with durable project metadata and files in a user's Agent workspace.

Workspace projects and files use the /v1/agent/* routes. They belong to the authenticated user's durable workspace, outside disposable runtime compute.

Agents bind new chats to one of these projects by name.

List projects

GET/v1/agent/projects

Returns workspace projects and their thread summaries.

Request
curl "$FLUSO_API/v1/agent/projects?includeArchived=false" \
  -H "Authorization: Bearer $FLUSO_TOKEN"
Response: 200
{
  "projects": [
    {
      "name": "Release Review",
      "goal": "Decide launch readiness",
      "createdAt": "2026-08-31T09:00:00Z",
      "updatedAt": "2026-08-31T09:00:00Z",
      "threads": []
    }
  ]
}

Create a project

POST/v1/agent/projects

Creates a workspace project and its context file.

Request
curl "$FLUSO_API/v1/agent/projects" \
  -X POST \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Release Review",
    "goal": "Decide launch readiness",
    "instructions": "Keep evidence and decisions in this project."
  }'
Response: 201
{
  "name": "Release Review",
  "goal": "Decide launch readiness",
  "instructions": "Keep evidence and decisions in this project.",
  "createdAt": "2026-08-31T09:00:00Z",
  "updatedAt": "2026-08-31T09:00:00Z",
  "threads": []
}

Update a project

PATCH/v1/agent/projects

Updates the project named in the request body.

Request
curl "$FLUSO_API/v1/agent/projects" \
  -X PATCH \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Release Review",
    "goal": "Decide launch readiness and record follow-up owners"
  }'
Response: 200, selected fields
{
  "name": "Release Review",
  "goal": "Decide launch readiness and record follow-up owners",
  "updatedAt": "2026-08-31T09:05:00Z",
  "threads": []
}

Export a project

GET/v1/agent/projects/export

Streams the named project as a ZIP archive.

Request
curl -G "$FLUSO_API/v1/agent/projects/export" \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  --data-urlencode 'name=Release Review' \
  -o release-review.zip
Response
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="Release Review.zip"; filename*=UTF-8''Release%20Review.zip

List files

GET/v1/agent/files

Lists files or directories under a workspace path.

Request
curl "$FLUSO_API/v1/agent/files?path=/files&recursive=false&includeStats=true" \
  -H "Authorization: Bearer $FLUSO_TOKEN"
Response: 200
{
  "path": "/files",
  "recursive": false,
  "entries": [
    {
      "path": "/files/release-brief.md",
      "name": "release-brief.md",
      "type": "file",
      "size": 1240,
      "modifiedAt": "2026-08-31T09:00:00Z",
      "mimeType": "text/markdown"
    }
  ]
}

Read a text file

GET/v1/agent/files/read

Returns a UTF-8 text file as JSON.

Request
curl -G "$FLUSO_API/v1/agent/files/read" \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  --data-urlencode 'path=/files/release-brief.md'
Response: 200
{
  "path": "/files/release-brief.md",
  "content": "# Release candidate\n\nKnown issue: ...\n",
  "encoding": "utf-8"
}

Upload a file

POST/v1/agent/files/upload

Uploads one file with an optional destination and conflict policy.

Request
curl "$FLUSO_API/v1/agent/files/upload" \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  -F 'file=@release-brief.md' \
  -F 'path=/files/release-brief.md' \
  -F 'onConflict=overwrite'
Response: 200
{
  "success": true,
  "path": "/files/release-brief.md",
  "size": 1240,
  "mimeType": "text/markdown"
}

onConflict accepts error, overwrite, or uuid. The default is error.

Download a file

GET/v1/agent/files/download

Streams a file with attachment headers.

Request
curl -G "$FLUSO_API/v1/agent/files/download" \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  --data-urlencode 'path=/files/release-report.pdf' \
  -o release-report.pdf
Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="release-report.pdf"; filename*=UTF-8''release-report.pdf

Delete a file

DELETE/v1/agent/files

Deletes one file, or a directory when recursive=true.

Request
curl -G "$FLUSO_API/v1/agent/files" \
  -X DELETE \
  -H "Authorization: Bearer $FLUSO_TOKEN" \
  --data-urlencode 'path=/files/release-brief.md' \
  --data 'recursive=false'
Response: 200
{
  "success": true,
  "path": "/files/release-brief.md"
}

A recursive directory delete removes every child path. List the target first when its contents are not already known.

Next

Read Projects for the product workflow, attach project context to Agents and versions, or create project-bound Threads and messages.

On this page