Usamos cookies. Las cookies y el almacenamiento del navegador mantienen tu sesión iniciada y recuerdan tus preferencias. Con tu permiso, también medimos cómo se usa el sitio. Puedes en cualquier momento. Consulta nuestra política de cookies.

Visión y archivos

Endpoints

Visión y archivos

Envía imágenes, PDF, audio y vídeo como partes de contenido de un mensaje a modelos multimodales, con ejemplos, límites y plugin de análisis de PDF.

Pruébalo en el playground

Los modelos multimodales aceptan imágenes, PDF, audio y vídeo en un mensaje de usuario. Pasa content como un array de partes en lugar de un string. Para ver qué acepta un modelo, consulta architecture.input_modalities en Modelos (image, file, audio, video).

Partes de contenido

ParteFormatoNotas
Texto{ "type": "text", "text": "..." }
Imagen{ "type": "image_url", "image_url": { "url": "https://..." | "data:image/png;base64,...", "detail": "auto" } }PNG, JPEG, WebP, GIF. URL o URL de datos en base64.
PDF / archivo{ "type": "file", "file": { "filename": "doc.pdf", "file_data": "https://..." | "data:application/pdf;base64,..." } }Funciona con cualquier modelo. Los modelos sin soporte nativo de archivos reciben el texto analizado.
Audio{ "type": "input_audio", "input_audio": { "data": "<base64>", "format": "wav" } }Solo base64. wav, mp3 y otros, según el modelo.
Vídeo{ "type": "video_url", "video_url": { "url": "https://..." } }Admitido por algunos modelos, p. ej. Gemini.
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is in this image?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg"
          }
        }
      ]
    }
  ]
});
console.log(result.choices[0].message.content);

Ejemplo con imagen

{
  "model": "google/gemini-2.5-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What is in this picture?" },
        { "type": "image_url", "image_url": { "url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg" } }
      ]
    }
  ]
}

Ejemplo con PDF

{
  "model": "anthropic/claude-sonnet-4.5",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "Summarize this contract in five bullets." },
        { "type": "file", "file": { "filename": "contract.pdf", "file_data": "data:application/pdf;base64,JVBERi0xLjcK..." } }
      ]
    }
  ],
  "plugins": [{ "id": "file-parser", "pdf": { "engine": "pdf-text" } }]
}

El plugin opcional file-parser elige cómo se lee un PDF: pdf-text (extracción de texto gratuita), mistral-ocr (OCR para documentos escaneados, facturado por página) o native (el propio modelo lee el archivo). El coste del análisis forma parte de usage.cost.

Respuesta

La respuesta es un chat completion normal. Las entradas de imagen, archivo y audio cuentan como tokens de entrada, y su coste está en usage.cost:

{
  "choices": [{ "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "A close-up of an ant on a leaf." } }],
  "usage": { "prompt_tokens": 1290, "completion_tokens": 12, "total_tokens": 1302, "cost": 0.000417 }
}

Límites y errores

  • El cuerpo de una petición puede ser de hasta 25 MB. El base64 hace que los archivos pesen aproximadamente un 33 % más. Las peticiones más grandes devuelven 413 payload_too_large. Para imágenes grandes, usa URL públicas.
  • Un modelo que no acepta un tipo de entrada devuelve un 400 o 404 del proveedor.
  • Los demás errores son los mismos que en Chat completions. Consulta Errores.