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

# Формат OpenAI или Anthropic: какой выбрать для Claude

> Чем OpenAI-совместимый формат отличается от нативного формата Anthropic для Claude, какой выбрать для агента или своего кода и что RuAPI добавляет сверх слоя Anthropic: кэш, рассуждения и PDF.

Claude можно вызывать в двух форматах: в нативном формате Anthropic (Messages API, адрес `/v1/messages`) и в OpenAI-совместимом (Chat Completions, адрес `/v1/chat/completions`). В RuAPI один ключ работает в обоих форматах, и цена одна и та же; различаются они тем, как пишется запрос и какие возможности доступны. Ниже — в чём разница и какой формат выбрать. RuAPI работает из России без VPN, баланс пополняется в USDT.

## Коротко

* **Если в инструменте можно выбрать провайдер Anthropic или приложение работает только с Claude, выбирайте нативный формат Anthropic.** Запросы пишутся так же, как в официальной документации Anthropic, а кэш работает как при прямом подключении к Anthropic: Claude Code и похожие инструменты сами ставят метки кэша. Claude Code работает только в этом формате.
* **Если инструмент поддерживает только формат OpenAI или в одном и том же коде нужно переключаться между Claude, GPT, DeepSeek и Gemini, выбирайте OpenAI-совместимый формат.** В RuAPI в нём тоже работают кэш, рассуждения и PDF; для кэша в запросе нужны метки `cache_control`.

## Чем отличаются форматы

| | OpenAI-совместимый формат | Нативный формат Anthropic |
| - | - | - |
| Адрес запроса | `https://www.ruapi.ai/v1/chat/completions` | `https://www.ruapi.ai/v1/messages` |
| `base_url` в SDK | `https://www.ruapi.ai/v1` | `https://www.ruapi.ai` (без `/v1`) |
| Где передаётся ключ | `Authorization: Bearer sk-...` | `x-api-key: sk-...` или `Authorization: Bearer sk-...` |
| Какие модели доступны | Claude, GPT, DeepSeek, Gemini и все остальные чат-модели | Claude; DeepSeek тоже работает, см. [Claude Code на DeepSeek V4 Pro](/ru/integrations/claude-code-deepseek) |
| Системный промпт | сообщение с `role: "system"` в `messages` | поле `system` на верхнем уровне запроса |
| `max_tokens` | можно не указывать | обязателен по спецификации Anthropic |
| Текст ответа | `choices[0].message.content` | блоки `type: "text"` в списке `content` |
| Рассуждения (thinking) | `reasoning_effort`: `low`, `medium`, `high`; текст рассуждений — в `reasoning_content` | параметр `thinking`; текст рассуждений — в блоках `type: "thinking"` |
| Вызов инструментов | `function` в `tools`, результат отправляется сообщением с `role: "tool"` | `input_schema` в `tools`, результат отправляется блоком `tool_result` |
| Картинки и PDF | блоки `image_url` и `file` | блоки `image` и `document` |
| Кэш | только при метках `cache_control` в запросе | как у Anthropic; Claude Code сам ставит метки |
| Учёт токенов (`usage`) | `prompt_tokens` уже включает токены из кэша; прочитанное из кэша — в `prompt_tokens_details.cached_tokens` | `input_tokens` без кэша; кэш учитывается отдельно — в `cache_read_input_tokens` и `cache_creation_input_tokens` |
| Потоковый вывод | в каждой строке `data:` — `choices[0].delta`, последняя строка — `data: [DONE]` | события с именами: `message_start`, `content_block_delta`, `message_stop` и другие |
| Цена | зависит только от модели | зависит только от модели |

## Что OpenAI-совместимый формат RuAPI умеет сверх слоя Anthropic

У Anthropic есть собственный OpenAI-совместимый слой. В официальной документации сказано, что он предназначен в первую очередь для тестирования и сравнения моделей, для большинства задач не считается долгосрочным решением для продакшена, а многие возможности в нём недоступны. В RuAPI запросы в OpenAI-совместимом формате мы сами преобразуем в нативные запросы Claude, поэтому всё перечисленное ниже работает:

