> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crun.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Crun Anthropic Messages API

> CRUN 语言模型的 Anthropic 兼容 /messages 接口，支持 Claude 风格 messages、system prompt、视觉 content blocks、工具调用、thinking 和流式事件。

## API 地址

```text theme={null}
POST https://api.crun.ai/api/v1/messages
```

<Info>
  该接口遵循 [Anthropic Messages API](https://platform.claude.com/docs/en/api/messages/create) 的请求和响应结构。
  它面向 Claude 兼容客户端设计，同时使用您的 CRUN API Key 和 CRUN 公开模型 ID。
</Info>

## 身份验证

您可以使用以下任一方式进行身份验证：

* `Authorization: Bearer YOUR_API_KEY`
* `X-API-KEY: YOUR_API_KEY`

可选的 Anthropic 请求头，例如 `anthropic-version` 和 `anthropic-beta`，会在提供时透传到上游。

## 基本消息

<CodeGroup>
  ```bash cURL theme={null} theme={null}
  curl -X POST "https://api.crun.ai/api/v1/messages" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -H "anthropic-version: 2023-06-01" \
    -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 512,
      "messages": [
        {
          "role": "user",
          "content": "Write a concise project update for a payments API migration."
        }
      ]
    }'
  ```

  ```python Python (Anthropic SDK) theme={null} theme={null}
  from anthropic import Anthropic

  client = Anthropic(
      api_key="YOUR_API_KEY",
      base_url="https://api.crun.ai/api",
  )

  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=512,
      messages=[
          {
              "role": "user",
              "content": "Write a concise project update for a payments API migration.",
          }
      ],
  )

  print(message.content[0].text)
  ```

  ```javascript JavaScript (Anthropic SDK) theme={null} theme={null}
  import Anthropic from "@anthropic-ai/sdk";

  const client = new Anthropic({
    apiKey: "YOUR_API_KEY",
    baseURL: "https://api.crun.ai/api"
  });

  const message = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 512,
    messages: [
      {
        role: "user",
        content: "Write a concise project update for a payments API migration."
      }
    ]
  });

  console.log(message.content[0].text);
  ```
</CodeGroup>

## System Prompt

Anthropic Messages 使用顶层 `system` 字段，而不是在 `messages` 数组中使用 `system` role。

```json request body theme={null} theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 800,
  "system": "You are a senior API documentation editor. Be concise and precise.",
  "messages": [
    {
      "role": "user",
      "content": "Rewrite this changelog entry for developers: fixed auth bug."
    }
  ]
}
```

## 对话历史

CRUN 不会为 `/messages` 存储对话状态。如需继续对话，请在下一次请求中包含之前的 user 和 assistant 轮次。

```json request body theme={null} theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 800,
  "messages": [
    {
      "role": "user",
      "content": "Give me three names for an internal developer newsletter."
    },
    {
      "role": "assistant",
      "content": "Here are three options: Build Notes, Ship Log, and Dev Dispatch."
    },
    {
      "role": "user",
      "content": "Make them sound more enterprise-ready."
    }
  ]
}
```

## 视觉输入

当所选模型支持视觉能力时，可以传入包含 `text` 和 `image` blocks 的 content 数组。图片 source 可以使用 URL。

<CodeGroup>
  ```json URL 图片 theme={null} theme={null}
  {
    "model": "claude-sonnet-4-6",
    "max_tokens": 800,
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Summarize the product shown in this image."
          },
          {
            "type": "image",
            "source": {
              "type": "url",
              "url": "https://example.com/product-photo.png"
            }
          }
        ]
      }
    ]
  }
  ```
</CodeGroup>

## 工具调用

传入 `tools` 后，模型可以请求结构化函数调用。您的应用负责执行工具，并在后续消息中把工具结果传回模型。

```json request body theme={null} theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "What is the weather in Paris?"
    }
  ],
  "tools": [
    {
      "name": "get_weather",
      "description": "Get current weather for a city.",
      "input_schema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          }
        },
        "required": ["city"]
      }
    }
  ],
  "tool_choice": {
    "type": "auto"
  }
}
```

## Thinking

当所选模型和上游服务支持时，可以使用 `thinking` 请求扩展思考行为。

```json request body theme={null} theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 2048,
  "thinking": {
    "type": "enabled",
    "budget_tokens": 1024
  },
  "messages": [
    {
      "role": "user",
      "content": "Compare two API migration plans and recommend the lower-risk option."
    }
  ]
}
```

## 流式输出

设置 `stream=true` 后，可以接收 Anthropic 风格的 Server-Sent Events。

<CodeGroup>
  ```bash cURL theme={null} theme={null}
  curl -N "https://api.crun.ai/api/v1/messages" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -H "anthropic-version: 2023-06-01" \
    -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 512,
      "stream": true,
      "messages": [
        {
          "role": "user",
          "content": "Write a three-bullet checklist for API release readiness."
        }
      ]
    }'
  ```

  ```python Python (Anthropic SDK) theme={null} theme={null}
  with client.messages.stream(
      model="claude-sonnet-4-6",
      max_tokens=512,
      messages=[
          {
              "role": "user",
              "content": "Write a three-bullet checklist for API release readiness.",
          }
      ],
  ) as stream:
      for text in stream.text_stream:
          print(text, end="")
  ```

  ```javascript JavaScript (Anthropic SDK) theme={null} theme={null}
  const stream = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 512,
    stream: true,
    messages: [
      {
        role: "user",
        content: "Write a three-bullet checklist for API release readiness."
      }
    ]
  });

  for await (const event of stream) {
    if (event.type === "content_block_delta" && event.delta?.text) {
      process.stdout.write(event.delta.text);
    }
  }
  ```
</CodeGroup>

## 响应示例

<CodeGroup>
  ```json basic response theme={null} theme={null}
  {
    "id": "msg_abc123",
    "type": "message",
    "role": "assistant",
    "model": "claude-sonnet-4-6",
    "content": [
      {
        "type": "text",
        "text": "The payments API migration is on track. Authentication updates are complete, integration testing is in progress, and rollback criteria will be finalized before release."
      }
    ],
    "stop_reason": "end_turn",
    "stop_sequence": null,
    "usage": {
      "input_tokens": 18,
      "output_tokens": 34
    }
  }
  ```

  ```text streaming response (SSE) theme={null} theme={null}
  event: message_start
  data: {"type":"message_start","message":{"id":"msg_abc123","type":"message","role":"assistant","model":"claude-sonnet-4-6","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":18,"output_tokens":0}}}

  event: content_block_start
  data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

  event: content_block_delta
  data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"- Confirm authentication and rate limits."}}

  event: message_delta
  data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":24}}

  event: message_stop
  data: {"type":"message_stop"}
  ```
</CodeGroup>

## 注意事项

* `max_tokens` 会在 CRUN 已配置模型上限时受所选模型输出上限约束。
* `messages` 仅支持 `user` 和 `assistant` roles。系统指令请使用顶层 `system` 字段。
* 其他 Anthropic 兼容字段会被接受，并在上游模型支持时透传。
* 工具调用、thinking、图片 blocks、URL sources 和 beta 功能取决于所选模型和上游服务商。
* 未知模型 ID 会返回 OpenAI 风格的错误体，其中 `code` 为 `"model_not_found"`。

## 相关资源

<CardGroup cols={3}>
  <Card title="LLM 快速开始" icon="message" href="/zh/models/llm/quickstart">
    了解 base URL、身份验证方式以及 SDK 接入模式。
  </Card>

  <Card title="Responses API" icon="sparkles" href="/zh/models/llm/responses">
    使用 OpenAI 兼容的灵活输入、结构化输出和流式能力构建工作流。
  </Card>

  <Card title="价格" icon="coins" href="https://crun.ai/zh/pricing">
    前往价格页面，比较不同模型的计费规则。
  </Card>
</CardGroup>


## OpenAPI

````yaml zh/models/llm/messages.json post /api/v1/messages
openapi: 3.0.0
info:
  title: CRUN Anthropic 兼容 Messages API
  description: CRUN 语言模型的 Anthropic 兼容 Messages 接口。
  version: 1.0.0
  contact:
    name: 技术支持
    email: support@crun.ai
servers:
  - url: https://api.crun.ai
    description: API 服务器
security:
  - BearerAuth: []
  - ApiKeyAuth: []
paths:
  /api/v1/messages:
    post:
      summary: 创建消息
      description: >-
        Anthropic 兼容 Messages 接口。


        - 使用官方 Anthropic SDK 时，可配置 `base_url` / `baseURL` 为
        `https://api.crun.ai/api/v1`。

        - 使用 CRUN API Key 鉴权。

        - 可透传 `anthropic-version` 与 `anthropic-beta` 请求头。

        - 当 `stream=true` 时，响应会以 Server-Sent Events (`text/event-stream`) 返回。
      operationId: models/llm/messages
      parameters:
        - name: anthropic-version
          in: header
          required: false
          schema:
            type: string
            example: '2023-06-01'
          description: 可选 Anthropic API 版本头，会透传到上游。
        - name: anthropic-beta
          in: header
          required: false
          schema:
            type: string
          description: 可选 Anthropic beta 功能头，会透传到上游。
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AnthropicMessagesRequest'
            examples:
              basic:
                summary: 基本消息
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 512
                  messages:
                    - role: user
                      content: >-
                        Write a concise project update for a payments API
                        migration.
              system:
                summary: System prompt
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 800
                  system: >-
                    You are a senior API documentation editor. Be concise and
                    precise.
                  messages:
                    - role: user
                      content: >-
                        Rewrite this changelog entry for developers: fixed auth
                        bug.
              conversation:
                summary: 多轮对话
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 800
                  messages:
                    - role: user
                      content: >-
                        Give me three names for an internal developer
                        newsletter.
                    - role: assistant
                      content: >-
                        Here are three options: Build Notes, Ship Log, and Dev
                        Dispatch.
                    - role: user
                      content: Make them sound more enterprise-ready.
              vision:
                summary: 视觉输入
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 800
                  messages:
                    - role: user
                      content:
                        - type: text
                          text: >-
                            Describe this dashboard screenshot and call out any
                            risks.
                        - type: image
                          source:
                            type: base64
                            media_type: image/png
                            data: BASE64_IMAGE_DATA
              tools:
                summary: 工具调用
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 1024
                  messages:
                    - role: user
                      content: What is the weather in Paris?
                  tools:
                    - name: get_weather
                      description: Get current weather for a city.
                      input_schema:
                        type: object
                        properties:
                          city:
                            type: string
                        required:
                          - city
                  tool_choice:
                    type: auto
              thinking:
                summary: Thinking
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 2048
                  thinking:
                    type: enabled
                    budget_tokens: 1024
                  messages:
                    - role: user
                      content: >-
                        Compare two API migration plans and recommend the
                        lower-risk option.
              stream:
                summary: 流式请求
                value:
                  model: claude-sonnet-4-6
                  max_tokens: 512
                  stream: true
                  messages:
                    - role: user
                      content: >-
                        Write a three-bullet checklist for API release
                        readiness.
      responses:
        '200':
          description: 成功响应。`stream=false` 时返回 JSON，`stream=true` 时返回 SSE。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnthropicMessageResponse'
              example:
                id: msg_abc123
                type: message
                role: assistant
                model: claude-sonnet-4-6
                content:
                  - type: text
                    text: >-
                      The payments API migration is on track. Authentication
                      updates are complete, integration testing is in progress,
                      and rollback criteria will be finalized before release.
                stop_reason: end_turn
                stop_sequence: null
                usage:
                  input_tokens: 18
                  output_tokens: 34
            text/event-stream:
              schema:
                type: string
                description: Server-Sent Events 流。每个事件包含 `event:` 行和 JSON `data:` 行，并以空行分隔。
              example: >+
                event: message_start

                data:
                {"type":"message_start","message":{"id":"msg_abc123","type":"message","role":"assistant","model":"claude-sonnet-4-6","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":18,"output_tokens":0}}}


                event: content_block_start

                data:
                {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}


                event: content_block_delta

                data:
                {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"-
                Confirm authentication and rate limits."}}


                event: message_delta

                data:
                {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":24}}


                event: message_stop

                data: {"type":"message_stop"}

        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
        '404':
          $ref: '#/components/responses/ModelNotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimit'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    AnthropicMessagesRequest:
      type: object
      description: Anthropic 兼容 Messages 请求。其他兼容字段会被接受，并在上游模型支持时透传。
      properties:
        model:
          type: string
          minLength: 1
          description: '`GET /api/v1/models` 返回的公开模型 ID。'
          example: claude-sonnet-4-6
        messages:
          type: array
          minItems: 1
          description: 对话消息。要继续多轮对话，请自行传入历史 user 和 assistant 轮次。
          items:
            $ref: '#/components/schemas/AnthropicMessage'
        max_tokens:
          type: integer
          minimum: 1
          description: 最大输出 token 数，会受所选模型限制。
          example: 1024
        system:
          description: 系统提示词。Anthropic Messages 使用顶层 `system` 字段。
          nullable: true
          oneOf:
            - type: string
              example: You are a concise assistant.
            - type: array
              items:
                oneOf:
                  - type: string
                  - type: object
                    additionalProperties: true
        stream:
          type: boolean
          default: false
          description: 是否返回 Server-Sent Events 流。
          example: false
        stop_sequences:
          type: array
          items:
            type: string
          description: 停止词列表。
          example:
            - END
        temperature:
          type: number
          minimum: 0
          maximum: 1
          description: 采样温度。
          example: 0.7
        top_p:
          type: number
          minimum: 0
          maximum: 1
          description: 核采样参数。
          example: 1
        top_k:
          type: integer
          minimum: 0
          description: Top-k 采样参数。
          example: 40
        metadata:
          type: object
          description: 开发者自定义元数据。
          additionalProperties: true
        tools:
          type: array
          description: Anthropic 工具定义。应用需要执行工具调用，并在后续请求中返回工具结果。
          items:
            type: object
            additionalProperties: true
        tool_choice:
          description: 工具选择策略。
          oneOf:
            - type: string
              example: auto
            - type: object
              additionalProperties: true
        thinking:
          type: object
          description: 扩展思考配置，上游模型支持时生效。
          additionalProperties: true
          example:
            type: enabled
            budget_tokens: 1024
      required:
        - model
        - messages
      additionalProperties: true
    AnthropicMessageResponse:
      type: object
      description: Anthropic Messages 响应。
      additionalProperties: true
      properties:
        id:
          type: string
          example: msg_abc123
        type:
          type: string
          example: message
        role:
          type: string
          example: assistant
        model:
          type: string
          example: claude-sonnet-4-6
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContentBlock'
        stop_reason:
          type: string
          nullable: true
          example: end_turn
        stop_sequence:
          type: string
          nullable: true
        usage:
          type: object
          description: Anthropic usage 信息。
          additionalProperties: true
          properties:
            input_tokens:
              type: integer
              example: 18
            output_tokens:
              type: integer
              example: 34
            cache_creation_input_tokens:
              type: integer
              example: 0
            cache_read_input_tokens:
              type: integer
              example: 0
    AnthropicMessage:
      type: object
      description: Anthropic message 对象。其他兼容字段会被接受并按上游支持情况透传。
      properties:
        role:
          type: string
          enum:
            - user
            - assistant
          description: 消息角色。Anthropic Messages 支持 user 和 assistant。
          example: user
        content:
          description: 消息内容。可以是字符串，也可以是 content blocks 数组。
          nullable: true
          oneOf:
            - type: string
              example: Write a concise project update.
            - type: array
              items:
                oneOf:
                  - type: string
                  - $ref: '#/components/schemas/ContentBlock'
      required:
        - role
      additionalProperties: true
    ContentBlock:
      type: object
      description: Anthropic content block，例如 text、image、tool_use 或 tool_result。
      additionalProperties: true
      example:
        type: text
        text: Hello
    OpenAIErrorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/OpenAIError'
      required:
        - error
    OpenAIError:
      type: object
      properties:
        message:
          type: string
          description: 人类可读的错误信息。
          example: The model `unknown-model` does not exist.
        type:
          type: string
          description: OpenAI 风格的错误类型。
          example: invalid_request_error
        param:
          type: string
          nullable: true
          description: 相关请求参数，如有。
          example: model
        code:
          type: string
          nullable: true
          description: 机器可读的错误代码，如有。
          example: model_not_found
      required:
        - message
        - type
  responses:
    BadRequest:
      description: 无效请求
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    Unauthorized:
      description: 身份验证失败
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    InsufficientCredits:
      description: 积分不足
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    ModelNotFound:
      description: 未知模型 ID
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    ValidationError:
      description: 请求校验失败
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    RateLimit:
      description: 已超过速率限制
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
    ServiceUnavailable:
      description: 上游或内部服务异常
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OpenAIErrorResponse'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: 将您的 CRUN API Key 作为 Bearer token，用于 Anthropic 兼容 SDK。
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 在 `X-API-KEY` 请求头中使用您的 CRUN API Key。

````