---
title: "List uploads and completed project deliverables"
method: GET
path: "/api/projects/{id}/files"
---

# List uploads and completed project deliverables

`GET /api/projects/{id}/files`

## Request

- Base URL: `https://editor.pascal.app`
- URL: `https://editor.pascal.app/api/projects/{id}/files`
- Auth: HTTP bearer

Requires project membership even for public scenes. Includes uploads, plugin files, snapshots and completed Studio outputs. Threads and messages are excluded. Follow nextCursor until null. OAuth requires scene:read; workspace-scoped API keys retain their workspace boundary.

## Query parameters

- `query` string
- `type` 'scan' | 'guide' | 'image' | 'document' | 'other'
- `cursor` string
- `limit` integer

## Response `200`

Newest files first

- object
  - `files` object[], required
    - `id` string, required
    - `projectId` string, required
    - `name` string, required
    - `originalName` string, required
    - `url` string, uri, required
    - `type` 'scan' | 'guide' | 'image' | 'document' | 'other', required
    - `origin` 'upload' | 'plugin' | 'snapshot' | 'render', required
    - `typeLabel` string, nullable
    - `mimeType` string, nullable
    - `fileSize` integer, nullable
    - `thumbnailUrl` string, nullable
    - `notes` string, nullable
    - `tags` string[]
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `nextCursor` string, nullable, required

## Other responses

- `400`: Invalid file request
- `401`: Authentication required
- `403`: Missing scene:read or scene:write OAuth scope
- `404`: Project or file not accessible to this workspace member

---

[API](https://skmtc.dev/pascal/apis/pascal-editor-scene-api.md) · [All operations](https://skmtc.dev/pascal/apis/pascal-editor-scene-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pascal/apis/pascal-editor-scene-api/revisions/08f1f3f41067?raw)