| Возможность | OpenAI-совместимый слой Anthropic | OpenAI-совместимый формат RuAPI |
| - | - | - |
| Кэширование промптов | не поддерживается | поддерживается: метки `cache_control` в блоках и на верхнем уровне запроса, см. [Кэширование промптов](/ru/prompt-caching) |
| Глубина рассуждений `reasoning_effort` | игнорируется | передаётся в Claude как глубина рассуждений |
| Текст рассуждений | не возвращается | возвращается в `reasoning_content`, если в запросе указан `reasoning_effort` |
| PDF (блок `file`) | игнорируется | преобразуется в блок `document` Claude |
| Данные о кэше в `prompt_tokens_details` | всегда пусто | видно, сколько токенов прочитано из кэша и сколько записано в него |
| `temperature` и `top_p` на новых моделях | на Claude 4.7 и новее любое значение, кроме значения по умолчанию, даёт ошибку 400 | удаляются автоматически, ошибки нет |

Данные по Anthropic — из официальной документации [OpenAI SDK compatibility](https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk) (проверено 19.10.2026).

## Что выбрать

### Агенты для программирования

| Инструмент | Формат для Claude | Адрес |
| - | - | - |
| [Claude Code](/ru/integrations/claude-code) | только нативный формат Anthropic | `ANTHROPIC_BASE_URL` = `https://www.ruapi.ai` |
| [Cline](/ru/integrations/cline), [Roo Code](/ru/integrations/roo-code) | провайдер **Anthropic** с флажком **Use custom base URL** | `https://www.ruapi.ai` |
| [Kilo Code](/ru/integrations/kilo-code) | собственный провайдер (**Custom provider**), в поле **Provider API** — **Anthropic Messages** | `https://www.ruapi.ai/v1` |
| [Continue](/ru/integrations/continue) | `provider: anthropic` | `https://www.ruapi.ai/v1` |
| [OpenCode](/ru/integrations/opencode) | встроенный провайдер `anthropic` | `https://www.ruapi.ai/v1` |
| [OpenClaw](/ru/integrations/openclaw) | переменная окружения `ANTHROPIC_BASE_URL` | `https://www.ruapi.ai` |

<Warning>
  Нужен ли `/v1` в адресе для нативного формата Anthropic, зависит от инструмента: в Claude Code, Cline, Roo Code, OpenClaw и Anthropic SDK — без `/v1`, в Kilo Code, Continue и OpenCode — с `/v1`. Указывайте адрес точно как в таблице, иначе подключение не заработает. В OpenAI-совместимом формате адрес всегда с `/v1`.
</Warning>

Остальные инструменты ([JetBrains AI Assistant](/ru/integrations/jetbrains-ai-assistant), [n8n](/ru/integrations/n8n), [Cherry Studio](/ru/integrations/cherry-studio) и другие) подключаются в OpenAI-совместимом формате по своим инструкциям, адрес — `https://www.ruapi.ai/v1`. Claude при таком подключении тоже работает, но если инструмент не ставит метки кэша, кэша не будет, и длинные диалоги обойдутся дороже.

### Своё приложение

* **Только Claude**: Anthropic SDK (`pip install anthropic`), `base_url="https://www.ruapi.ai"`. Здесь больше всего возможностей: кэш, рассуждения и PDF настраиваются так же, как в официальной документации Anthropic.
* **Модели разных компаний вперемешку**: OpenAI SDK, `base_url="https://www.ruapi.ai/v1"`; чтобы сменить модель, достаточно поменять `model`. Для кэша Claude добавьте в запрос метки `cache_control` — как это сделать, описано на странице [Кэширование промптов](/ru/prompt-caching).

## Один и тот же запрос в двух форматах

Оба примера делают одно и то же: задают Claude вопрос с системным промптом и просят вернуть текст рассуждений.

<CodeGroup>
  ```python OpenAI SDK theme={null}
  from openai import OpenAI

  client = OpenAI(base_url="https://www.ruapi.ai/v1", api_key="sk-...")

  response = client.chat.completions.create(
      model="claude-sonnet-5-5",
      reasoning_effort="low",
      messages=[
          {"role": "system", "content": "Ты опытный Python-разработчик. Отвечай кратко."},
          {"role": "user", "content": "Как развернуть список?"},
      ],
  )
  message = response.choices[0].message
  print(getattr(message, "reasoning_content", None))  # текст рассуждений
  print(message.content)  # ответ
  ```

  ```python Anthropic SDK theme={null}
  import anthropic

  client = anthropic.Anthropic(base_url="https://www.ruapi.ai", api_key="sk-...")

  response = client.messages.create(
      model="claude-sonnet-5-5",
      max_tokens=2048,
      thinking={"type": "adaptive", "display": "summarized"},
      system="Ты опытный Python-разработчик. Отвечай кратко.",
      messages=[{"role": "user", "content": "Как развернуть список?"}],
  )
  for block in response.content:
      if block.type == "thinking":
          print(block.thinking)  # текст рассуждений
      elif block.type == "text":
          print(block.text)  # ответ
  ```
