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

# Subir Archivo

> Sube un nuevo archivo al sistema y opcionalmente lo procesa.

<Warning>
  **Máximo de 32 MB por archivo en este endpoint.** Esta llamada single-shot `POST /files` envía el cuerpo del archivo a través del servidor de la API, que tiene un límite estricto de 32 MB en el tamaño del cuerpo de las solicitudes HTTP entrantes. Los archivos mayores a 32 MB son rechazados antes de llegar a la capa de la aplicación.

  Para archivos mayores a 32 MB, utilice el [flujo de carga firmada v2](/es/upload-file-v2). Sube el cuerpo del archivo directamente desde su cliente a Google Cloud Storage (el servidor de la API queda fuera de la ruta de los bytes) y admite archivos de hasta 200 MB.
</Warning>

### **Archivos soportados**

| **Etiqueta**    | **Patrones de Archivo**                                                                                                                                                                                                                          |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Texto           | `*.txt`                                                                                                                                                                                                                                          |
| Word            | `*.{doc,docx}`                                                                                                                                                                                                                                   |
| Hoja de cálculo | `*.csv`                                                                                                                                                                                                                                          |
| PDF             | `*.pdf`                                                                                                                                                                                                                                          |
| Excel           | `*.xls`,`*.xlsx`                                                                                                                                                                                                                                 |
| Power Point     | `*.{ppt,pptx}`                                                                                                                                                                                                                                   |
| Imagen          | `*.{jpg,jpeg,png,gif,bmp,svg,tiff,webp}`                                                                                                                                                                                                         |
| Video           | `*.{mp4,avi,mov,mkv,wmv,flv}`                                                                                                                                                                                                                    |
| Audio           | `*.{mp3,wav,aac,ogg,flac,m4a}`                                                                                                                                                                                                                   |
| Código          | `*.bas`, `*.bat`, `*.xml`, `*.css`, `*.dart`, `*.{html,htm}`, `*.inc`, `*.js`, `*.json`, `*.kt`, `*.lua`, `*.pas`, `*.php`, `*.pl`, `*.ps1`, `*.py`, `*.r`, `*.sh`, `*.vsd`, `*.sql`, `*.swift`, `*.ts`, `*.vb`, `*.vba`, `*.{yml,yaml}`, `*.md` |

### **Límites**

* Tamaño máximo de archivo por carga en este endpoint: **32 MB** (límite de tamaño de solicitud HTTP de la plataforma). Para archivos de hasta 200 MB, utilice el [flujo de carga firmada v2](/es/upload-file-v2).
* Este punto final acepta un archivo por solicitud (se pueden usar varias solicitudes para varios archivos).
* Límite de almacenamiento de archivos: 30 archivos
* Algunas funciones tienen límites diferentes:
  * Adjuntos de chat: hasta 200 MB por archivo a través del flujo de carga firmada v2; hasta 5 archivos por envío
  * Transcripción de audio: hasta 10 MB por archivo

### **Ejemplos de Código**

