Loading...
    • Developer Guide
    • API Reference
    • MCP
    • Resources
    • Release Notes
    Search...
    ⌘K

    First steps

    Intro to ClaudeQuickstart

    Models & pricing

    Models overviewChoosing a modelWhat's new in Claude 4.5Migrating to Claude 4.5Model deprecationsPricing

    Build with Claude

    Features overviewUsing the Messages APIContext windowsPrompting best practices

    Capabilities

    Prompt cachingContext editingExtended thinkingStreaming MessagesBatch processingCitationsMultilingual supportToken countingEmbeddingsVisionPDF supportFiles APISearch resultsGoogle Sheets add-on

    Tools

    OverviewHow to implement tool useToken-efficient tool useFine-grained tool streamingBash toolCode execution toolComputer use toolText editor toolWeb fetch toolWeb search toolMemory tool

    Agent Skills

    OverviewQuickstartBest practicesUsing Skills with the API

    Agent SDK

    OverviewTypeScript SDKPython SDK

    Guides

    Streaming InputHandling PermissionsSession ManagementHosting the Agent SDKModifying system promptsMCP in the SDKCustom ToolsSubagents in the SDKSlash Commands in the SDKAgent Skills in the SDKTracking Costs and UsageTodo ListsPlugins in the SDK

    MCP in the API

    MCP connectorRemote MCP servers

    Claude on 3rd-party platforms

    Amazon BedrockVertex AI

    Prompt engineering

    OverviewPrompt generatorUse prompt templatesPrompt improverBe clear and directUse examples (multishot prompting)Let Claude think (CoT)Use XML tagsGive Claude a role (system prompts)Prefill Claude's responseChain complex promptsLong context tipsExtended thinking tips

    Test & evaluate

    Define success criteriaDevelop test casesUsing the Evaluation ToolReducing latency

    Strengthen guardrails

    Reduce hallucinationsIncrease output consistencyMitigate jailbreaksStreaming refusalsReduce prompt leakKeep Claude in character

    Administration and monitoring

    Admin API overviewUsage and Cost APIClaude Code Analytics API
    Console
    Capabilities

    Vision

    The Claude 3 and 4 families of models comes with new vision capabilities that allow Claude to understand and analyze images, opening up exciting possibilities for multimodal interaction.

    This guide describes how to work with images in Claude, including best practices, code examples, and limitations to keep in mind.


    How to use vision

    Use Claude’s vision capabilities via:

    • claude.ai. Upload an image like you would a file, or drag and drop an image directly into the chat window.
    • The Console Workbench. If you select a model that accepts images (Claude 3 and 4 models only), a button to add images appears at the top right of every User message block.
    • API request. See the examples in this guide.

    Before you upload

    Basics and Limits

    You can include multiple images in a single request (up to 20 for claude.ai and 100 for API requests). Claude will analyze all provided images when formulating its response. This can be helpful for comparing or contrasting images.

    If you submit an image larger than 8000x8000 px, it will be rejected. If you submit more than 20 images in one API request, this limit is 2000x2000 px.

    While the API supports 100 images per request, there is a 32MB request size limit for standard endpoints.

    Evaluate image size

    For optimal performance, we recommend resizing images before uploading if they are too large. If your image’s long edge is more than 1568 pixels, or your image is more than ~1,600 tokens, it will first be scaled down, preserving aspect ratio, until it’s within the size limits.

    If your input image is too large and needs to be resized, it will increase latency of time-to-first-token, without giving you any additional model performance. Very small images under 200 pixels on any given edge may degrade performance.

    To improve time-to-first-token, we recommend resizing images to no more than 1.15 megapixels (and within 1568 pixels in both dimensions).

    Here is a table of maximum image sizes accepted by our API that will not be resized for common aspect ratios. With the Claude Sonnet 3.7 model, these images use approximately 1,600 tokens and around $4.80/1K images.

    Aspect ratioImage size
    1
    1092x1092 px
    3
    951x1268 px
    2
    896x1344 px
    9
    819x1456 px
    1
    784x1568 px

    Calculate image costs

    Each image you include in a request to Claude counts towards your token usage. To calculate the approximate cost, multiply the approximate number of image tokens by the per-token price of the model you’re using.

    If your image does not need to be resized, you can estimate the number of tokens used through this algorithm: tokens = (width px * height px)/750

    Here are examples of approximate tokenization and costs for different image sizes within our API’s size constraints based on Claude Sonnet 3.7 per-token price of $3 per million input tokens:

    Image size# of TokensCost / imageCost / 1K images
    200x200 px(0.04 megapixels)~54~$0.00016~$0.16
    1000x1000 px(1 megapixel)~1334~$0.004~$4.00
    1092x1092 px(1.19 megapixels)~1590~$0.0048~$4.80

    Ensuring image quality

    When providing images to Claude, keep the following in mind for best results:

    • Image format: Use a supported image format: JPEG, PNG, GIF, or WebP.
    • Image clarity: Ensure images are clear and not too blurry or pixelated.
    • Text: If the image contains important text, make sure it’s legible and not too small. Avoid cropping out key visual context just to enlarge the text.

    Prompt examples

    Many of the prompting techniques that work well for text-based interactions with Claude can also be applied to image-based prompts.

    These examples demonstrate best practice prompt structures involving images.

    Just as with document-query placement, Claude works best when images come before text. Images placed after text or interpolated with text will still perform well, but if your use case allows it, we recommend an image-then-text structure.

    About the prompt examples

    The following examples demonstrate how to use Claude's vision capabilities using various programming languages and approaches. You can provide images to Claude in three ways:

    1. As a base64-encoded image in image content blocks
    2. As a URL reference to an image hosted online
    3. Using the Files API (upload once, use multiple times)

    The base64 example prompts use these variables:

    Shell
        # For URL-based images, you can use the URL directly in your JSON request
        
        # For base64-encoded images, you need to first encode the image
        # Example of how to encode an image to base64 in bash:
        BASE64_IMAGE_DATA=$(curl -s "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg" | base64)
        
        # The encoded data can now be used in your API calls
    Python
    import base64
    import httpx
    
    # For base64-encoded images
    image1_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
    image1_media_type = "image/jpeg"
    image1_data = base64.standard_b64encode(httpx.get(image1_url).content).decode("utf-8")
    
    image2_url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg"
    image2_media_type = "image/jpeg"
    image2_data = base64.standard_b64encode(httpx.get(image2_url).content).decode("utf-8")
    
    # For URL-based images, you can use the URLs directly in your requests
    TypeScript
    import axios from 'axios';
    
    // For base64-encoded images
    async function getBase64Image(url: string): Promise<string> {
      const response = await axios.get(url, { responseType: 'arraybuffer' });
      return Buffer.from(response.data, 'binary').toString('base64');
    }
    
    // Usage
    async function prepareImages() {
      const imageData = await getBase64Image('https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg');
      // Now you can use imageData in your API calls
    }
    
    // For URL-based images, you can use the URLs directly in your requests
    Java
    import java.io.IOException;
    import java.util.Base64;
    import java.io.InputStream;
    import java.net.URL;
    
    public class ImageHandlingExample {
    
        public static void main(String[] args) throws IOException, InterruptedException {
            // For base64-encoded images
            String image1Url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg";
            String image1MediaType = "image/jpeg";
            String image1Data = downloadAndEncodeImage(image1Url);
    
            String image2Url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg";
            String image2MediaType = "image/jpeg";
            String image2Data = downloadAndEncodeImage(image2Url);
    
            // For URL-based images, you can use the URLs directly in your requests
        }
    
        private static String downloadAndEncodeImage(String imageUrl) throws IOException {
            try (InputStream inputStream = new URL(imageUrl).openStream()) {
                return Base64.getEncoder().encodeToString(inputStream.readAllBytes());
            }
        }
    
    }

    Below are examples of how to include images in a Messages API request using base64-encoded images and URL references:

    Base64-encoded image example

    curl https://api.anthropic.com/v1/messages \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "content-type: application/json" \
      -d '{
        "model": "claude-sonnet-4-5",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "image",
                "source": {
                  "type": "base64",
                  "media_type": "image/jpeg",
                  "data": "'"$BASE64_IMAGE_DATA"'"
                }
              },
              {
                "type": "text",
                "text": "Describe this image."
              }
            ]
          }
        ]
      }'

    URL-based image example

    curl https://api.anthropic.com/v1/messages \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "content-type: application/json" \
      -d '{
        "model": "claude-sonnet-4-5",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "image",
                "source": {
                  "type": "url",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
                }
              },
              {
                "type": "text",
                "text": "Describe this image."
              }
            ]
          }
        ]
      }'

    Files API image example

    For images you'll use repeatedly or when you want to avoid encoding overhead, use the Files API:

    # First, upload your image to the Files API
    curl -X POST https://api.anthropic.com/v1/files \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "anthropic-beta: files-api-2025-04-14" \
      -F "[email protected]"
    
    # Then use the returned file_id in your message
    curl https://api.anthropic.com/v1/messages \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "anthropic-beta: files-api-2025-04-14" \
      -H "content-type: application/json" \
      -d '{
        "model": "claude-sonnet-4-5",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "image",
                "source": {
                  "type": "file",
                  "file_id": "file_abc123"
                }
              },
              {
                "type": "text",
                "text": "Describe this image."
              }
            ]
          }
        ]
      }'

    See Messages API examples for more example code and parameter details.


    Limitations

    While Claude's image understanding capabilities are cutting-edge, there are some limitations to be aware of:

    • People identification: Claude cannot be used to identify (i.e., name) people in images and will refuse to do so.
    • Accuracy: Claude may hallucinate or make mistakes when interpreting low-quality, rotated, or very small images under 200 pixels.
    • Spatial reasoning: Claude's spatial reasoning abilities are limited. It may struggle with tasks requiring precise localization or layouts, like reading an analog clock face or describing exact positions of chess pieces.
    • Counting: Claude can give approximate counts of objects in an image but may not always be precisely accurate, especially with large numbers of small objects.
    • AI generated images: Claude does not know if an image is AI-generated and may be incorrect if asked. Do not rely on it to detect fake or synthetic images.
    • Inappropriate content: Claude will not process inappropriate or explicit images that violate our Acceptable Use Policy.
    • Healthcare applications: While Claude can analyze general medical images, it is not designed to interpret complex diagnostic scans such as CTs or MRIs. Claude's outputs should not be considered a substitute for professional medical advice or diagnosis.

    Always carefully review and verify Claude's image interpretations, especially for high-stakes use cases. Do not use Claude for tasks requiring perfect precision or sensitive image analysis without human oversight.


    FAQ


    Dive deeper into vision

    Ready to start building with images using Claude? Here are a few helpful resources:

    • Multimodal cookbook: This cookbook has tips on getting started with images and best practice techniques to ensure the highest quality performance with images. See how you can effectively prompt Claude with images to carry out tasks such as interpreting and analyzing charts or extracting content from forms.
    • API reference: Visit our documentation for the Messages API, including example API calls involving images.

    If you have any other questions, feel free to reach out to our support team. You can also join our developer community to connect with other creators and get help from Anthropic experts.

    • How to use vision
    • Before you upload
    • Basics and Limits
    • Evaluate image size
    • Calculate image costs
    • Ensuring image quality
    • Prompt examples
    • About the prompt examples
    • Base64-encoded image example
    • URL-based image example
    • Files API image example
    • Limitations
    • FAQ
    • Dive deeper into vision
    © 2025 ANTHROPIC PBC

    Products

    • Claude
    • Claude Code
    • Max plan
    • Team plan
    • Enterprise plan
    • Download app
    • Pricing
    • Log in

    Features

    • Claude and Slack
    • Claude in Excel

    Models

    • Opus
    • Sonnet
    • Haiku

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Claude Developer Platform

    • Overview
    • Developer docs
    • Pricing
    • Amazon Bedrock
    • Google Cloud’s Vertex AI
    • Console login

    Learn

    • Blog
    • Catalog
    • Courses
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Help and security

    • Availability
    • Status
    • Support center

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy

    Products

    • Claude
    • Claude Code
    • Max plan
    • Team plan
    • Enterprise plan
    • Download app
    • Pricing
    • Log in

    Features

    • Claude and Slack
    • Claude in Excel

    Models

    • Opus
    • Sonnet
    • Haiku

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Claude Developer Platform

    • Overview
    • Developer docs
    • Pricing
    • Amazon Bedrock
    • Google Cloud’s Vertex AI
    • Console login

    Learn

    • Blog
    • Catalog
    • Courses
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Help and security

    • Availability
    • Status
    • Support center

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    © 2025 ANTHROPIC PBC