---
title: "Finalize a Portfolio File Upload"
method: POST
path: "/portfolio_files"
tags: ["Portfolio Files"]
---

# Finalize a Portfolio File Upload

`POST /portfolio_files`

Finalize a portfolio file after uploading it directly to S3.

## Request body

- PortfolioFileFinalizeInput
  - `upload_request_id` string, uuid, required — ID of the upload request returned by the upload request endpoint
  - `portfolio_folder_id` string, uuid, nullable — Optional portfolio folder ID
  - `file_tag_ids` string[] — Optional file tag IDs to associate to the file

## Response `201`

Portfolio file successfully created

- object
  - `portfolio_file` PortfolioFile
    - `id` string, uuid, required — Unique identifier for the portfolio file
    - `name` string, required — Name of the portfolio file
    - `size` integer, required — Size of the portfolio file in bytes
    - `content_type` string, required — MIME type of the portfolio file
    - `created_at` string, date-time, required — When the portfolio file was created
    - `portfolio_company_profile_id` string, uuid, required — ID of the associated portfolio company profile
    - `portfolio_folder_id` string, uuid, nullable, required — ID of the associated portfolio folder
    - `file_tag_ids` string[], required — IDs of the associated file tags
    - `download_url` string, uri — Temporary download URL for the portfolio file

## Other responses

- `401` — Unauthorized - Invalid or missing authentication token
- `403` — Forbidden - The authenticated user does not have access to the requested resource
- `422` — Unprocessable Entity - The request is valid but contains semantic errors
- `429` — Too Many Requests - Rate limit exceeded

---

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