Multimodal input

Several models accept images alongside text, using the standard OpenAI content-parts format. Look for the Text + Image badge on a model card. Text-only models will reject image parts with a clean 400.

Audio input is not yet available on any model. It is on the roadmap; audio parts sent today return a clean 400.

Models that accept image input:

  • mimo-v2.5 (multimodal flagship)
  • gemma-4-31b
  • kimi-k2.6
  • kimi-k2.7
  • nemotron-3-ultra

Sending an image

Use a content array with a text part and an image_url part. The URL can be a public https:// URL or a base64 data: URI.

Python

resp = client.chat.completions.create(
    model="mimo-v2.5",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What's in this image?"},
            {"type": "image_url", "image_url": {
                "url": "https://example.com/photo.jpg"
            }},
        ],
    }],
)

Base64 data URI

import base64

with open("photo.jpg", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

messages = [{
    "role": "user",
    "content": [
        {"type": "text", "text": "Describe this picture."},
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
    ],
}]

curl

curl https://api.pgsgrove.com/v1/chat/completions \
  -H "Authorization: Bearer $PGS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k2.7",
    "messages": [{
      "role": "user",
      "content": [
        { "type": "text", "text": "Read the text in this image." },
        { "type": "image_url", "image_url": { "url": "https://example.com/sign.png" } }
      ]
    }]
  }'

Billing & privacy

Image tokens are metered automatically and billed like any other input tokens. Images are transit-only: they are forwarded to the model to answer your request and are not stored. This is a passthrough API: what you send is what gets processed, nothing more.

Image generation is not offered. These models take images as input only.