---
title: "Multimodal embedding models"
method: POST
path: "/multimodalembeddings"
tags: ["Inference"]
---

# Multimodal embedding models

`POST /multimodalembeddings`

The Voyage multimodal embedding endpoint returns vector representations for a given list of multimodal inputs consisting of text, images, or an interleaving of both modalities.
<blockquote style="background-color: #e6f7ff; border-left: 4px solid #91d5ff;">
  <strong>Important:</strong> Starting December 8, 2025, the following constraints apply to all URL parameters (e.g., <code>image_url</code>)
  <ul>
    <li> Limit the number of redirects.  </li>
    <li> Require that responses include a content-length header. </li>
    <li> Respect robots.txt to prevent unauthorized scraping.  </li>
  </ul>
</blockquote>

## Request body

- object
  - `inputs` unknown[], required — A list of multimodal inputs to be vectorized.<br> <br> A single input in the list is a dictionary containing a single key `"content"`, whose value represents a sequence of text, images, and videos. <ul> <li> The value of <code>"content"</code> is a list of dictionaries, each representing a single piece of text or image. The dictionaries have four possible keys: <ol class="nested-ordered-list"> <li> <b>type</b>: Specifies the type of the piece of the content. Allowed values are <code>text</code>, <code>image_url</code>, <code>image_base64</code>, <code>video_url</code>, or <code>video_base64</code>.</li> <li> <b>text</b>: Only present when <code>type</code> is <code>text</code>. The value should be a text string.</li> <li> <b>image_base64</b>: Only present when <code>type</code> is <code>image_base64</code>. The value should be a Base64-encoded image in the <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Schemes/data" target="_blank">data URL</a> format <code>data:[&lt;mediatype&gt;];base64,&lt;data&gt;</code>. Currently supported <code>mediatypes</code> are: <code>image/png</code>, <code>image/jpeg</code>, <code>image/webp</code>, and <code>image/gif</code>.</li> <li> <b>image_url</b>: Only present when <code>type</code> is <code>image_url</code>. The value should be a URL linking to the image. We support PNG, JPEG, WEBP, and GIF images. The following constraints apply to the URL: <ul> <li> Limit the number of redirects. </li> <li> Require that responses include a content-length header. </li> <li> Respect robots.txt to prevent unauthorized scraping. </li> </ul> </li> <li> <b>video_base64</b>: Only present when <code>type</code> is <code>video_base64</code>. The value should be a Base64-encoded video in the <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Schemes/data" target="_blank">data URL</a> format <code>data:[&lt;mediatype&gt;];base64,&lt;data&gt;</code>. Currently supported <code>mediatypes</code> are: <code>video/mp4</code>.</li> <li> <b>video_url</b>: Only present when <code>type</code> is <code>video_url</code>. The value should be a URL linking to the video. We support MP4 videos. The following constraints apply to the URL: <ul> <li> Limit the number of redirects. </li> <li> Require that responses include a content-length header. </li> <li> Respect robots.txt to prevent unauthorized scraping. </li> </ul> </li> </ol> </li> <li> <b>Note</b>: Only one of the keys, <code>base64</code> or <code>url</code>, should be present in each dictionary for image and video data. Consistency is required within a request, meaning each request should use either <code>image_base64</code>/<code>video_base64</code> or <code>image_url</code>/<code>video_url</code> exclusively, not both.<br> <br> <details> <summary> Example payload where <code>inputs</code> contains an image as a URL </summary> <br> The <code>inputs</code> list contains a single input, which consists of a piece of text and an image (which is provided via a URL). <pre><code> { "inputs": [ { "content": [ { "type": "text", "text": "This is a banana." }, { "type": "image_url", "image_url": "https://raw.githubusercontent.com/voyage-ai/voyage-multimodal-3/refs/heads/main/images/banana.jpg" }, { "type": "video_url", "video_url": "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4" } ] } ], "model": "voyage-multimodal-3.5" } </code></pre> </details> <details> <summary> Example payload where <code>inputs</code> contains a Base64 image </summary> <br> Below is an equivalent example to the one above where the image content is a Base64 image instead of a URL. (Base64 images can be lengthy, so the example only shows a shortened version.) <pre><code> { "inputs": [ { "content": [ { "type": "text", "text": "This is a banana." }, { "type": "image_base64", "image_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA..." }, { "type": "video_base64", "video_base64": "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACA..." } ] } ], "model": "voyage-multimodal-3.5" } </code></pre> </details> </li> </ul> <span style="font-size: 13px;">The following constraints apply to the <code>inputs</code> list:</span> <ul> <li> The list must not contain more than 1,000 inputs. </li> <li> Each image must not contain more than 16 million pixels or be larger than 20 MB in size. </li> <li> Each video must not be larger than 20 MB in size. </li> <li> With every 560 pixels of an image and every 1120 pixels of a video being counted as a token, each input in the list must not exceed 32,000 tokens, and the total number of tokens across all inputs must not exceed 320,000. </li> </ul>
    - unknown
  - `model` string, required — Name of the model. Recommended options: `voyage-multimodal-3.5`, `voyage-multimodal-3`.
  - `input_type` 'null' | 'query' | 'document', nullable — Type of the input. Defaults to `null`. Other options: `query`, `document`. <ul> <li> When `input_type` is `null`, the embedding model directly converts the `inputs` into numerical vectors. For retrieval/search purposes, where a "query", which can be text or image in this case, is used to search for relevant information among a collection of data referred to as "documents," we recommend specifying whether your `inputs` are intended as queries or documents by setting `input_type` to `query` or `document`, respectively. In these cases, Voyage automatically prepends a prompt to your `inputs` before vectorizing them, creating vectors more tailored for retrieval/search tasks. Since inputs can be multimodal, "queries" and "documents" can be text, images, or an interleaving of both modalities. Embeddings generated with and without the `input_type` argument are compatible. </li> <li> For transparency, the following prompts are prepended to your input. </li> <ul> <li> For <code>query</code>, the prompt is <i>"Represent the query for retrieving supporting documents: ".</i> </li> <li> For <code>document</code>, the prompt is <i>"Represent the document for retrieval: ".</i> </li> </ul> <ul>
  - `truncation` boolean — Whether to truncate the inputs to fit within the context length. Defaults to `true`. <ul> <li> If `true`, an over-length input will be truncated to fit within the context length before being vectorized by the embedding model. If the truncation happens in the middle of an image, the entire image will be discarded. </li> <li> If `false`, an error will be raised if any input exceeds the context length. </li> </ul>
  - `output_encoding` 'null' | 'base64', nullable — Format in which the embeddings are encoded. Defaults to `null`. <ul> <li> If `null`, the embeddings are represented as a list of floating-point numbers. </li> <li> If `base64`, the embeddings are represented as a Base64-encoded NumPy array of single-precision floats. </li> </ul>

