Vision
Models with image input take images as image_url content parts in a user
message. Which models: the ones marked “vision” on the
models page, for example zai-org/glm-5.3-flash,
google/gemma-4-31b-it, moonshotai/kimi-k3 and
deepseek/deepseek-v4.1-flash. Text-only models refuse or ignore images.
Image by URL
Section titled “Image by URL”The URL must be publicly reachable: the provider downloads it.
curl https://api.thetoken.dev/v1/chat/completions \ -H "Authorization: Bearer $TOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "zai-org/glm-5.3-flash", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "Describe this image in one sentence."}, {"type": "image_url", "image_url": {"url": "https://thetoken.dev/brand/og-image.png"}} ] }] }'import osfrom openai import OpenAI
client = OpenAI(base_url="https://api.thetoken.dev/v1", api_key=os.environ["TOKEN_API_KEY"])
response = client.chat.completions.create( model="zai-org/glm-5.3-flash", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Describe this image in one sentence."}, {"type": "image_url", "image_url": {"url": "https://thetoken.dev/brand/og-image.png"}}, ], }],)print(response.choices[0].message.content)import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://api.thetoken.dev/v1', apiKey: process.env.TOKEN_API_KEY })
const response = await client.chat.completions.create({ model: 'zai-org/glm-5.3-flash', messages: [ { role: 'user', content: [ { type: 'text', text: 'Describe this image in one sentence.' }, { type: 'image_url', image_url: { url: 'https://thetoken.dev/brand/og-image.png' } }, ], }, ],})console.log(response.choices[0].message.content)Image from a file
Section titled “Image from a file”Send local images as a base64 data: URL:
import base64import osfrom openai import OpenAI
client = OpenAI(base_url="https://api.thetoken.dev/v1", api_key=os.environ["TOKEN_API_KEY"])
with open("receipt.jpg", "rb") as f: data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
response = client.chat.completions.create( model="google/gemma-4-31b-it", messages=[{ "role": "user", "content": [ {"type": "text", "text": "What is the total on this receipt?"}, {"type": "image_url", "image_url": {"url": data_url}}, ], }],)print(response.choices[0].message.content)Good to know
Section titled “Good to know”- Images count as input tokens, billed at the model’s input price; the
usageof the response shows the total. - On
/v1/messages, send images as Anthropicimageblocks ({"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "..."}}).