---
title: "Retrieve File"
method: GET
path: "/files/{id}"
tags: ["Files"]
---

# Retrieve File

`GET /files/{id}`

Retrieves a file you uploaded — poll it after uploading the bytes to see `upload_status` become `ready`. Only the creator can retrieve a file this way; a file attached to another resource is read through that resource.

## Response `200`

file retrieved

- File
  - `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.

## Other responses

- `401` — Unauthorized
- `404` — Resource not found

## Changes

- **2026-08-24** `e91d507bda45` — 1 breaking, 3 warning, 13 info
  - the `size` response's property type/format changed from `string, null`/`` to `integer, null`/`` for status `200`
  - deleted the `path` request parameter `id`
  - removed the optional property `error/param` from the response with the `401` status
  - removed the optional property `error/param` from the response with the `404` status
  - …13 more

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/files/:id/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)
