Create a Portfolio File Upload Request

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.visible.vc/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
"Visible API MCP server": {
  "url": "https://docs.visible.vc/mcp"
}
Close
POST /portfolio_file_upload_requests

Create a presigned S3 POST upload request for a portfolio file upload.

File uploads use a three-step flow:

  1. Create an upload request to receive a temporary S3 upload URL and required POST parameters.
  2. Upload the file directly to S3 with a multipart/form-data POST. Include every key/value pair from fields as form parameters, followed by the file as the file part.
  3. Finalize the upload by creating a portfolio file with upload_request_id.

Upload requests expire after 15 minutes and can only be finalized once.

application/json

Body Required

  • name string Required

    Name of the file to upload

  • size integer Required

    Claimed upload size in bytes

    Minimum value is 1, maximum value is 104857600.

  • content_type string Required

    MIME type of the file to upload

    Values are application/pdf, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/gif, image/heic, image/jpeg, image/png, image/webp, or text/csv.

  • portfolio_company_profile_id string(uuid) Required

    ID of the portfolio company profile the file belongs to

Responses

  • 201 application/json

    Upload request successfully created

    Hide response attribute Show response attribute object
    • portfolio_file_upload_request object Required
      Hide portfolio_file_upload_request attributes Show portfolio_file_upload_request attributes object
      • upload_request_id string(uuid) Required

        Unique identifier for the upload request

      • upload_url string(uri) Required

        URL to POST the file to in S3

      • fields object Required

        Form fields to include in the S3 POST request

        Hide fields attribute Show fields attribute object
        • * string Additional properties
      • expires_at string(date-time) Required

        When the upload request expires

  • 400 application/json

    Bad Request - The request is invalid or malformed

    Hide response attribute Show response attribute object
    • errors array[object] Required
      Hide errors attributes Show errors attributes object

      Single error item. Different error types can include different fields.

      • type string

        Machine-readable error type

      • field string

        The related field, if applicable

      • message string

        Human-readable error message

  • 401 application/json

    Unauthorized - Invalid or missing authentication token

    Hide response attribute Show response attribute object
    • errors array[object] Required
      Hide errors attributes Show errors attributes object

      Single error item. Different error types can include different fields.

      • type string

        Machine-readable error type

      • field string

        The related field, if applicable

      • message string

        Human-readable error message

  • 403 application/json

    Forbidden - The authenticated user does not have access to the requested resource

    Hide response attribute Show response attribute object
    • errors array[object] Required
      Hide errors attributes Show errors attributes object

      Single error item. Different error types can include different fields.

      • type string

        Machine-readable error type

      • field string

        The related field, if applicable

      • message string

        Human-readable error message

  • 422 application/json

    Unprocessable Entity - The request is valid but contains semantic errors

    Hide response attribute Show response attribute object
    • errors array[object] Required
      Hide errors attributes Show errors attributes object

      Single error item. Different error types can include different fields.

      • type string

        Machine-readable error type

      • field string

        The related field, if applicable

      • message string

        Human-readable error message

  • 429 application/json

    Too Many Requests - Rate limit exceeded

    Hide response attribute Show response attribute object
    • errors array[object] Required
      Hide errors attributes Show errors attributes object

      Single error item. Different error types can include different fields.

      • type string

        Machine-readable error type

      • field string

        The related field, if applicable

      • message string

        Human-readable error message

POST /portfolio_file_upload_requests
curl \
 --request POST 'https://api.visible.vc/portfolio_file_upload_requests' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{"name":"Board Deck.pdf","size":1024,"content_type":"application/pdf","portfolio_company_profile_id":"cad09a10-73e8-4205-ae67-4e6156f37be8"}'
Request example
{
  "name": "Board Deck.pdf",
  "size": 1024,
  "content_type": "application/pdf",
  "portfolio_company_profile_id": "cad09a10-73e8-4205-ae67-4e6156f37be8"
}
Response examples (201)
{
  "portfolio_file_upload_request": {
    "upload_request_id": "ec5252fe-9abc-4096-85e9-1374e70a3182",
    "upload_url": "https://visible-test.s3.amazonaws.com",
    "fields": {
      "key": "portfolio_files/example/Board_Deck.pdf",
      "acl": "private",
      "Content-Type": "application/pdf"
    },
    "expires_at": "2025-01-01T00:15:00.000Z"
  }
}
Response examples (400)
{
  "errors": [
    {
      "type": "parameter_invalid",
      "field": "filter",
      "message": "must be an object"
    }
  ]
}
Response examples (401)
{
  "errors": [
    {
      "type": "unauthorized"
    }
  ]
}
Response examples (403)
{
  "errors": [
    {
      "type": "forbidden"
    }
  ]
}
Response examples (422)
{
  "errors": [
    {
      "type": "attribute_invalid",
      "field": "value",
      "message": "required"
    }
  ]
}
Response examples (429)
{
  "errors": [
    {
      "type": "rate_limit_exceeded"
    }
  ]
}