> ## Documentation Index
> Fetch the complete documentation index at: https://developer.opus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload File

> Upload your file to the presigned URL from Get Upload URL

Upload your file's binary content to the `presignedUrl` received from [Get Upload URL](/api-reference/jobs/get-upload-url).

<Warning>
  This request goes to **AWS S3**, not the Opus API. Do not include the `x-service-key` header.
</Warning>

## Headers

<ParamField header="Content-Type" type="string" required>
  MIME type matching your file (e.g., `application/pdf`, `image/png`, `text/csv`)
</ParamField>

## Body

Raw binary data of your file.

<Warning>
  The maximum file size for uploads is **10 MB**. Requests with files exceeding this limit will be rejected.
</Warning>

## Response

Returns HTTP `200` on success with an empty body.

<RequestExample>
  ```bash cURL theme={null}
  curl --request PUT \
    --url "{PRESIGNED_URL}" \
    --header 'Content-Type: application/pdf' \
    --data-binary '@/path/to/your/file.pdf'
  ```

  ```python Python theme={null}
  import requests

  presigned_url = "{PRESIGNED_URL}"

  with open("/path/to/your/file.pdf", "rb") as file:
      response = requests.put(
          presigned_url,
          data=file,
          headers={"Content-Type": "application/pdf"}
      )
      print(response.status_code)  # 200 on success
  ```

  ```javascript JavaScript theme={null}
  const fs = require("fs");

  const presignedUrl = "{PRESIGNED_URL}";
  const fileBuffer = fs.readFileSync("/path/to/your/file.pdf");

  const response = await fetch(presignedUrl, {
    method: "PUT",
    body: fileBuffer,
    headers: {
      "Content-Type": "application/pdf",
    },
  });

  console.log(response.status); // 200 on success
  ```
</RequestExample>

<ResponseExample>
  ```text 200 Response theme={null}
  (empty body)
  ```
</ResponseExample>
