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

# Multimodal inputs

> Guard images, audio, documents, archives, and video by sending them as content parts.

A `user` message's `content` can be an array of **content parts**, so a single request can mix text and files. There are **six Input Types** — Text, Image, Audio, Video, Document, and Archive — and the Guardian inspects each part whose [Input Type](/en/v1.2/concepts/guardian) is enabled.

```json theme={null}
{
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "Please review the attached file." },
      { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0..." } }
    ]
  }],
  "processType": "input"
}
```

## Content part types

| `type`        | Input Type         | Encoding                                                                                      |
| ------------- | ------------------ | --------------------------------------------------------------------------------------------- |
| `text`        | Text               | plain string in `text`                                                                        |
| `image_url`   | Image              | `image_url.url` as a `data:` URI (PNG, JPG, WebP, GIF, BMP, TIFF, AVIF, HEIC)                 |
| `input_audio` | Audio              | `input_audio.data` (base64) + `input_audio.format` (`wav`, `mp3`)                             |
| `file`        | Document / Archive | `file.file_data` as a `data:` URI + `file.filename` (PDF, DOCX, XLSX, PPTX, TXT, CSV, …, ZIP) |
| `video_url`   | Video              | `video_url.url` as a `data:` URI (MP4) — a Starfort extension                                 |

Document and Archive both use `type: "file"`; Starfort routes them to the right Input Type by the file's **actual MIME / magic-byte type**, not by the `type` field. Encode `data:` URI payloads with **standard** base64 (`+`, `/`, `=`) — URL-safe base64 (`-`, `_`) is not supported.

## Rules

* A part is only inspected if its **Input Type is enabled on the Guardian**. Otherwise the request is rejected, or the part is skipped, depending on the Guardian's unsupported-file handling (below).
* In the response, each part is reported as its own `input_results[]` entry with a `type` of `text` / `image` / `audio` / `video` / `document` / `archive`, and file parts carry an `identifier` (filename).

## Unsupported files

When a **file** part's category or extension isn't enabled on the Guardian, the Guardian's **Unsupported File Handling** setting decides what happens:

* **BLOCK (default)** — a single unsupported file blocks the **whole request** during pre-validation. The supported parts (text, allowed files) aren't inspected either.
* **PASS** — only the unsupported file part is **skipped** (passed through without Guardian analysis); the rest of the request is inspected normally. If *every* input is unsupported, the request passes with no Guardian call. Skipped files are recorded in the trace (`skippedUnsupportedFiles` metadata + an `unsupported_file:skipped` tag).

<Note>
  **A disguised file is always blocked.** Even under PASS, a file whose extension is allowed but whose real content (magic bytes) doesn't match its declared type is blocked — the check is on actual content, not the file name.
</Note>

<Note>
  Enable the Input Types you intend to send when you [register the Guardian](/en/v1.2/admin/register-guardian). The default `VLM-OCR` preset supports text plus a broad set of image, document, and archive formats.
</Note>
