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

# Claude Chat Object

> Production-revalidated Anthropic Message object and native SSE events as of 2026-03-23

> Last updated: 2026-06-06

# Claude Chat Object

Crazyrouter supports the Anthropic native Messages API.

This page only documents Message-object and streaming-event behavior that was revalidated in production on `2026-03-23`.

## Message object

The current minimal production request uses:

* `model: "claude-opus-4-8"`
* `POST /v1/messages`

Typical production response skeleton:

```json theme={null}
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ],
  "model": "claude-opus-4-8",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 15,
    "output_tokens": 20
  }
}
```

### Common fields

| Field         | Type   | Meaning                                                     |
| ------------- | ------ | ----------------------------------------------------------- |
| `id`          | string | Unique message identifier                                   |
| `type`        | string | Always `message`                                            |
| `role`        | string | Always `assistant`                                          |
| `content`     | array  | Content block list                                          |
| `model`       | string | Actual model used                                           |
| `stop_reason` | string | Stop reason such as `end_turn`, `tool_use`, or `max_tokens` |
| `usage`       | object | Token usage                                                 |

### Common content block types

Text block:

```json theme={null}
{
  "type": "text",
  "text": "..."
}
```

Tool-use block:

```json theme={null}
{
  "type": "tool_use",
  "id": "toolu_xxx",
  "name": "get_time",
  "input": {
    "timezone": "Asia/Shanghai"
  }
}
```

Thinking block:

```json theme={null}
{
  "type": "thinking",
  "thinking": "..."
}
```

***

## Streaming event types

In the `2026-03-23` production recheck, native streaming for `claude-opus-4-8` returned these SSE events:

* `message_start`
* `content_block_start`
* `content_block_delta`
* `content_block_stop`
* `message_delta`
* `message_stop`

### Event examples

`message_start`

```text theme={null}
event: message_start
data: {"type":"message_start","message":{...}}
```

`content_block_start`

```text theme={null}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
```

`content_block_delta`

```text theme={null}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
```

`content_block_stop`

```text theme={null}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
```

`message_delta`

```text theme={null}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":20}}
```

`message_stop`

```text theme={null}
event: message_stop
data: {"type":"message_stop"}
```

***

## Practical interpretation

* If `content` only contains `text`, it is a normal answer
* If `stop_reason = "tool_use"` and `content` contains `tool_use`, the model is making a tool call
* If `content` contains `thinking`, the current model and request shape triggered extended thinking

<Note>
  A `thinking` block is not returned by every Claude model by default. The currently revalidated explicit thinking path is `claude-opus-4-8`.
</Note>

Related pages:

* [Claude Native Format](/en/chat/anthropic/messages)
* [Feature Hub: Tool Calling](/en/features/tool-calling)
* [Feature Hub: Reasoning](/en/features/reasoning)
