Docs

Vision input

Codex only. Claude Code, Gemini CLI, and Grok all silently drop any image_url content part today — no error, the image is just ignored and the text-only portion of your message goes through. Don't rely on vision through those three endpoints.

On Codex, send images inline in a message's content — a list of content parts mixing text and image_url entries, the same familiar shape modern vision APIs use.

POST /t/acme/codex/chat/completions

{
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What's in this screenshot?" },
        { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBOR..." } }
      ]
    }
  ]
}

Note: only data: URIs (base64-encoded images, JPEG/PNG/WebP, up to 15MB) are supported — remote http(s):// image URLs are rejected. This is a deliberate scope decision to avoid adding an outbound-fetch attack surface.