Skip to content

Vision

메시지에 이미지를 넣어 멀티모달 모델로 분석합니다.

POST/v1/chat/completions

비전(이미지 입력)은 별도의 엔드포인트가 아니라 /v1/chat/completions의 메시지 안에서 동작합니다. 이미지는 최상위 파라미터가 아니라 messages[].content콘텐츠 파트 배열로 구성해 그 안에 넣습니다. 라우팅된 모델이 비전을 지원하면 그대로 사용할 수 있으며, 별도의 활성화 플래그는 없습니다.

요청#

content를 문자열 대신 파트 배열로 바꾸세요. 사용 가능한 파트 타입은 텍스트용 {"type": "text", "text": "..."}와 이미지용 {"type": "image_url", "image_url": {"url": "..."}} 두 가지입니다.

url에는 공개 https 이미지 URL을 넣을 수 있습니다. OpenAI · Google 모델은 네이티브로 그대로 전달되고, Anthropic(Claude) 모델로 라우팅되면 라우터가 자동으로 변환해 줍니다.

image_url (https)
curl https://router.pleum.ai/v1/chat/completions \
  -H "Authorization: Bearer $PLEUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "What is in this image?"},
          {
            "type": "image_url",
            "image_url": {
              "url": "https://example.com/photo.png"
            }
          }
        ]
      }
    ]
  }'

외부 URL 대신 base64 데이터 URL(data:image/png;base64,...)로 이미지를 인라인으로 보낼 수도 있습니다. PNG · JPEG · WebP · GIF 등 일반적인 형식을 지원합니다.

image_url (base64 data URL)
{
  "model": "gpt-4o",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Describe this diagram."},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
          }
        }
      ]
    }
  ]
}

모델별 지원 여부#

비전은 라우팅된 모델이 이미지 입력을 지원하는 경우에만 동작합니다. 현재 GET /v1/models 응답으로는 모델별 비전 지원 여부를 구분할 수 없으니, 각 제공사의 모델 문서에서 확인하세요. 비전을 지원하지 않는 모델에 이미지를 보내면 오류가 반환됩니다.

응답#

응답은 일반 채팅 완성과 동일한 형식입니다. 이미지는 모델에서 입력 토큰으로 계산되어 usage.prompt_tokens에 합산되고, 비용은 cost에 반영됩니다.

200 OK
{
  "id": "chatcmpl-gpt-4o-1204ms",
  "object": "chat.completion",
  "model": "gpt-4o",
  "provider": "openai",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The image shows a red bicycle leaning against a brick wall."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1124,
    "completion_tokens": 16,
    "total_tokens": 1140
  },
  "cost": {
    "usd": 0.003012,
    "krw": 5,
    "fx_rate": 1390.5,
    "markup_rate": 0.0
  }
}
파트에 "cache_control": {"type": "ephemeral"}를 붙이는 것은Anthropic(Claude)에만 영향을 줍니다(명시적 캐싱). OpenAI · Gemini · DeepSeek은 자동 캐싱되며 이 마커를 무시합니다.