---
title: PHP SDK
url: https://platform.claude.com/docs/ru/cli-sdks-libraries/sdks/php
description: Установка и настройка Anthropic PHP SDK с объектами-значениями и шаблонами построителей
---

Библиотека Anthropic для PHP обеспечивает удобный доступ к Claude API из любого приложения на PHP 8.1.0+.

<Info>
  Документацию по функциям API с примерами кода см. в [справочнике API](https://platform.claude.com/docs/ru/api/overview). На этой странице описаны функции и настройка SDK, специфичные для PHP.
</Info>

## Установка

SDK использует [PSR-18](https://www.php-fig.org/psr/psr-18/) для HTTP и автоматически обнаруживает любой установленный клиент PSR-18. Рекомендуется [Guzzle](https://docs.guzzlephp.org/), поскольку SDK настраивает его для «streaming» (потоковая передача) без дополнительной настройки:

```bash
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"
```

## Требования

PHP 8.1.0 или выше.

## Использование

Эта библиотека использует именованные параметры для указания необязательных аргументов. Параметры со значением по умолчанию должны задаваться по имени.

```php
$client = new Client();

$message = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
);

$textBlock = array_find($message->content, static fn ($block): bool => $block->type === 'text');
echo $textBlock->text;
```

Сведения о вариантах аутентификации, включая Workload Identity Federation, см. в разделе [Аутентификация](https://platform.claude.com/docs/ru/manage-claude/authentication). Если ваш ключ API является [ключом персональной или сервисной учётной записи](https://platform.claude.com/docs/ru/manage-claude/authentication#key-types), который не привязан к рабочему пространству, укажите идентификатор рабочего пространства в заголовке запроса `anthropic-workspace-id`; в разделе [Выбор рабочего пространства](https://platform.claude.com/docs/ru/manage-claude/authentication#select-a-workspace) показан вариант указания для каждого запроса в этом SDK.

## Объекты-значения

Для инициализации объектов-значений рекомендуется использовать статический конструктор `with` `Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...)` и именованные параметры.

Однако также предоставляются построители `(new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz")`.

## Потоковая передача

SDK поддерживает потоковую передачу ответов с использованием «Server-Sent Events» (события, отправляемые сервером), или SSE.

```php
$client = new Client();

$stream = $client->messages->createStream(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
);

foreach ($stream as $event) {
  echo $event->type . PHP_EOL;
}
```

Для потоковой передачи требуется HTTP-клиент, который возвращает тело ответа постепенно. Когда обнаруженным клиентом PSR-18 является Guzzle, SDK автоматически настраивает его для потоковой передачи. При использовании буферизующего клиента цикл `foreach` выдаёт все события сразу после завершения ответа, а не постепенно; если вы наблюдаете этот симптом, установите Guzzle или передайте клиент PSR-18 с поддержкой потоковой передачи через параметр запроса `streamingTransporter`:

```php
$client = new Client(
  requestOptions: RequestOptions::with(streamingTransporter: $myStreamingClient),
);
```

## Обработка ошибок

Когда библиотеке не удаётся подключиться к API или если API возвращает код состояния, отличный от успешного (то есть ответ 4xx или 5xx), выбрасывается подкласс `Anthropic\Core\Exceptions\APIException`:

```php
<?php
// ...
use Anthropic\Core\Exceptions\APIConnectionException;
use Anthropic\Core\Exceptions\APIStatusException;
use Anthropic\Core\Exceptions\RateLimitException;
// ...
try {
  $message = $client->messages->create(
    maxTokens: 1024,
    messages: [['role' => 'user', 'content' => 'Hello, Claude']],
    model: 'claude-opus-5-5',
  );
} catch (APIConnectionException $e) {
  echo "The server could not be reached", PHP_EOL;
  echo $e->getPrevious()?->getMessage(), PHP_EOL;
} catch (RateLimitException $_) {
  echo "A 429 status code was received; we should back off a bit.", PHP_EOL;
} catch (APIStatusException $e) {
  echo "Another non-200-range status code was received", PHP_EOL;
  echo $e->getMessage();
}
```

Коды ошибок следующие:

| Причина            | Тип ошибки                     |
| ------------------ | ------------------------------ |
| HTTP 400           | `BadRequestException`          |
| HTTP 401           | `AuthenticationException`      |
| HTTP 403           | `PermissionDeniedException`    |
| HTTP 404           | `NotFoundException`            |
| HTTP 409           | `ConflictException`            |
| HTTP 422           | `UnprocessableEntityException` |
| HTTP 429           | `RateLimitException`           |
| HTTP >= 500        | `InternalServerException`      |
| Другая ошибка HTTP | `APIStatusException`           |
| Тайм-аут           | `APITimeoutException`          |
| Сетевая ошибка     | `APIConnectionException`       |

## Повторные попытки

Некоторые ошибки по умолчанию автоматически повторяются два раза с короткой экспоненциальной задержкой.

Ошибки подключения (например, из-за проблем с сетевым соединением), 408 Request Timeout, 409 Conflict, 429 Rate Limit, внутренние ошибки >=500 и тайм-ауты по умолчанию повторяются.

Вы можете использовать параметр `maxRetries`, чтобы настроить или отключить это поведение:

```php
use Anthropic\RequestOptions;
// ...
// Настройте значение по умолчанию для всех запросов:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));

// Или настройте для отдельного запроса:
$result = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
  requestOptions: RequestOptions::with(maxRetries: 5),
);
```

## Пагинация

Методы получения списков в Claude API используют пагинацию.

Эта библиотека предоставляет итераторы с автоматической пагинацией для каждого ответа со списком, поэтому вам не нужно запрашивать последующие страницы вручную:

```php
$client = new Client();

$page = $client->beta->messages->batches->list(limit: 20);

// получить элементы с текущей страницы
foreach ($page->getItems() as $item) {
  echo $item->id, PHP_EOL;
}
// выполнить дополнительные сетевые запросы для получения элементов со всех страниц, начиная с текущей
// ...
foreach ($page->pagingEachItem() as $item) {
  echo $item->id, PHP_EOL;
// ...
}
```

## Расширенное использование

### Трассировка OpenTelemetry

Когда ваше приложение регистрирует провайдер трассировщика OpenTelemetry, SDK создаёт спан для каждого отправляемого запроса. Чтобы отправлять спаны на вашу платформу наблюдаемости, см. [Настройка OpenTelemetry с Claude SDK](https://platform.claude.com/docs/ru/manage-claude/opentelemetry/sdk).

### Недокументированные свойства

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

<Note>
  Параметры `extra*` с тем же именем переопределяют документированные параметры.
</Note>

```php
<?php
// ...
use Anthropic\RequestOptions;
// ...
$message = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
  requestOptions: RequestOptions::with(
    extraQueryParams: ['my_query_parameter' => 'value'],
    extraBodyParams: ['my_body_parameter' => 'value'],
    extraHeaders: ['my-header' => 'value'],
  ),
);
```

### Недокументированные параметры запроса

Если вы хотите явно отправить дополнительный параметр, вы можете сделать это с помощью параметров `extraQueryParams`, `extraBodyParams` и `extraHeaders` в `RequestOptions::with()` при выполнении запроса, как показано в предыдущем примере.

### Недокументированные конечные точки

Чтобы выполнять запросы к недокументированным конечным точкам, сохраняя преимущества аутентификации, повторных попыток и других функций клиента, вы можете выполнять запросы с помощью `client->request` следующим образом:

```php
$client = new Client();

$response = $client->request(
  method: "post",
  path: '/undocumented/endpoint',
  query: ['dog' => 'woof'],
  headers: ['useful-header' => 'interesting-value'],
  body: ['hello' => 'world']
);
```

## Интеграции с платформами

<Note>
  Подробные руководства по настройке платформ с примерами кода см.:

  * [Amazon Bedrock](https://platform.claude.com/docs/ru/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock (Opus 4.6 и более ранние)](https://platform.claude.com/docs/ru/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform on AWS](https://platform.claude.com/docs/ru/build-with-claude/claude-platform-on-aws)
  * [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/google-managed)
  * [Microsoft Foundry](https://platform.claude.com/docs/ru/build-with-claude/claude-in-microsoft-foundry)

  См. также [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/anthropic-managed).
</Note>

PHP SDK поддерживает следующие платформы:

* **Agent Platform:** `Anthropic\Vertex\Client`. Используйте `::fromEnvironment()`.
* **Bedrock:** `Anthropic\Bedrock\MantleClient`. Используйте `new MantleClient(awsRegion: ...)`.
* **Bedrock (устаревший):** `Anthropic\Bedrock\Client`. Используйте `::fromEnvironment()` или `::withCredentials()`.
* **Claude Platform on AWS:** `Anthropic\Aws\Client` (требует `aws/aws-sdk-php` в качестве необязательной зависимости). Используйте `new Anthropic\Aws\Client(workspaceId: ...)` или задайте `ANTHROPIC_AWS_WORKSPACE_ID`. Доступно в бета-версии.
* **Foundry:** `Anthropic\Foundry\Client`. Используйте `::withCredentials()`.

Используйте `MantleClient` для новых проектов; `Anthropic\Bedrock\Client` сохраняется для существующих приложений, использующих API Bedrock `InvokeModel`.

PHP SDK также поддерживает Claude Models on Google Cloud (Anthropic managed) через `Anthropic\GoogleCloud\Client`. Этот клиент находится в стадии бета-тестирования. `Anthropic\GoogleCloud\Client` требует `google/auth` в качестве необязательной зависимости. Используйте `new Anthropic\GoogleCloud\Client(workspaceId: ...)` или задайте переменную окружения `ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID`. См. [Определение проекта, расположения и рабочего пространства](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/anthropic-managed#project-location-and-workspace-resolution).

## Семантическое версионирование

Каждая мажорная версия этого SDK по умолчанию отправляет одну версию API в заголовке `anthropic-version`, и с каждой новой версией API выходит новая мажорная версия. Первая мажорная версия, отправляющая `2026-10-21`, — это 1.0.0; см. [Обновление до 2026-10-21](https://platform.claude.com/docs/ru/api/migration-2026-10-21#upgrade).

Этот пакет следует соглашениям [SemVer](https://semver.org/spec/v2.0.0.html).

Этот пакет считает улучшения определений типов PHPDoc (не относящихся ко времени выполнения) изменениями, не нарушающими совместимость.

## Дополнительные ресурсы

* [Репозиторий GitHub](https://github.com/anthropics/anthropic-sdk-php)
* [Packagist](https://packagist.org/packages/anthropic-ai/sdk)
* [Справочник API](https://platform.claude.com/docs/ru/api/overview)
* [Потоковая передача сообщений](https://platform.claude.com/docs/ru/build-with-claude/streaming)
