Claude's vision capability works on all four platforms — the Claude API, Claude Platform on AWS, Amazon Bedrock, Google Vertex AI, and Microsoft Foundry — and it bills the same way everywhere: an image is converted into visual tokens, which are charged at the model's ordinary input-token rate. There is no per-image fee and no separate vision price. That makes image cost unusually predictable, because the token count follows directly from pixel dimensions.
The formula
Claude processes images in 28×28-pixel patches. The token count is:
Priced at list input rates, that 1,296-token image costs 1,296 × $5/1M ≈ $0.0065 on Claude Opus 4.8, ≈ $0.0013 on Claude Haiku 4.5 ($1/MTok), and ≈ $0.013 on Claude Fable 5 ($10/MTok). Trivial per image — decisive at pipeline scale. A workflow processing 1 million such images a month on Opus 4.8 is buying 1.296 billion input tokens: about $6,480/month from the images alone.
Resolution tiers and automatic downscaling
You can't spend unbounded tokens on a huge image, because oversized images are downscaled automatically before tokenization. The ceiling depends on the model:
| Tier | Models | Max long edge | Max visual tokens per image |
|---|---|---|---|
| High-resolution | Claude Fable 5, Opus 4.8, Opus 4.7, Sonnet 5 | 2,576 px | 4,784 |
| Standard | All other models (incl. Haiku 4.5) | 1,568 px | 1,568 |
Note what this implies for migrations: moving a vision workload from a standard-tier model to a high-resolution one can multiply per-image tokens by up to ~3x, because the platform now preserves detail it previously discarded. Official guidance is explicit — downsample before sending if you don't need the fidelity.
Resizing is the whole optimization
Because the formula is quadratic-ish in dimensions, modest resizing yields outsized savings. Shrink that 1000×1000 image to 728×728 and it becomes 26 × 26 = 676 tokens — a 48% cut. Shrink to 504×504 and it's 18 × 18 = 324 tokens, a 75% cut. Whether that loses anything depends on the task: reading a dashboard's headline number survives aggressive downscaling; reading 8-point footnote text does not. Resize client-side, run your quality evals at each size, and pick the smallest size that passes — the API will never upscale on your behalf, so what you send is what you pay for (up to the tier cap).
# Downscale before upload: cheap insurance against oversized images
from PIL import Image
def shrink(path, longest=1092):
img = Image.open(path)
img.thumbnail((longest, longest)) # preserves aspect ratio
return img # ~39x39 patches max ≈ 1,521 tokens
Limits and platform quirks worth budgeting around
Size and count limits. Max image file size is 10 MB base64-encoded on the Claude API (5 MB on Bedrock and Google Cloud); max dimensions 8000×8000 px. A request can carry up to 600 images on 1M-context models, 100 on 200k-context models — but beyond 20 images per request, a stricter per-image limit of roughly 2,000 px per dimension applies.
Payload vs. token limits. Base64-encoded images inflate request size, and the 32 MB request cap can arrive before any token limit does. On the Claude API and Claude Platform on AWS, the Files API lets you upload once and reference by file_id; Bedrock and Google Cloud currently accept base64 image sources only.
Hidden vision spend. Screenshots taken by the computer-use tool are billed as vision input by this same formula — agentic browsing workloads are image-token workloads in disguise.
Caching applies. Images inside message content are cacheable, so a reference image used across many requests can ride the 0.1x cache-read rate like any other input. Adding or removing images invalidates the message-level cache, so keep stable images early in the prompt.
Where to go next
Documents are the other pixel-driven cost: PDF token costs applies this same formula page by page. For where visual tokens appear on the invoice, see the token bill anatomy.