</CodeGroup>

Простейший запрос через curl:

<CodeGroup>
  ```bash OpenAI-совместимый формат theme={null}
  curl https://www.ruapi.ai/v1/chat/completions \
    -H "Authorization: Bearer sk-..." \
    -H "Content-Type: application/json" \
    -d '{"model": "claude-sonnet-5-5", "messages": [{"role": "user", "content": "Привет"}]}'
  ```

  ```bash Нативный формат Anthropic theme={null}
  curl https://www.ruapi.ai/v1/messages \
    -H "x-api-key: sk-..." \
    -H "anthropic-version: 2023-06-01" \
    -H "Content-Type: application/json" \
    -d '{"model": "claude-sonnet-5-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "Привет"}]}'
  ```
</CodeGroup>

## Как узнать, какой у вас формат

Откройте в **Журнале запросов** консоли запись с Claude и посмотрите строку «Путь запроса»: `/v1/chat/completions` — OpenAI-совместимый формат, `/v1/messages` — нативный формат Anthropic. Другие способы — в разделе «Какой формат у вас» на странице [Кэширование промптов](/ru/prompt-caching).

## Частые вопросы

<AccordionGroup>
  <Accordion title="Цена в обоих форматах одинаковая?">
    Да. RuAPI тарифицирует по модели, формат на цену не влияет. Один ключ работает в обоих форматах — отдельный ключ создавать не нужно.
  </Accordion>

  <Accordion title="Почему Claude в OpenAI-совместимом формате быстро расходует баланс?">
    Скорее всего, не срабатывает кэш, и повторяющийся контекст каждый раз оплачивается по полной цене. Выберите в инструменте провайдер Anthropic или добавьте в запрос метки `cache_control`. Пошаговая проверка — в частых вопросах на странице [Кэширование промптов](/ru/prompt-caching).
  </Accordion>

  <Accordion title="Почему ответ обрывается на середине?">
    Посмотрите `finish_reason` (OpenAI-совместимый формат) или `stop_reason` (нативный формат Anthropic): `length` или `max_tokens` означает, что ответ упёрся в лимит длины. Если `max_tokens` в запросе не указан, RuAPI подставляет 8192 токена; для длинных ответов укажите `max_tokens` побольше. Токены рассуждений тоже входят в `max_tokens`.
  </Accordion>

  <Accordion title="Почему текст рассуждений пустой?">
    Модели Claude 5 (например, Sonnet 5.5, Opus 5.5 и Haiku 5.5) рассуждают по умолчанию, но текст рассуждений не возвращают. В нативном формате Anthropic его нужно запросить явно: `thinking: {"type": "adaptive", "display": "summarized"}`. В OpenAI-совместимом формате достаточно указать `reasoning_effort` — остальное RuAPI сделает сам. На простой вопрос Claude может ответить сразу, без рассуждений, и тогда пустой текст рассуждений — это нормально.
  </Accordion>

  <Accordion title="Почему принудительный вызов инструмента даёт ошибку 400?">
    Claude Opus 5.5, Claude Sonnet 5.5 и Claude Fable 5.1 не поддерживают принудительный вызов инструментов: `tool_choice: "required"` или имя конкретной функции в OpenAI-совместимом формате, как и `{"type": "any"}` или `{"type": "tool"}` в нативном формате Anthropic, одинаково дают ошибку 400. Используйте `auto` и опишите в промпте, когда нужно вызывать инструмент. Источник — официальная документация Anthropic [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) (проверено 19.10.2026).
  </Accordion>

  <Accordion title="Почему через другой шлюз в OpenAI-совместимом формате у Claude нет кэша?">
    Такой кэш есть не везде: собственный OpenAI-совместимый слой Anthropic кэширование не поддерживает, а в документации некоторых шлюзов прямо сказано, что скидка за кэш действует только в нативном формате Anthropic. В RuAPI кэш Claude работает в обоих форматах.
  </Accordion>
</AccordionGroup>

## Дальше

* [Кэширование промптов](/ru/prompt-caching): как включить кэш Claude в обоих форматах и проверить, что он сработал.
* [Claude API](/ru/claude-api): чем отличаются линейки и какую выбрать.
* [Claude Code](/ru/integrations/claude-code): как подключить Claude Code к RuAPI.
* [Вызов функций](/ru/function-calling): полный пример вызова инструментов.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.