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

# Direct File Upload

> Upload files directly to the platform for processing and translation services. Supports multiple file formats including MP4, MP3, DOCX, PDF, JPEG, PNG for Image to Image translation, and more

Upload files directly to the platform by calling this endpoint to process your content for translation and transcription services. This endpoint accepts a wide variety of file formats including:

* **Video files**: MP4, AVI, MOV, WMV
* **Audio files**: MP3, WAV, AAC, M4A
* **Document files**: DOCX, PDF, TXT, RTF
* **Presentation files**: PPTX, PPT
* **Spreadsheet files**: XLSX, XLS
* **Image to Image translation**: JPEG, JPG, PNG (direct upload for image-based translation)
* **And many more formats**

All uploaded files can be processed for translation into your target language. For **Image to Image** translation, use Direct Upload with a JPEG, JPG, or PNG file, then create a document order as usual.

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api-integration.ollang.com/integration/upload/direct" \
    -H "X-Api-Key: <your-api-key>" \
    -H "Content-Type: multipart/form-data" \
    -F "file=@/path/to/your/document.pdf" \
    -F "name=contract_document" \
    -F "sourceLanguage=en" \
    -F "folderId=60b8d6f1e1b9b1d8c6c0d8e2"
  ```

  ```javascript JavaScript theme={null}
  const formData = new FormData();
  formData.append("file", fileToUpload); // Can be any supported file type
  formData.append("name", "contract_document");
  formData.append("sourceLanguage", "en");
  formData.append("folderId", "60b8d6f1e1b9b1d8c6c0d8e2");

  const response = await fetch(
    "https://api-integration.ollang.com/integration/upload/direct",
    {
      method: "POST",
      headers: {
        "X-Api-Key": "<your-api-key>",
      },
      body: formData,
    },
  );
  ```

  ```python Python theme={null}
  import requests

  files = {'file': open('path/to/your/document.pdf', 'rb')}  # Any supported file type
  data = {
      'name': 'contract_document',
      'sourceLanguage': 'en',
      'folderId': '60b8d6f1e1b9b1d8c6c0d8e2'
  }
  headers = {'X-Api-Key': '<your-api-key>'}

  response = requests.post(
      'https://api-integration.ollang.com/integration/upload/direct',
      files=files,
      data=data,
      headers=headers
  )
  ```

  ```php PHP theme={null}
  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://api-integration.ollang.com/integration/upload/direct',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => array(
          'X-Api-Key: <your-api-key>'
      ),
    CURLOPT_POSTFIELDS => array(
      'file' => new CURLFile('path/to/your/document.pdf'), // Any supported file type
      'name' => 'contract_document',
      'sourceLanguage' => 'en',
      'folderId' => '60b8d6f1e1b9b1d8c6c0d8e2'
    ),
  ));

  $response = curl_exec($curl);
  curl_close($curl);
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "io"
      "mime/multipart"
      "net/http"
      "os"
  )

  func main() {
      file, _ := os.Open("path/to/your/document.pdf") // Any supported file type
      defer file.Close()

      body := &bytes.Buffer{}
      writer := multipart.NewWriter(body)

      part, _ := writer.CreateFormFile("file", "document.pdf")
      io.Copy(part, file)

      writer.WriteField("name", "contract_document")
      writer.WriteField("sourceLanguage", "en")
      writer.WriteField("folderId", "60b8d6f1e1b9b1d8c6c0d8e2")
      writer.Close()

      req, _ := http.NewRequest("POST", "https://api-integration.ollang.com/integration/upload/direct", body)
      req.Header.Set("X-Api-Key", "<your-api-key>")
      req.Header.Set("Content-Type", writer.FormDataContentType())

      client := &http.Client{}
      resp, _ := client.Do(req)
  }
  ```

  ```java Java theme={null}
  HttpResponse<String> response = Unirest.post("https://api-integration.ollang.com/integration/upload/direct")
    .header("X-Api-Key", "<your-api-key>")
    .field("file", new File("path/to/your/document.pdf")) // Any supported file type
    .field("name", "contract_document")
    .field("sourceLanguage", "en")
    .field("folderId", "60b8d6f1e1b9b1d8c6c0d8e2")
    .asString();
  ```
</RequestExample>

## Authorizations

This endpoint requires API key authentication. Include your API key in the request header:

* **Header name**: `X-Api-Key`
* **Header value**: Your API key from the Ollang dashboard
* **Format**: `X-Api-Key: your-api-key-here`

You can obtain your API key from your [Ollang dashboard](https://lab.ollang.com).

## Body Parameters

<ParamField body="file" type="file" required>
  The file to upload for translation. Supports a wide range of file formats
  including: **Video formats**: MP4, AVI, MOV, WMV, FLV, MKV **Audio formats**:
  MP3, WAV, AAC, M4A, FLAC, OGG **Document formats**: DOCX, DOC, PDF, TXT, RTF,
  ODT **Presentation formats**: PPTX, PPT, ODP **Spreadsheet formats**: XLSX,
  XLS, ODS, CSV **Image formats (Image to Image translation)**: JPEG, JPG, PNG
  **Other formats**: HTML, XML, JSON, SRT, VTT Maximum file size:
  30GB for video files, 100MB for document files. **Note: For testing in the API
  playground, the upload limit is 5MB.**
</ParamField>

<ParamField body="name" type="string" required>
  Name of the file being uploaded. This will be used as the identifier for your
  uploaded content. Should be descriptive and unique for easy identification.
</ParamField>

<ParamField body="sourceLanguage" type="string" required>
  The source language of the file content. Use standard language codes such as:

  * 'en' for English - 'es' for Spanish - 'fr' for French - 'de' for German -
    'zh' for Chinese - 'ja' for Japanese - 'tr' for Turkish - And many more
    supported languages
</ParamField>

<ParamField body="notes" type="array">
  Array of order notes for additional instructions or information about the upload.
  Each entry is an order note object.
  Example: `[{"details": "Please ignore the subtitles for 30 seconds", "timeStamp": "02:15:30"}]`

  <Expandable title="Order Note Object">
    <ParamField body="details" type="string" required>
      Note content (e.g., "Preserve formatting", "Technical document", "Marketing content").
    </ParamField>

    <ParamField body="timeStamp" type="string">
      Optional timestamp for the note when the content is a video or audio file, in `HH:MM:SS` format (e.g., "02:15:30").
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="folderId" type="string">
  Optional folder ID to place the project in. The folder must belong to the same
  client account. If not provided, the project will be placed in the default
  "API Uploads" folder. You can retrieve available folder IDs using the
  [Retrieve All Folders](/apis/ollang-api-reference/retrieve-all-folders)
  endpoint.
</ParamField>

## Response

<ResponseField name="projectId" type="string">
  Unique identifier for the project associated with the uploaded file. Use this
  ID to create, track, and manage your uploaded content throughout the
  translation process.
</ResponseField>

<ResponseExample>
  ```json 201 theme={null}
  {
    "projectId": "60b8d6f1e1b9b1d8c6c0d8e1"
  }
  ```

  ```json 400 theme={null}
  {
    "error": "Invalid file format",
    "message": "The uploaded file format is not supported for translation",
    "code": "INVALID_FILE_FORMAT"
  }
  ```

  ```json 413 theme={null}
  {
    "error": "File too large",
    "message": "File exceeds maximum size limit. Video files: 30GB max, Document files: 100MB max",
    "code": "FILE_TOO_LARGE"
  }
  ```

  ```json 401 theme={null}
  {
    "error": "Unauthorized",
    "message": "Invalid or missing API key",
    "code": "UNAUTHORIZED"
  }
  ```
</ResponseExample>
