DocsAPIFiles

Create an upload URL

Returns a short-lived URL to PUT a file to, for cases where the file is on your machine rather than behind a URL Fundra can fetch. The record to attach to is fixed when the URL is created, so the upload itself needs no further parameters. The URL is valid for 2 hours and can be used once – a second upload of the same name collides with the first.

POST
/files/create-signed-upload-url
Body

Example: Q3 Board Deck.pdf

Example: companies

Example: 42

Example: ["board material"]

Request Body

application/jsonOptional
nameRequiredstring

File name to store it under. Include the extension – it decides whether the file is picked up for text extraction and tagging later.

Minimum length: 1
entity_typeRequiredstring

Type of record to attach the file to

Value in: "companies" | "funds" | "funding_rounds" | "investments" | "valuations" | "proceeds" | "portfolio_fund_events"
entity_idRequiredstring

ID of the record to attach the file to, of the type given in entity_type. For companies this is the company_id – the company is shared across funds, so a portfolio_company_id is not accepted here and will not be found.

Pattern: "^\\d+$"
tagsarray<string>

Tags to attach. Fundra tags the file automatically as well, so this is only needed to force a particular tag.

Credentials

Bearer
curl -X POST "https://api.fundra.com/v1/files/create-signed-upload-url" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Q3 Board Deck.pdf",
    "entity_type": "companies",
    "entity_id": "42",
    "tags": [
      "board material"
    ]
  }'

Upload URL created

{
  "data": {
    "upload_url": "https://api.fundra.app/files/upload/eyJhbGciOi...",
    "file_id": "V1StGXR8Z5jd",
    "expires_at": "2026-08-21T12:00:00.000Z"
  }
}