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

# إنشاء رسالة

> ينشئ رسالة باستخدام تنسيق Anthropic Messages API

## نظرة عامة

توفّر هذه النقطة الطرفية توافقًا أصليًا مع Anthropic Messages API. استخدم هذا مع نماذج Claude وميزات مثل التفكير الممتد.

يحافظ هذا المسار على عقد Anthropic الأصلي. يجب أن تكون `messages` مصفوفة رسائل بأدوار `user` / `assistant` فقط، ويجب وضع `system` في الحقل العلوي `system`، كما أن `max_tokens` مطلوب. إذا كانت حمولة الطلب تستخدم أدوار OpenAI مثل `system` أو `developer` أو `tool` داخل `messages`، فأرسلها إلى `/v1/chat/completions` بدلًا من ذلك.

<Note>
  عنوان URL الأساسي لـ Anthropic SDK: `https://api.tokenlab.sh` (بدون اللاحقة `/v1`)
</Note>

## ترويسات الطلب

<ParamField header="x-api-key" type="string" required>
  مفتاح TokenLab API الخاص بك. بديل عن Bearer token.
</ParamField>

<ParamField header="anthropic-version" type="string" required>
  إصدار Anthropic API. استخدم `2023-06-01`.
</ParamField>

## جسم الطلب

<ParamField body="model" type="string" required>
  معرّف نموذج Claude (على سبيل المثال، `claude-sonnet-4-6` أو `claude-opus-4-6`).
</ParamField>

<ParamField body="messages" type="array" required>
  مصفوفة من كائنات الرسائل تحتوي على `role` و `content`.
</ParamField>

<ParamField body="max_tokens" type="integer" required>
  الحد الأقصى لعدد الـ tokens المطلوب إنشاؤها.
</ParamField>

<ParamField body="system" type="string">
  System prompt (منفصل عن مصفوفة `messages`).
</ParamField>

<ParamField body="temperature" type="number" default="1">
  درجة حرارة أخذ العينات (0-1).
</ParamField>

<ParamField body="stream" type="boolean" default="false">
  تمكين الاستجابات المتدفقة.
</ParamField>

<ParamField body="thinking" type="object">
  إعدادات التفكير الممتد (Claude Opus 4.5).

  * `type` (string): `"enabled"` للتمكين
  * `budget_tokens` (integer): ميزانية الـ tokens الخاصة بالتفكير
</ParamField>

<ParamField body="tools" type="array">
  الأدوات المتاحة للنموذج.
</ParamField>

<ParamField body="tool_choice" type="object">
  كيفية استخدام النموذج للأدوات. الخيارات: `auto`، `any`، `tool` (أداة محددة).
</ParamField>

<ParamField body="top_p" type="number">
  معلمة Nucleus sampling. استخدم إما temperature أو top\_p، وليس كليهما.
</ParamField>

<ParamField body="top_k" type="integer">
  أخذ العينات فقط من أعلى K خيارات لكل token.
</ParamField>

<ParamField body="stop_sequences" type="array">
  تسلسلات إيقاف مخصصة ستؤدي إلى توقف النموذج عن التوليد.
</ParamField>

<ParamField body="metadata" type="object">
  بيانات وصفية لإرفاقها بالطلب لأغراض التتبع.
</ParamField>

## الاستجابة

<ResponseField name="id" type="string">
  معرّف فريد للرسالة.
</ResponseField>

<ResponseField name="type" type="string">
  دائمًا `message`.
</ResponseField>

<ResponseField name="role" type="string">
  دائمًا `assistant`.
</ResponseField>

<ResponseField name="content" type="array">
  مصفوفة من كتل المحتوى (text، thinking، tool\_use).
</ResponseField>

<ResponseField name="model" type="string">
  النموذج المستخدم.
</ResponseField>

<ResponseField name="stop_reason" type="string">
  سبب توقف التوليد (`end_turn`، `max_tokens`، `tool_use`).
</ResponseField>

