---
title: SDK de PHP
url: https://platform.claude.com/docs/es/cli-sdks-libraries/sdks/php
description: Instala y configura el SDK de PHP de Anthropic con objetos de valor y patrones builder
---

La biblioteca PHP de Anthropic proporciona un acceso conveniente a la Claude API desde cualquier aplicación PHP 8.1.0+.

<Info>
  El SDK de PHP se encuentra actualmente en beta. Las APIs podrían cambiar entre versiones.
</Info>

<Info>
  Para la documentación de las funcionalidades de la API con ejemplos de código, consulta la [referencia de la API](https://platform.claude.com/docs/es/api/overview). Esta página cubre las funcionalidades y la configuración del SDK específicas de PHP.
</Info>

## Instalación

El SDK usa [PSR-18](https://www.php-fig.org/psr/psr-18/) para HTTP y descubre automáticamente cualquier cliente PSR-18 instalado. Se recomienda [Guzzle](https://docs.guzzlephp.org/) porque el SDK lo configura para streaming sin ninguna configuración adicional:

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

## Requisitos

PHP 8.1.0 o superior.

## Uso

Esta biblioteca usa parámetros con nombre para especificar argumentos opcionales. Los parámetros con un valor predeterminado deben establecerse por nombre.

```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;
```

Para conocer las opciones de autenticación, incluida Workload Identity Federation, consulta [Autenticación](https://platform.claude.com/docs/es/manage-claude/authentication). Si tu clave de API es una [clave personal o de cuenta de servicio](https://platform.claude.com/docs/es/manage-claude/authentication#key-types) con acceso a múltiples espacios de trabajo, establece el ID del espacio de trabajo en el encabezado de solicitud `anthropic-workspace-id`; [Seleccionar un espacio de trabajo](https://platform.claude.com/docs/es/manage-claude/authentication#select-a-workspace) muestra la opción por solicitud para este SDK.

## Objetos de valor

Se recomienda usar el constructor estático `with` `Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...)` y parámetros con nombre para inicializar "value objects" (objetos de valor).

Sin embargo, también se proporcionan builders `(new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz")`.

## Streaming

El SDK proporciona soporte para respuestas en streaming usando "Server-Sent Events" (eventos enviados por el servidor), o 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;
}
```

El streaming requiere un cliente HTTP que devuelva el cuerpo de la respuesta de forma incremental. Cuando Guzzle es el cliente PSR-18 descubierto, el SDK lo configura para streaming automáticamente. Con un cliente que almacena en búfer, el bucle `foreach` entrega todos los eventos de una vez cuando la respuesta se completa, en lugar de hacerlo de forma incremental; si observas ese síntoma, instala Guzzle o proporciona un cliente PSR-18 con capacidad de streaming a través de la opción de solicitud `streamingTransporter`:

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

## Manejo de errores

Cuando la biblioteca no puede conectarse a la API, o si la API devuelve un código de estado no exitoso (es decir, una respuesta 4xx o 5xx), se lanza una subclase de `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();
}
```

Los códigos de error son los siguientes:

| Causa                    | Tipo de error                  |
| ------------------------ | ------------------------------ |
| HTTP 400                 | `BadRequestException`          |
| HTTP 401                 | `AuthenticationException`      |
| HTTP 403                 | `PermissionDeniedException`    |
| HTTP 404                 | `NotFoundException`            |
| HTTP 409                 | `ConflictException`            |
| HTTP 422                 | `UnprocessableEntityException` |
| HTTP 429                 | `RateLimitException`           |
| HTTP >= 500              | `InternalServerException`      |
| Otro error HTTP          | `APIStatusException`           |
| Tiempo de espera agotado | `APITimeoutException`          |
| Error de red             | `APIConnectionException`       |

## Reintentos

Ciertos errores se reintentan automáticamente dos veces de forma predeterminada, con un breve retroceso exponencial.

Los errores de conexión (por ejemplo, debido a un problema de conectividad de red), 408 Request Timeout, 409 Conflict, 429 Rate Limit, errores internos >=500 y los tiempos de espera agotados se reintentan todos de forma predeterminada.

Puedes usar la opción `maxRetries` para configurar o deshabilitar esto:

```php
use Anthropic\RequestOptions;
// ...
// Configura el valor predeterminado para todas las solicitudes:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));

// O bien, configúralo por solicitud:
$result = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
  requestOptions: RequestOptions::with(maxRetries: 5),
);
```

## Paginación

Los métodos de listado en la Claude API están paginados.

Esta biblioteca proporciona iteradores con paginación automática en cada respuesta de listado, por lo que no tienes que solicitar las páginas sucesivas manualmente:

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

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

// obtener elementos de la página actual
foreach ($page->getItems() as $item) {
  echo $item->id, PHP_EOL;
}
// realizar solicitudes de red adicionales para obtener elementos de todas las páginas, incluida la actual y las siguientes
// ...
foreach ($page->pagingEachItem() as $item) {
  echo $item->id, PHP_EOL;
// ...
}
```

