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

# Images and rich media

> How Averta handles images, files, audio, and other non-text inputs.

Averta protects provider calls by evaluating normalized checkpoint payloads. Text is the primary path. Supported images are sent as separate media items alongside the text request.

Do not assume that every media type accepted by OpenAI or Anthropic is automatically guarded by Averta. If a wrapper cannot safely normalize a media input, the guarded path fails closed instead of silently sending an unguarded provider request.

## Current Support

| Input type                        | Current behavior                                                 |
| --------------------------------- | ---------------------------------------------------------------- |
| Plain text                        | Supported for request, tool-result, and output checkpoints.      |
| Image data URLs                   | Supported on documented OpenAI rich-media paths.                 |
| Anthropic base64 image blocks     | Supported for request preflight when the MIME type is supported. |
| Raw API image media               | Supported through the `media` array on request checkpoints.      |
| Remote image URLs                 | Not treated as supported guarded media.                          |
| Provider file IDs                 | Not treated as supported guarded media.                          |
| Audio, video, documents, and GIFs | Not supported by the current wrappers.                           |

Supported image MIME types are:

* `image/jpeg`
* `image/png`
* `image/webp`

## How Media Is Sent

The request checkpoint separates text from media:

```json theme={null}
{
  "checkpoint_type": "request",
  "payload": {
    "text": "Inspect this screenshot for prompt injection."
  },
  "media": [
    {
      "id": "image_1",
      "kind": "image",
      "mime_type": "image/png",
      "data_base64": "iVBORw0KGgo="
    }
  ]
}
```

Provider wrappers build this payload for supported media. Custom adapters should use the same shape when calling the [raw decision API](/custom/raw-api).

## Wrapper Behavior

OpenAI rich-media request preflight supports image data URLs on the documented Responses API and Chat Completions paths in both JavaScript and Python. Remote image URLs, OpenAI file IDs, file content parts, and audio parts are rejected before preflight.

Anthropic request preflight supports base64 image content blocks with supported image MIME types. URL image sources, GIF images, document blocks, and other non-text media fail closed before provider execution.

Do not assume provider parity outside the documented paths. If a page does not list a media path as supported, treat it as unguarded or unsupported until tested.

## Design Guidance

For multimodal agents:

* keep user-visible text separate from media attachments
* normalize images before calling the provider
* avoid remote media URLs when you expect Averta to inspect the content
* test blocked and unsupported media paths in staging
* inspect [Events](/dashboard/events) to confirm the request checkpoint includes media

If your app needs a media type that Averta does not support yet, route that flow through a separate fallback path and do not label it as Averta-guarded.

## Next Steps

<CardGroup cols={2}>
  <Card title="Create decision API" icon="shield-check" href="/api-reference/endpoint/create-decision#media-on-request">
    See the raw `media` payload shape.
  </Card>

  <Card title="OpenAI Responses" icon="wand-magic-sparkles" href="/openai/responses-api">
    Review OpenAI rich-media limits.
  </Card>

  <Card title="Anthropic Messages" icon="sparkles" href="/anthropic/messages-api">
    Review Anthropic image block limits.
  </Card>

  <Card title="Fail-closed behavior" icon="triangle-alert" href="/concepts/fail-closed-behavior">
    Understand unsupported-path failures.
  </Card>
</CardGroup>