## Response `200`

Success

- MultimodalEmbeddingsObject
  - `object` string — The object type, which is always `list`.
  - `data` object[] — An array of embedding objects.
    - `object` string — The object type, which is always `embedding`.
    - `embedding` unknown[] — The embedding vector consists of a list of floating-point numbers or a Base64-encoded NumPy array depending on `output_encoding`. The length of this vector varies depending on the specific model.
      - unknown
    - `index` integer — An integer representing the index of the embedding within the list of embeddings.
  - `model` string — Name of the model.
  - `usage` object
    - `text_tokens` integer — The total number of text tokens in the list of inputs.
    - `image_pixels` integer — The total number of image pixels in the list of inputs.
    - `video_pixels` integer — The total number of video pixels in the list of inputs.
    - `total_tokens` integer — The combined total of text and image tokens. Every 560 pixels counts as a token.

## Other responses

- `4XX` — Client error <p> This indicates an issue with the request format or frequency. Please see our [Error Codes](https://docs.voyageai.com/docs/error-codes) guide. </p>
- `5XX` — Server Error <p> This indicates our servers are experiencing high traffic or having an unexpected issue. Please see our [Error Codes](https://docs.voyageai.com/docs/error-codes) guide. </p>

---

[API](https://skmtc.net/voyageai/apis/voyage-api.md) · [All operations](https://skmtc.net/voyageai/apis/voyage-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/voyageai/voyage-api/revisions/b5a3e09c43ce/schema)