## Uso avanzado

### Propiedades no documentadas

Puedes enviar parámetros no documentados a cualquier endpoint, y leer propiedades de respuesta no documentadas, de la siguiente manera:

<Note>
  Los parámetros `extra*` con el mismo nombre sobrescriben los parámetros documentados.
</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'],
  ),
);
```

### Parámetros de solicitud no documentados

Si quieres enviar explícitamente un parámetro adicional, puedes hacerlo con las opciones `extraQueryParams`, `extraBodyParams` y `extraHeaders` en `RequestOptions::with()` al realizar una solicitud, como se muestra en el ejemplo anterior.

### Endpoints no documentados

Para realizar solicitudes a endpoints no documentados conservando el beneficio de la autenticación, los reintentos y otras funcionalidades del cliente, puedes realizar solicitudes usando `client->request`, de la siguiente manera:

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

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

## Integraciones con plataformas

<Note>
  Para guías detalladas de configuración de plataformas con ejemplos de código, consulta:

  * [Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock (Opus 4.6 y anteriores)](https://platform.claude.com/docs/es/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform en AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws)
  * [Google Cloud](https://platform.claude.com/docs/es/build-with-claude/claude-on-vertex-ai)
  * [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry)
</Note>

El SDK de PHP es compatible con las siguientes plataformas:

* **Agent Platform:** `Anthropic\Vertex\Client`. Usa `::fromEnvironment()`.
* **Bedrock:** `Anthropic\Bedrock\MantleClient`. Usa `new MantleClient(awsRegion: ...)`.
* **Bedrock (legacy):** `Anthropic\Bedrock\Client`. Usa `::fromEnvironment()` o `::withCredentials()`.
* **Claude Platform en AWS:** `Anthropic\Aws\Client` (requiere `aws/aws-sdk-php` como dependencia opcional). Usa `new Anthropic\Aws\Client(workspaceId: ...)` o establece `ANTHROPIC_AWS_WORKSPACE_ID`. Disponible en beta.
* **Foundry:** `Anthropic\Foundry\Client`. Usa `::withCredentials()`.

Usa `MantleClient` para proyectos nuevos; `Anthropic\Bedrock\Client` se mantiene para aplicaciones existentes que usan la API `InvokeModel` de Bedrock.

## Versionado semántico

Este paquete sigue las convenciones de [SemVer](https://semver.org/spec/v2.0.0.html). Dado que la biblioteca está en desarrollo inicial y tiene una versión mayor de `0`, las APIs podrían cambiar en cualquier momento.

Este paquete considera que las mejoras a las definiciones de tipos PHPDoc (que no afectan el tiempo de ejecución) son cambios no disruptivos.

## Recursos adicionales

* [Repositorio de GitHub](https://github.com/anthropics/anthropic-sdk-php)
* [Packagist](https://packagist.org/packages/anthropic-ai/sdk)
* [Referencia de la API](https://platform.claude.com/docs/es/api/overview)
* [Streaming de mensajes](https://platform.claude.com/docs/es/build-with-claude/streaming)
