> ## Documentation Index
> Fetch the complete documentation index at: https://veniceai-mintlify-de47a659.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Voz a texto

> Transcribe archivos de audio a texto con los modelos de voz a texto de Venice vía /audio/transcriptions, eligiendo formatos de respuesta y timestamps.

La voz a texto transcribe audio hablado a texto escrito. Envía un archivo de audio a `/audio/transcriptions`, elige un modelo de transcripción y selecciona el formato de respuesta que deseas recibir.

¿Trabajas con la grabación de una conversación? [Notas de reunión con voz a texto](/guides/media/meeting-notes) va de un archivo de audio a decisiones y elementos de acción que citan el segundo en que se acordaron, incluyendo qué modelos devuelven tiempos de segmento y cómo manejar una transcripción que nunca dice quién está hablando.

## Uso básico

<CodeGroup>
  ```python Python theme={null}
  import os

  import requests

  with open("meeting.mp3", "rb") as audio:
      response = requests.post(
          "https://api.venice.ai/api/v1/audio/transcriptions",
          headers={"Authorization": f"Bearer {os.environ['VENICE_API_KEY']}"},
          files={"file": audio},
          data={
              "model": "nvidia/parakeet-tdt-0.6b-v3",
              "response_format": "json",
          },
      )

  response.raise_for_status()
  print(response.json()["text"])
  ```

  ```javascript Node.js theme={null}
  import { createReadStream } from "node:fs";
  import FormData from "form-data";

  const form = new FormData();
  form.append("file", createReadStream("meeting.mp3"));
  form.append("model", "nvidia/parakeet-tdt-0.6b-v3");
  form.append("response_format", "json");

  const response = await fetch("https://api.venice.ai/api/v1/audio/transcriptions", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.VENICE_API_KEY}`,
      ...form.getHeaders(),
    },
    body: form,
  });

  if (!response.ok) {
    throw new Error(await response.text());
  }

  const transcript = await response.json();
  console.log(transcript.text);
  ```

  ```bash cURL theme={null}
  curl https://api.venice.ai/api/v1/audio/transcriptions \
    -H "Authorization: Bearer $VENICE_API_KEY" \
    --form file=@meeting.mp3 \
    --form model=nvidia/parakeet-tdt-0.6b-v3 \
    --form response_format=json
  ```
</CodeGroup>

## Entradas admitidas

Los formatos de audio admitidos son `wav`, `wave`, `flac`, `m4a`, `aac`, `mp4`, `mp3`, `ogg`, `oga` y `webm`. Un archivo se acepta cuando su tipo MIME o su extensión están en esa lista, y los bytes subidos también deben superar una comprobación de magic bytes: renombrar un archivo con una extensión admitida no bastará para que pase. Consulta la página de [Modelos de Voz a Texto](/models/speech-to-text) para conocer el soporte de modelos y precios actuales.

## Formatos de respuesta

| Formato | Cuándo usarlo                                                                                       |
| ------- | --------------------------------------------------------------------------------------------------- |
| `json`  | Quieres una respuesta estructurada: `text`, más `duration` y `timestamps` cuando estén disponibles. |
| `text`  | Quieres texto plano sin análisis de JSON.                                                           |

<Note>
  Estos son los únicos dos valores que acepta `response_format`. No existen las opciones `srt`, `vtt` ni `verbose_json`: solicitar una devuelve un `400`. Para crear subtítulos, usa `timestamps: true` con `response_format: json` y renderiza tú mismo los datos de tiempo.
</Note>

## Marcas de tiempo

Pasa `timestamps=true` para recibir datos de tiempo junto con la transcripción. El soporte es específico de cada modelo, y la granularidad difiere:

| Modelo                        | Granularidad |
| ----------------------------- | ------------ |
| `elevenlabs/scribe-v2`        | `word`       |
| `stt-xai-v1`                  | `word`       |
| `openai/whisper-large-v3`     | `segment`    |
| `fal-ai/wizper`               | `segment`    |
| `nvidia/parakeet-tdt-0.6b-v3` | Ninguna      |

<Warning>
  El modelo predeterminado, `nvidia/parakeet-tdt-0.6b-v3`, acepta `timestamps=true` y luego lo ignora: recibes una respuesta que contiene solo `text`, sin error ni advertencia. Elige un modelo de la tabla anterior si necesitas datos de tiempo, y comprueba que la clave `timestamps` existe antes de leerla.
</Warning>

```bash theme={null}
curl https://api.venice.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  --form file=@meeting.mp3 \
  --form model=elevenlabs/scribe-v2 \
  --form timestamps=true \
  --form response_format=json
```

```json theme={null}
{
  "text": "The quick brown fox jumps over the lazy dog.",
  "duration": 4.099,
  "timestamps": {
    "word": [
      { "word": "The", "start": 0.0, "end": 0.14 },
      { "word": "quick", "start": 0.14, "end": 0.42 }
    ]
  }
}
```

Los modelos de nivel de segmento devuelven en su lugar un arreglo `segment`, donde cada entrada es `{ "text": "...", "start": 0.0, "end": 3.2 }`. Todos los tiempos están en segundos.

<Note>
  Ningún modelo de transcripción de Venice realiza diarización de hablantes, por lo que no hay campo `speaker` en ninguna respuesta. Una transcripción es un único flujo de texto: los hablantes solo pueden atribuirse cuando un nombre se dice en voz alta.
</Note>

## Consejos para producción

* Mantén el audio claro y evita solapamientos entre hablantes cuando sea posible.
* Divide las grabaciones muy largas en fragmentos más pequeños si tu flujo de trabajo necesita menor latencia o reintentos más sencillos.
* Almacena la ruta original del audio, el ID del modelo y el formato de respuesta con cada transcripción para facilitar la auditoría.

## Recursos relacionados

* [API de Transcripciones de Audio](/api-reference/endpoint/audio/transcriptions)
* [Modelos de Voz a Texto](/models/speech-to-text)
* [Guía de Texto a Voz](/guides/media/text-to-speech)
