---
title: "Upload Founding File"
method: POST
path: "/founding/{founding_id}/files"
tags: ["founding"]
---

# Upload Founding File

`POST /founding/{founding_id}/files`

## Request

- Base URL: `https://api.nanocorp.so` (the document declares no server; this is the origin it was published from)
- URL: `https://api.nanocorp.so/founding/{founding_id}/files`
- Auth: HTTP bearer

Upload one file to an open interview (multipart: ``file``).

The multipart body is parsed MANUALLY inside the handler for the same
reason the company upload route does it: FastAPI parses a declared
multipart body BEFORE dependencies run, and ownership must be proved before
a single body byte is read. It goes through the same bounded intake as the
company route (``read_capped_form``), so the body's size is settled before
it is spooled. Trade-off: the OpenAPI requestBody is intentionally
undocumented; the frontend uploads with ``fetch`` + ``FormData``.

The path is **always server-assigned** (``chat/<YYYY-MM-DD in UTC>/<safe
name>``, ` (2)` on a clash inside this interview): a client path would let
one upload overwrite another, and the founder never chose a path anyway.

The rate limit is the FIRST thing, before the status gate and before a
single body byte is read, exactly like the company route. The 30-file quota
below cannot stand in for it: it counts rows, and an upload that fails
after ``put_object`` writes no row while still paying for the object, so a
client fanning out uploads accumulates blobs the quota never sees.

## Path parameters

- `founding_id` string, uuid, required

## Response `200`

Successful Response

- FoundingFileResponse: One file attached during the interview. ``path`` is server-assigned (``chat/<YYYY-MM-DD>/<name>``) and is the path the file keeps in the company's Files after founding, so the composer can show the founder where it will end up.
  - `id` string, required
  - `founding_id` string, required
  - `path` string, required
  - `size_bytes` integer, required
  - `content_type` string, nullable, required
  - `created_at` string, date-time, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-09** `1229e41b14fd`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/nanocorp/apis/nanocorp-api/changes/founding/:founding_id/files/post.md)

---

[API](https://skmtc.dev/nanocorp/apis/nanocorp-api.md) - [All operations](https://skmtc.dev/nanocorp/apis/nanocorp-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nanocorp/apis/nanocorp-api/revisions/291bb76b720b?raw)