<CodeGroup>
  ```http cURL theme={null}
  curl --request POST \
    --url 'https://api.tess.im/files' \
    --header 'Authorization: Bearer YOUR_API_KEY' \
    --header 'x-workspace-id: YOUR_WORKSPACE_ID' \
    --header 'Content-Type: multipart/form-data' \
    --form 'file=@/path/to/file' \
    --form 'process=false'
  ```

  ```json Node.js theme={null}
  const axios = require('axios');
  const FormData = require('form-data');
  const fs = require('fs');

  const form = new FormData();
  form.append('file', fs.createReadStream('/path/to/file'));
  form.append('process', 'false');

  const config = {
    method: 'post',
    url: 'https://api.tess.im/files',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
        'x-workspace-id': 'YOUR_WORKSPACE_ID',
      ...form.getHeaders()
    },
    data: form
  };

  try {
    const response = await axios(config);
    console.log(response.data);
  } catch (error) {
    console.error(error);
  }
  ```

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

  url = "https://api.tess.im/files"
  headers = {
      "Authorization": "Bearer YOUR_API_KEY",
        "x-workspace-id": "YOUR_WORKSPACE_ID"
  }
  files = {
      'file': open('/path/to/file', 'rb')
  }
  data = {
      'process': 'false'
  }

  response = requests.post(url, headers=headers, files=files, data=data)
  print(response.json())
  ```

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

  $file = new CURLFile('/path/to/file');

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.tess.im/files",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => [
      'file' => $file,
      'process' => 'false'
    ],
    CURLOPT_HTTPHEADER => [
      "Authorization: Bearer YOUR_API_KEY",
        "x-workspace-id: YOUR_WORKSPACE_ID",
      "Content-Type: multipart/form-data"
    ]
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "Error: " . $err;
  } else {
    echo $response;
  }
  ```

  ```java Java theme={null}
  import java.io.File;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.nio.file.Path;

  String boundary = "---boundary" + System.currentTimeMillis();
  File file = new File("/path/to/file");

  HttpClient client = HttpClient.newBuilder().build();
  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.tess.im/files"))
      .header("Authorization", "Bearer YOUR_API_KEY")
        .header("x-workspace-id", "YOUR_WORKSPACE_ID")
      .header("Content-Type", "multipart/form-data;boundary=" + boundary)
      .POST(HttpRequest.BodyPublishers.ofFile(file.toPath()))
      .build();

  HttpResponse<String> response = client.send(request,
      HttpResponse.BodyHandlers.ofString());
  System.out.println(response.body());
  ```

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

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

  func main() {
      file, err := os.Open("/path/to/file")
      if err != nil {
          fmt.Println(err)
          return
      }
      defer file.Close()
      
      body := &bytes.Buffer{}
      writer := multipart.NewWriter(body)
      
      part, err := writer.CreateFormFile("file", "filename")
      if err != nil {
          fmt.Println(err)
          return
      }
      io.Copy(part, file)
      
      
      writer.WriteField("process", "false")
      writer.Close()
      
      client := &http.Client{}
      req, err := http.NewRequest("POST", "https://api.tess.im/files", body)
      if err != nil {
          fmt.Println(err)
          return
      }
      
      req.Header.Add("Authorization", "Bearer YOUR_API_KEY")
      req.Header.Add("x-workspace-id", "YOUR_WORKSPACE_ID")
      req.Header.Add("Content-Type", writer.FormDataContentType())
      
      resp, err := client.Do(req)
      if err != nil {
          fmt.Println(err)
          return
      }
      defer resp.Body.Close()
      
      respBody, err := ioutil.ReadAll(resp.Body)
      if err != nil {
          fmt.Println(err)
          return
      }
      
      fmt.Println(string(respBody))
  }
  ```

  ```jsonnet .NET theme={null}
  using System;
  using System.Net.Http;
  using System.Threading.Tasks;

  class Program
  {
      static async Task Main(string[] args)
      {
          using (var client = new HttpClient())
          {
              client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
              client.DefaultRequestHeaders.Add("x-workspace-id", "YOUR_WORKSPACE_ID");
              
              using (var formData = new MultipartFormDataContent())
              {
                  var fileContent = new ByteArrayContent(File.ReadAllBytes("/path/to/file"));
                  formData.Add(fileContent, "file", "filename");
                  formData.Add(new StringContent("false"), "process");
                  
                  try
                  {
                      var response = await client.PostAsync("https://api.tess.im/files", formData);
                      response.EnsureSuccessStatusCode();
                      string responseBody = await response.Content.ReadAsStringAsync();
                      Console.WriteLine(responseBody);
                  }
                  catch(HttpRequestException e)
                  {
                      Console.WriteLine("\nException Caught!");
                      Console.WriteLine("Message :{0} ",e.Message);
                  }
              }
          }
      }
  }
  ```

  ```ruby Ruby theme={null}
  require 'uri'
  require 'net/http'
  require 'json'

  uri = URI('https://api.tess.im/files')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Post.new(uri)
  request['Authorization'] = 'Bearer YOUR_API_KEY'
  request['x-workspace-id'] = 'YOUR_WORKSPACE_ID'

  form_data = [
    ['file', File.open('/path/to/file')],
    ['process', 'false']
  ]
  request.set_form form_data, 'multipart/form-data'

  response = http.request(request)
  puts response.read_body
  ```
</CodeGroup>

### **Encabezados**

<ParamField header="x-workspace-id" type="integer" required>
  ID del workspace. **Obligatorio a partir del 01/09/2026.** Hasta entonces, si se omite, se usa el workspace seleccionado del usuario (deprecated). Después de la fecha, ausencia → **422**.
</ParamField>

<Note>
  **Nota:** Este campo será requerido en una futura versión de la API. Se recomienda encarecidamente configurarlo ahora para asegurar la compatibilidad con futuras actualizaciones.
</Note>

### **Parámetros del Cuerpo**

<Warning>
  El playground no soporta uploads `multipart/form-data` directamente. Use los **Ejemplos de Código** anteriores (cURL, Python, Node.js, etc.) para enviar el archivo. Los campos a continuación se muestran solo con fines de documentación.
</Warning>

<ParamField body="file" type="file" required>
  El archivo a subir (multipart/form-data)
</ParamField>

<ParamField body="process" type="boolean">
  Si debe procesar el archivo después de subirlo (predeterminado: false). El procesamiento consume créditos (true).
</ParamField>

### **Respuesta**

```json theme={null}
{
"id": 123,
"filename": "documento.pdf",
"size": 1024000,
"content_type": "application/pdf",
"status": "subido",
"created_at": "2025-01-05T22:39:57+00:00",
"updated_at": "2025-01-05T22:39:57+00:00"
}
```
