> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# File

A File is an uploaded document or media object, identified by a `file_` ID. Creating a file returns a presigned destination; upload the bytes there and the file becomes `ready`.

Use the Files API to create a file, upload its content directly to storage (in one PUT, or in parts for large files), and retrieve it while polling for readiness. A ready file's ID can be attached wherever Whop accepts files.

## Endpoints

| Endpoint | Request |
| - | - |
| [List Files](/api-reference/beta/files/list-files) | <Badge color="blue" size="sm" stroke>GET</Badge> `/files` |
| [Retrieve File](/api-reference/beta/files/retrieve-file) | <Badge color="blue" size="sm" stroke>GET</Badge> `/files/{id}` |
| [Create File](/api-reference/beta/files/create-file) | <Badge color="green" size="sm" stroke>POST</Badge> `/files` |
| [Complete File Multipart Upload](/api-reference/beta/files/complete-file-multipart-upload) | <Badge color="green" size="sm" stroke>POST</Badge> `/files/{id}/complete` |

## Attributes

<Columns cols={2}>
  <Column>
    <ResponseField name="id" type="string" required>
      The file's ID, prefixed `file_`.
    </ResponseField>

    <ResponseField name="content_type" type="string | null" required>
      The file's MIME type, e.g. `application/pdf`.
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      When the file was created, as an ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="filename" type="string | null" required>
      The original filename, including its extension.
    </ResponseField>

    <ResponseField name="multipart_chunk_size" type="integer | null">
      The byte size each part (except the last) must be. Present only on create, and
      only for multipart uploads.
    </ResponseField>

    <ResponseField name="multipart_upload_id" type="string | null">
      The ID of the multipart upload, passed back to `complete`. Present only on
      create, and only for multipart uploads.
    </ResponseField>

    <ResponseField name="multipart_upload_urls" type="object[] | null">
      The presigned URL for each part. Present only on create, and only for multipart uploads.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="part_number" type="integer" required>
          The 1-based index of this part within the multipart upload.
        </ResponseField>

        <ResponseField name="url" type="string" required>
          The presigned URL to PUT this part's bytes to.
        </ResponseField>
      </Accordion>
    </ResponseField>

    <ResponseField name="object" type="string" required>
      The type of this object, always `file`.
    </ResponseField>

    <ResponseField name="size" type="integer | null" required>
      The file size in bytes. `null` until the upload has finished.
    </ResponseField>

    <ResponseField name="upload_headers" type="object">
      Headers to send with the upload PUT. Present only on create.
    </ResponseField>

    <ResponseField name="upload_status" type="string" required>
      Where the file is in its upload lifecycle.

      Available options: `pending`, `processing`, `ready`, `failed`
    </ResponseField>

    <ResponseField name="upload_url" type="string | null">
      Presigned URL to PUT the file's bytes to. Present only on create, and only for
      single-part uploads.
    </ResponseField>

    <ResponseField name="url" type="string | null" 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.
    </ResponseField>

    <ResponseField name="visibility" type="string" required>
      `public` files are served via an unsigned CDN URL; `private` files via a signed, expiring URL.

      Available options: `public`, `private`
    </ResponseField>
  </Column>

  <Column>
    <div className="api-resource-sticky-example">
      ```json File theme={null}
      {
      	"id": "file_xxxxxxxxxxxxxx",
      	"object": "file",
      	"filename": "evidence.pdf",
      	"content_type": "application/pdf",
      	"size": 9670,
      	"visibility": "private",
      	"upload_status": "ready",
      	"url": "https://whop-assets-example.s3.amazonaws.com/uploads/2026-09-15/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/evidence.pdf",
      	"created_at": "2026-09-15T14:30:00.000Z"
      }
      ```
    </div>
  </Column>
</Columns>


## Related topics

- [File](/api-reference/files/file.md)
- [Create File](/api-reference/beta/files/create-file.md)
- [List Files](/api-reference/beta/files/list-files.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.