# Messages API: Multi-Turn Conversations

> Source: https://sukruyusufkaya.com/en/learn/claude-ustaligi/messages-api
> Updated: 2026-05-11T13:48:34.966Z
> Category: Claude Ustalığı
> Module: 8. Programmatic Claude with the API
**TLDR:** Building blocks of Messages API, system message, multi-turn conversation, response object, and token counting.

# Anatomi

```json
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "system": "Sistem prompt'u (string ya da [{type:'text', ...}])",
  "messages": [
    { "role": "user",      "content": "..." },
    { "role": "assistant", "content": "..." },
    { "role": "user",      "content": "..." }
  ],
  "temperature": 0.7,
  "stop_sequences": ["\n\n"]
}
```

### Roller: user, assistant

Sistem prompt'u ayrı bir alan; `messages` dizisinde sadece user/assistant olur. Konuşma her zaman user ile başlar ve son mesaj user olmalıdır.

### content: string vs structured

Basit metin için string yeterli. Görsel, document, tool_result için `content` bir liste olur:

```json
"content": [
  {"type":"text","text":"..."},
  {"type":"image","source":{"type":"base64",...}}
]
```

### Response object

```json
{
  "id": "msg_01abc...",
  "type": "message",
  "role": "assistant",
  "content": [{"type":"text","text":"..."}],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 348, "output_tokens": 200}
}
```

`stop_reason` değerleri: `end_turn`, `max_tokens`, `stop_sequence`, `tool_use`.

```python
# Çok turlu konuşma — geçmişi listede tut
history = []

def chat(user_text: str) -> str:
    history.append({"role":"user", "content": user_text})
    resp = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=512,
        system="Sen Türkçe bir yardımcı asistansın.",
        messages=history,
    )
    answer = resp.content[0].text
    history.append({"role":"assistant", "content": answer})
    return answer

print(chat("Merhaba!"))
print(chat("Adımı hatırlıyor musun? Şükrü."))
print(chat("Adımı tekrar söyler misin?"))
```

> **Token sayımı**
>
> Anthropic SDK'da `client.beta.messages.count_tokens` benzeri yardımcılar vardır; istek atmadan token tahmini yapabilir, bütçeyi planlayabilirsin.

**Boşluk doldurma egzersizi (text):**
```text
Messages dizisi her zaman _____ rolüyle başlar ve son mesaj _____ rolünde olmalıdır. Görsel ve döküman için _____ bir liste olur.
```

> ✋ Kontrol noktası: `q-802-mc1`