<ResponseField name="usage" type="object">
  استخدام الـ tokens مع `input_tokens` و `output_tokens`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/messages" \
    -H "x-api-key: sk-your-api-key" \
    -H "anthropic-version: 2023-06-01" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 1024,
      "system": "You are a helpful assistant.",
      "messages": [
        {"role": "user", "content": "Hello, Claude!"}
      ]
    }'
  ```

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

  client = Anthropic(
      api_key="sk-your-api-key",
      base_url="https://api.tokenlab.sh"
  )

  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=1024,
      system="You are a helpful assistant.",
      messages=[
          {"role": "user", "content": "Hello, Claude!"}
      ]
  )

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

  ```javascript JavaScript theme={null}
  import Anthropic from '@anthropic-ai/sdk';

  const client = new Anthropic({
    apiKey: 'sk-your-api-key',
    baseURL: 'https://api.tokenlab.sh'
  });

  const message = await client.messages.create({
    model: 'claude-sonnet-4-6',
    max_tokens: 1024,
    system: 'You are a helpful assistant.',
    messages: [
      { role: 'user', content: 'Hello, Claude!' }
    ]
  });

  console.log(message.content[0].text);
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "io"
      "net/http"
  )

  func main() {
      payload := map[string]interface{}{
          "model":      "claude-sonnet-4-6",
          "max_tokens": 1024,
          "system":     "You are a helpful assistant.",
          "messages": []map[string]string{
              {"role": "user", "content": "Hello, Claude!"},
          },
      }

      jsonData, _ := json.Marshal(payload)
      req, _ := http.NewRequest("POST", "https://api.tokenlab.sh/v1/messages", bytes.NewBuffer(jsonData))
      req.Header.Set("x-api-key", "sk-your-api-key")
      req.Header.Set("anthropic-version", "2023-06-01")
      req.Header.Set("Content-Type", "application/json")

      client := &http.Client{}
      resp, _ := client.Do(req)
      defer resp.Body.Close()

      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```php PHP theme={null}
  <?php
  $payload = [
      'model' => 'claude-sonnet-4-6',
      'max_tokens' => 1024,
      'system' => 'You are a helpful assistant.',
      'messages' => [
          ['role' => 'user', 'content' => 'Hello, Claude!']
      ]
  ];

  $ch = curl_init('https://api.tokenlab.sh/v1/messages');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'x-api-key: sk-your-api-key',
          'anthropic-version: 2023-06-01',
          'Content-Type: application/json'
      ],
      CURLOPT_POSTFIELDS => json_encode($payload)
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  echo $data['content'][0]['text'];
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "msg_abc123",
    "type": "message",
    "role": "assistant",
    "content": [
      {
        "type": "text",
        "text": "Hello! How can I help you today?"
      }
    ],
    "model": "claude-sonnet-4-6",
    "stop_reason": "end_turn",
    "usage": {
      "input_tokens": 15,
      "output_tokens": 10
    }
  }
  ```
</ResponseExample>

## مثال على إدخال الرؤية

بالنسبة إلى نماذج Claude التي تدعم الرؤية، ضع الصور داخل `messages[].content` ككتل صور مُنظَّمة.

```json theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Please describe this image."
        },
        {
          "type": "image",
          "source": {
            "type": "url",
            "url": "https://example.com/demo.jpg"
          }
        }
      ]
    }
  ]
}
```

```json theme={null}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Please describe this image."
        },
        {
          "type": "image",
          "source": {
            "type": "base64",
            "media_type": "image/jpeg",
            "data": "/9j/4AAQSkZJRgABAQ..."
          }
        }
      ]
    }
  ]
}
```

## مثال على التفكير الممتد

```python theme={null}
message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    messages=[{"role": "user", "content": "Solve this math problem..."}]
)

for block in message.content:
    if block.type == "thinking":
        print(f"Thinking: {block.thinking}")
    elif block.type == "text":
        print(f"Response: {block.text}")
```

## دفعات رسائل Anthropic

يوفّر TokenLab الآن تدفق Anthropic Message Batches الأصلي إلى جانب `/v1/messages`.

المسارات المتاحة:

* `POST /v1/messages/batches`
* `GET /v1/messages/batches`
* `GET /v1/messages/batches/:message_batch_id`
* `GET /v1/messages/batches/:message_batch_id/results`
* `POST /v1/messages/batches/:message_batch_id/cancel`
* `DELETE /v1/messages/batches/:message_batch_id`

ملاحظات تشغيلية:

* استخدم نفس مفتاح TokenLab API مع ترويسات Anthropic الأصلية.
* إذا كانت عناصر الـ batch تشير إلى `file_id`، فأضف أيضًا `anthropic-beta: files-api-2025-04-14`.
* تحافظ مهام الـ batch على شكل الطلب/الاستجابة الأصلي لـ Anthropic، بينما يتتبع TokenLab داخليًا دورة التسوية الخاصة بها.
