# Messages

## OpenAPI Specification

```yaml
openapi: 3.0.1
info:
  title: ''
  description: ''
  version: 1.0.0
paths:
  /v1/messages:
    post:
      summary: Messages
      deprecated: false
      description: >-
        Send a structured list of input messages with text and/or image content,
        and the model will generate the next message in the conversation.

        The Messages API can be used for either single queries or stateless
        multi-turn conversations.
      tags:
        - 'SSE API Documentations/Example: Anthropic'
      parameters:
        - name: anthropic-beta
          in: header
          description: >-
            Optional header to specify the beta version(s) you want to use.


            To use multiple betas, use a comma separated list like `beta1,beta2`
            or specify the header multiple times for each beta.
          required: false
          example: ''
          schema:
            type: string
        - name: anthropic-version
          in: header
          description: The version of the Anthropic API you want to use.
          required: true
          example: '2023-06-01'
          schema:
            type: string
        - name: x-api-key
          in: header
          description: >-
            Your unique API key for authentication.


            This key is required in the header of all API requests, to
            authenticate your account and access Anthropic's services. Get your
            API key through the Console. Each key is scoped to a Workspace.
          required: true
          example: $ANTHROPIC_API_KEY
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                max_tokens:
                  type: integer
                  description: >-
                    The maximum number of tokens to generate before stopping.


                    Note that our models may stop *before* reaching this
                    maximum. This parameter only specifies the absolute maximum
                    number of tokens to generate.


                    Different models have different maximum values for this
                    parameter.
                  minimum: 1
                  exclusiveMinimum: true
                messages:
                  type: object
                  properties:
                    content:
                      type: string
                    role:
                      type: string
                      enum:
                        - user
                        - assistant
                      x-apidog-enum:
                        - value: user
                          name: ''
                          description: ''
                        - value: assistant
                          name: ''
                          description: ''
                  x-apidog-orders:
                    - content
                    - role
                  description: >-
                    Input messages.


                    Our models are trained to operate on alternating `user` and
                    `assistant` conversational turns. When creating a new
                    `Message`, you specify the prior conversational turns with
                    the `messages` parameter, and the model then generates the
                    next `Message` in the conversation. Consecutive `user` or
                    `assistant` turns in your request will be combined into a
                    single turn.


                    Each input message must be an object with a `role` and
                    `content`. You can specify a single `user`-role message, or
                    you can include multiple `user` and `assistant` messages.


                    If the final message uses the `assistant` role, the response
                    content will continue immediately from the content in that
                    message. This can be used to constrain part of the model's
                    response.


                    Example with a single `user` message:


                    ```json

                    [{"role": "user", "content": "Hello, Claude"}]

                    ```


                    Example with multiple conversational turns:


                    ```json

                    [
                      {"role": "user", "content": "Hello there."},
                      {"role": "assistant", "content": "Hi, I'm Claude. How can I help you?"},
                      {"role": "user", "content": "Can you explain LLMs in plain English?"},
                    ]

                    ```


                    Example with a partially-filled response from Claude:


                    ```json

                    [
                      {"role": "user", "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun"},
                      {"role": "assistant", "content": "The best answer is ("},
                    ]

                    ```


                    Each input message `content` may be either a single `string`
                    or an array of content blocks, where each block has a
                    specific `type`. Using a `string` for `content` is shorthand
                    for an array of one content block of type `"text"`. The
                    following input messages are equivalent:


                    ```json

                    {"role": "user", "content": "Hello, Claude"}

                    {"role": "user", "content": [{"type": "text", "text":
                    "Hello, Claude"}]}

                    ```


                    Starting with Claude 3 models, you can also send image
                    content blocks:


                    ```json

                    {"role": "user", "content": [
                      {
                        "type": "image",
                        "source": {
                          "type": "base64",
                          "media_type": "image/jpeg",
                          "data": "/9j/4AAQSkZJRg...",
                        }
                      },
                      {"type": "text", "text": "What is in this image?"}
                    ]}

                    ```


                    We currently support the `base64` source type for images,
                    and the `image/jpeg`, `image/png`, `image/gif`, and
                    `image/webp` media types.


                    See
                    [examples](https://docs.anthropic.com/en/api/messages-examples#vision)
                    for more input examples.


                    Note that if you want to include a [system
                    prompt](https://docs.anthropic.com/en/docs/system-prompts),
                    you can use the top-level `system` parameter — there is no
                    `"system"` role for input messages in the Messages API.
                  required:
                    - content
                    - role
                model:
                  type: string
                  description: The model that will complete your prompt.
                  minLength: 1
                  maxLength: 256
                metadata:
                  type: object
                  properties:
                    user_id:
                      type: string
                      description: >-
                        An external identifier for the user who is associated
                        with the request.


                        This should be a uuid, hash value, or other opaque
                        identifier. Anthropic may use this id to help detect
                        abuse. Do not include any identifying information such
                        as name, email address, or phone number.
                      maxLength: 256
                      nullable: true
                  x-apidog-orders:
                    - user_id
                  description: An object describing metadata about the request.
                  required:
                    - user_id
                stop_sequences:
                  type: string
                  description: >-
                    Custom text sequences that will cause the model to stop
                    generating.


                    Our models will normally stop when they have naturally
                    completed their turn, which will result in a response
                    `stop_reason` of `"end_turn"`.


                    If you want the model to stop generating when it encounters
                    custom strings of text, you can use the `stop_sequences`
                    parameter. If the model encounters one of the custom
                    sequences, the response `stop_reason` value will be
                    `"stop_sequence"` and the response `stop_sequence` value
                    will contain the matched stop sequence.
                stream:
                  type: boolean
                  description: >-
                    Whether to incrementally stream the response using
                    server-sent events.
                system:
                  type: string
                  description: >-
                    System prompt.


                    A system prompt is a way of providing context and
                    instructions to Claude, such as specifying a particular goal
                    or role.
                temperature:
                  type: number
                  description: >-
                    Amount of randomness injected into the response.


                    Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use
                    `temperature` closer to `0.0` for analytical / multiple
                    choice, and closer to `1.0` for creative and generative
                    tasks.


                    Note that even with `temperature` of `0.0`, the results will
                    not be fully deterministic.
                  minimum: 0
                  maximum: 1
                  exclusiveMinimum: true
                  exclusiveMaximum: true
                thinking:
                  oneOf:
                    - type: object
                      properties:
                        budget_tokens:
                          type: integer
                          description: >-
                            Determines how many tokens Claude can use for its
                            internal reasoning process. Larger budgets can
                            enable more thorough analysis for complex problems,
                            improving response quality.


                            Must be ≥1024 and less than `max_tokens`.
                          minimum: 1024
                          exclusiveMinimum: true
                        type:
                          type: string
                          enum:
                            - enabled
                          x-apidog-enum:
                            - value: enabled
                              name: ''
                              description: ''
                      x-apidog-orders:
                        - budget_tokens
                        - type
                      description: Enabled
                      required:
                        - budget_tokens
                        - type
                    - type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - disabled
                          x-apidog-enum:
                            - value: disabled
                              name: ''
                              description: ''
                      x-apidog-orders:
                        - type
                      description: Disabled
                      required:
                        - type
                  description: >-
                    Configuration for enabling Claude's extended thinking.


                    When enabled, responses include `thinking` content blocks
                    showing Claude's thinking process before the final answer.
                    Requires a minimum budget of 1,024 tokens and counts towards
                    your `max_tokens` limit.
                tool_choice:
                  oneOf:
                    - type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - auto
                          x-apidog-enum:
                            - value: auto
                              name: ''
                              description: ''
                        disable_parallel_tool_use:
                          type: boolean
                          description: >-
                            Whether to disable parallel tool use.


                            Defaults to `false`. If set to `true`, the model
                            will output at most one tool use.
                      x-apidog-orders:
                        - type
                        - disable_parallel_tool_use
                      description: Auto
                      required:
                        - type
                        - disable_parallel_tool_use
                    - type: object
                      properties:
                        type:
                          type: string
                          description: >-
                            Whether to disable parallel tool use.


                            Defaults to `false`. If set to `true`, the model
                            will output at most one tool use.
                          enum:
                            - any
                          x-apidog-enum:
                            - value: any
                              name: ''
                              description: ''
                        disable_parallel_tool_use:
                          type: string
                          description: >-
                            Whether to disable parallel tool use.


                            Defaults to `false`. If set to `true`, the model
                            will output at most one tool use.
                      x-apidog-orders:
                        - type
                        - disable_parallel_tool_use
                      required:
                        - type
                        - disable_parallel_tool_use
                      description: Any
                    - type: object
                      properties:
                        name:
                          type: string
                          description: The name of the tool to use.
                        type:
                          type: string
                          enum:
                            - tool
                          x-apidog-enum:
                            - value: tool
                              name: ''
                              description: ''
                        disable_parallel_tool_use:
                          type: string
                          description: >-
                            Whether to disable parallel tool use.


                            Defaults to `false`. If set to `true`, the model
                            will output at most one tool use.
                      x-apidog-orders:
                        - name
                        - type
                        - disable_parallel_tool_use
                      description: Tool
                      required:
                        - name
                        - type
                        - disable_parallel_tool_use
                    - type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - none
                          x-apidog-enum:
                            - value: none
                              name: ''
                              description: ''
                      x-apidog-orders:
                        - type
                      description: ToolChoiceNone
                      required:
                        - type
                tools:
                  type: object
                  properties: {}
                  x-apidog-orders: []
                  description: >-
                    Definitions of tools that the model may use.


                    If you include `tools` in your API request, the model may
                    return `tool_use` content blocks that represent the model's
                    use of those tools. You can then run those tools using the
                    tool input generated by the model and then optionally return
                    results back to the model using `tool_result` content
                    blocks.


                    Each tool definition includes:


                    - `name`: Name of the tool.

                    - `description`: Optional, but strongly-recommended
                    description of the tool.

                    - `input_schema`: [JSON
                    schema](https://json-schema.org/draft/2020-12) for the tool
                    `input` shape that the model will produce in `tool_use`
                    output content blocks.


                    For example, if you defined `tools` as:


                    ```json

                    [
                      {
                        "name": "get_stock_price",
                        "description": "Get the current stock price for a given ticker symbol.",
                        "input_schema": {
                          "type": "object",
                          "properties": {
                            "ticker": {
                              "type": "string",
                              "description": "The stock ticker symbol, e.g. AAPL for Apple Inc."
                            }
                          },
                          "required": ["ticker"]
                        }
                      }
                    ]

                    ```


                    And then asked the model "What's the S&P 500 at today?", the
                    model might produce `tool_use` content blocks in the
                    response like this:


                    ```json

                    [
                      {
                        "type": "tool_use",
                        "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV",
                        "name": "get_stock_price",
                        "input": { "ticker": "^GSPC" }
                      }
                    ]

                    ```


                    You might then run your `get_stock_price` tool with
                    `{"ticker": "^GSPC"}` as an input, and return the following
                    back to the model in a subsequent `user` message:


                    ```json

                    [
                      {
                        "type": "tool_result",
                        "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV",
                        "content": "259.75 USD"
                      }
                    ]

                    ```


                    Tools can be used for workflows that include running
                    client-side tools and functions, or more generally whenever
                    you want the model to produce a particular JSON structure of
                    output.
                top_k:
                  type: integer
                  description: >-
                    Only sample from the top K options for each subsequent
                    token.


                    Used to remove "long tail" low probability responses. 


                    Recommended for advanced use cases only. You usually only
                    need to use `temperature`.
                  minimum: 0
                  exclusiveMinimum: true
                top_p:
                  type: number
                  minimum: 0
                  maximum: 1
                  exclusiveMinimum: true
                  exclusiveMaximum: true
                  description: >-
                    Use nucleus sampling.


                    In nucleus sampling, we compute the cumulative distribution
                    over all the options for each subsequent token in decreasing
                    probability order and cut it off once it reaches a
                    particular probability specified by `top_p`. You should
                    either alter `temperature` or `top_p`, but not both.


                    Recommended for advanced use cases only. You usually only
                    need to use `temperature`.
              x-apidog-orders:
                - max_tokens
                - messages
                - model
                - metadata
                - stop_sequences
                - stream
                - system
                - temperature
                - thinking
                - tool_choice
                - tools
                - top_k
                - top_p
              required:
                - max_tokens
                - messages
                - model
                - metadata
                - stop_sequences
                - stream
                - system
                - temperature
                - thinking
                - tool_choice
                - tools
                - top_k
                - top_p
            example:
              model: claude-3-7-sonnet-20250219
              max_tokens: 1024
              messages:
                - role: user
                  content: Hello, world
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    oneOf:
                      - type: object
                        properties:
                          citations:
                            type: object
                            properties: {}
                            x-apidog-orders: []
                            description: >-
                              Citations supporting the text block.


                              The type of citation returned will depend on the
                              type of document being cited. Citing a PDF results
                              in `page_location`, plain text results in
                              `char_location`, and content document results in
                              `content_block_location`.
                            nullable: true
                          text:
                            type: string
                            maxLength: 5000000
                          type:
                            type: string
                            enum:
                              - text
                            x-apidog-enum:
                              - value: text
                                name: ''
                                description: ''
                            default: text
                        x-apidog-orders:
                          - citations
                          - text
                          - type
                        description: Text
                        required:
                          - citations
                          - text
                          - type
                      - type: object
                        properties:
                          id:
                            type: string
                          input:
                            type: object
                            properties: {}
                            x-apidog-orders: []
                          name:
                            type: string
                            minLength: 1
                          type:
                            type: string
                            enum:
                              - tool_use
                            x-apidog-enum:
                              - value: tool_use
                                name: ''
                                description: ''
                            default: tool_use
                        x-apidog-orders:
                          - id
                          - input
                          - name
                          - type
                        description: Tool Use
                        required:
                          - id
                          - input
                          - name
                          - type
                      - type: object
                        properties:
                          signature:
                            type: string
                          thinking:
                            type: string
                          type:
                            type: string
                            enum:
                              - thinking
                            x-apidog-enum:
                              - value: thinking
                                name: ''
                                description: ''
                            default: thinking
                        x-apidog-orders:
                          - signature
                          - thinking
                          - type
                        description: Thinking
                        required:
                          - signature
                          - thinking
                          - type
                      - type: object
                        properties:
                          data:
                            type: string
                          type:
                            type: string
                            default: redacted_thinking
                            enum:
                              - redacted_thinking
                            x-apidog-enum:
                              - value: redacted_thinking
                                name: ''
                                description: ''
                        x-apidog-orders:
                          - data
                          - type
                        description: Redacted Thinking
                        required:
                          - data
                          - type
                    description: >-
                      Content generated by the model.


                      This is an array of content blocks, each of which has a
                      `type` that determines its shape.


                      Example:


                      ```json

                      [{"type": "text", "text": "Hi, I'm Claude."}]

                      ```


                      If the request input `messages` ended with an `assistant`
                      turn, then the response `content` will continue directly
                      from that last turn. You can use this to constrain the
                      model's output.


                      For example, if the input `messages` were:


                      ```json

                      [
                        {"role": "user", "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun"},
                        {"role": "assistant", "content": "The best answer is ("}
                      ]

                      ```


                      Then the response `content` might be:


                      ```json

                      [{"type": "text", "text": "B)"}]

                      ```
                  id:
                    type: string
                    description: |-
                      Unique object identifier.

                      The format and length of IDs may change over time.
                  model:
                    type: string
                    description: The model that handled the request.
                    minLength: 1
                    maxLength: 256
                  role:
                    type: string
                    enum:
                      - assistant
                    x-apidog-enum:
                      - value: assistant
                        name: ''
                        description: ''
                    default: assistant
                    description: |-
                      Conversational role of the generated message.

                      This will always be `"assistant"`.
                  stop_reason:
                    type: string
                    enum:
                      - end_turn
                      - max_tokens
                      - stop_sequence
                      - tool_use
                    x-apidog-enum:
                      - value: end_turn
                        name: ''
                        description: the model reached a natural stopping point
                      - value: max_tokens
                        name: ''
                        description: >-
                          we exceeded the requested `max_tokens` or the model's
                          maximum
                      - value: stop_sequence
                        name: ''
                        description: >-
                          one of your provided custom `stop_sequences` was
                          generated
                      - value: tool_use
                        name: ''
                        description: the model invoked one or more tools
                    description: >-
                      The reason that we stopped.

                      In non-streaming mode this value is always non-null. In
                      streaming mode, it is null in the `message_start` event
                      and non-null otherwise.
                  stop_sequence:
                    type: string
                    description: >-
                      Which custom stop sequence was generated, if any.


                      This value will be a non-null string if one of your custom
                      stop sequences was generated.
                    nullable: true
                  type:
                    type: string
                    enum:
                      - message
                    x-apidog-enum:
                      - value: message
                        name: ''
                        description: ''
                    default: message
                    description: |-
                      Object type.

                      For Messages, this is always `"message"`.
                  usage:
                    type: object
                    properties:
                      cache_creation_input_tokens:
                        type: integer
                        description: >-
                          The number of input tokens used to create the cache
                          entry.
                        minimum: 0
                        exclusiveMinimum: true
                        nullable: true
                      cache_read_input_tokens:
                        type: integer
                        minimum: 0
                        exclusiveMinimum: true
                        description: The number of input tokens read from the cache.
                        nullable: true
                      input_tokens:
                        type: integer
                        description: The number of input tokens which were used.
                        minimum: 0
                        exclusiveMinimum: true
                      output_tokens:
                        type: integer
                        minimum: 0
                        exclusiveMinimum: true
                    x-apidog-orders:
                      - cache_creation_input_tokens
                      - cache_read_input_tokens
                      - input_tokens
                      - output_tokens
                    description: >-
                      Billing and rate-limit usage.


                      Anthropic's API bills and rate-limits by token counts, as
                      tokens represent the underlying cost to our systems.


                      Under the hood, the API transforms requests into a format
                      suitable for the model. The model's output then goes
                      through a parsing stage before becoming an API response.
                      As a result, the token counts in `usage` will not match
                      one-to-one with the exact visible content of an API
                      request or response.


                      For example, `output_tokens` will be non-zero, even for an
                      empty string response from Claude.


                      Total input tokens in a request is the summation of
                      `input_tokens`, `cache_creation_input_tokens`, and
                      `cache_read_input_tokens`.
                    required:
                      - cache_creation_input_tokens
                      - cache_read_input_tokens
                      - input_tokens
                      - output_tokens
                x-apidog-orders:
                  - content
                  - id
                  - model
                  - role
                  - stop_reason
                  - stop_sequence
                  - type
                  - usage
                required:
                  - content
                  - id
                  - model
                  - role
                  - stop_reason
                  - stop_sequence
                  - type
                  - usage
              example:
                content:
                  - text: Hi! My name is Claude.
                    type: text
                id: msg_013Zva2CMHLNnXjNJJKqJ2EF
                model: claude-3-7-sonnet-20250219
                role: assistant
                stop_reason: end_turn
                stop_sequence: null
                type: message
                usage:
                  input_tokens: 2095
                  output_tokens: 503
          headers: {}
          x-apidog-name: Success
        '400':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                      message:
                        type: string
                    required:
                      - type
                      - message
                    x-apidog-orders:
                      - type
                      - message
                required:
                  - type
                  - error
                x-apidog-orders:
                  - type
                  - error
              example:
                type: error
                error:
                  type: invalid_request_error
                  message: Invalid request
          headers: {}
          x-apidog-name: Bad Request
      security: []
      x-apidog-folder: 'SSE API Documentations/Example: Anthropic'
      x-apidog-status: released
      x-run-in-apidog: https://app.apidog.com/web/project/849209/apis/api-15106326-run
components:
  schemas: {}
  securitySchemes: {}
servers: []
security: []

```
