---
title: "List Files"
method: GET
path: "/files"
tags: ["Files"]
---

# List Files

`GET /files`

Returns the files with the given IDs, newest first — fetch a batch in one request instead of retrieving each file individually. Only files you created are returned; IDs that do not exist, or that another credential created, are omitted. A request for up to 100 IDs answers in a single page by default; a larger batch pages at up to 100 files per response — follow `page_info` with the same `file_ids` to walk the rest.

## Query parameters

- `file_ids` string[], required
- `order` 'created_at'
- `direction` 'asc' | 'desc'
- `first` integer
- `after` string
- `last` integer
- `before` string

## Response `200`

files listed

- object
  - `data` File[], required
    - `content_type` string, nullable, required — The file's MIME type, e.g. `application/pdf`.
    - `created_at` string, required — When the file was created, as an ISO 8601 timestamp.
    - `filename` string, nullable, required — The original filename, including its extension.
    - `id` string, required — The file's ID, prefixed `file_`.
    - `multipart_chunk_size` integer, nullable — The byte size each part (except the last) must be. Present only on create, and only for multipart uploads.
    - `multipart_upload_id` string, nullable — The ID of the multipart upload, passed back to `complete`. Present only on create, and only for multipart uploads.
    - `multipart_upload_urls` FileMultipartUrl[], nullable
      - `part_number` integer, required — The 1-based index of this part within the multipart upload.
      - `url` string, required — The presigned URL to PUT this part's bytes to.
    - `object` string, required — The type of this object, always `file`.
    - `size` integer, nullable, required — The file size in bytes. `null` until the upload has finished.
    - `upload_headers` object — Headers to send with the upload PUT. Present only on create.
    - `upload_status` 'pending' | 'processing' | 'ready' | 'failed', required — Where the file is in its upload lifecycle.
    - `upload_url` string, nullable — Presigned URL to PUT the file's bytes to. Present only on create, and only for single-part uploads.
    - `url` string, nullable, required — A URL to download the file: a permanent CDN URL for public files, a signed expiring URL for private ones. `null` until the upload has finished.
    - `visibility` 'public' | 'private', required — `public` files are served via an unsigned CDN URL; `private` files via a signed, expiring URL.
  - `page_info` object, required
    - `end_cursor` string, nullable, required
    - `has_next_page` boolean, required
    - `has_previous_page` boolean, required
    - `start_cursor` string, nullable, required

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized

## Changes

- **2026-08-25** `621705ee8f4a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/files/get.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/whop/whop-api/revisions/9e320991dd2f/schema)
