# Upload a file
Source: https://docs.file.ai/api-reference/uploads/upload-a-file

> Upload a file to the server, this will return a presigned upload url to be used for the upload.

post /prod/v1/files/upload

Upload a file to the server, this will return a presigned upload url to be used for the upload.

The presignedUploadURL is valid for 300 seconds (5 minutes) and can be used multiple times.

The input should contain the following information:

- `fileName`: the name of the file to be uploaded

- `fileType`: the type of the file to be uploaded

- `isSplit`: whether the file is a split file or not (optional, default: false)

- `isSplitExcel`: whether to split Excel files by worksheets (optional, default: false)

- `callbackURL`: (optional) the URL that will be called after file processing. Must be a valid HTTPS URL.
  - If provided, this URL takes precedence over the API key's default callback URL
  - If not provided, the API key's default callback URL will be used (if configured)
  - The response includes `callbackURLSource` indicating whether the URL came from the request ("user") or API key ("api_key")

- `ocrModel`: the OCR model to be used for file processing (optional). Accepts either the model name below or its stable processor id (e.g. `capybara`). The model must use the same engine as the project: a Beethoven project rejects `capybara`, and a Capybara project accepts only `capybara` (422 otherwise). Omit `ocrModel` to use the project setting. Available models:
  - **Capybara:**
    - `capybara` - Capybara pipeline (stable id; also accepted as `Capybara (Experimental)`). Only for projects set to Capybara, with Capybara enabled for the organisation. See `aiProcessingProvider` on `GET /v1/files/upload/{uploadId}` for the engine that actually ran.
  - **English Models:**
    - `Beethoven_ENG_O5.6` - OpenAI v6
    - `Beethoven_ENG_G5.5` - Gemini v5
    - `Beethoven_ENG_GP25` - Gemini Pro 2.5
    - `Beethoven_ENG_GP25.1` - Gemini Pro 2.5 v1
    - `Beethoven_ENG_GP25.2` - Gemini Pro 2.5 PDF
    - `Beethoven_CUS_O5.1` - Custom OpenAI v8
    - `Beethoven_CUS_O5.2` - Custom Gemini v13
    - `Unified (google-document-ai-ocr-gemini-v10)` - Unified model
    - `Aegis (google-document-ai-ocr-gemini-aegis-v1)` - Aegis model
  - **Chinese Models:**
    - `Beethoven_ZH_O5.9` - Chinese OpenAI v9
  - **Japanese Models:**
    - `Beethoven_JP_O5.3` - Japanese OpenAI v3
    - `Beethoven_JP_G5.4` - Japanese Gemini fine-tuned
  - **Thai Models:**
    - `Beethoven_TH_O5.1` - Thai OpenAI v1
    - `Beethoven_TH_G5.1` - Thai Gemini v1

- `schemaLocking`: whether the schema should be locked after the file is uploaded, must be one of true or false (optional)

- `directoryId`: the directory id where the file should be uploaded (optional)

- `destinationPath`: slash-delimited folder path where the file should be placed (e.g. "mammals/walrus"). Folders are auto-created if they do not exist. Can be used together with directoryId (optional)

- `blueprintId`: the file type id (from `GET /file-type`) to use for every document in the file, skipping auto-classification. Must be an approved file type in your organization or a built-in one (optional)

- `isEphemeral`: whether the file and all related data should be deleted after the file is processed, must be one of true or false (optional, default: false)

- `pageCount`: page count of the file, used for early validation against page limits (optional)
