Claude Platform Docs
SDKs, CLI y bibliotecasSDKs de cliente

PHP SDK

Instala y configura el SDK de PHP de Anthropic con objetos de valor y patrones de construcción

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

Instalación

El SDK usa PSR-18 para HTTP y detecta automáticamente cualquier cliente PSR-18 instalado. Se recomienda Guzzle porque el SDK lo configura para "streaming" (transmisión incremental) sin configuración adicional:

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.

$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" (federación de identidades de carga de trabajo), consulta Autenticación. Si tu "API key" (clave de API) es una clave personal o de cuenta de servicio que no está limitada a un espacio de trabajo, establece el ID del espacio de trabajo en el encabezado de solicitud anthropic-workspace-id; Seleccionar un espacio de trabajo 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 objetos de valor.

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

Streaming

El SDK ofrece soporte para respuestas en streaming mediante "Server-Sent Events" (eventos enviados por el servidor), o SSE.

$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 detectado, el SDK lo configura automáticamente para streaming. Con un cliente que almacena en búfer, el bucle foreach entrega todos los eventos a la 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 compatible con streaming mediante la opción de solicitud streamingTransporter:

$client = new Client(
  requestOptions: 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 que no es de éxito (es decir, una respuesta 4xx o 5xx), se lanza una subclase de Anthropic\Core\Exceptions\APIException:

<?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:

CausaTipo de error
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
Otro error HTTPAPIStatusException
Tiempo de espera agotadoAPITimeoutException
Error de redAPIConnectionException

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, los errores internos >=500 y los tiempos de espera agotados se reintentan de forma predeterminada.

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

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 de la API de Claude están paginados.

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

$client = new Client();

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

// obtiene los elementos de la página actual
foreach ($page->getItems() as $item) {
  echo $item->id, PHP_EOL;
}
// realiza 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

Trazado de OpenTelemetry

Cuando tu aplicación registra un tracer provider de OpenTelemetry, el SDK emite un span por cada solicitud que envía. Para enviar los spans a tu plataforma de observabilidad, consulta Configura OpenTelemetry con el Claude SDK.

Propiedades no documentadas

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

<?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 ve en el ejemplo anterior.

Endpoints no documentados

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

$client = new Client();

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

Integraciones de plataforma

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 (heredado): Anthropic\Bedrock\Client. Usa ::fromEnvironment() o ::withCredentials().
  • Claude Platform on 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 las aplicaciones existentes que usan la API InvokeModel de Bedrock.

El SDK de PHP también es compatible con Claude Models on Google Cloud (Anthropic managed) a través de Anthropic\GoogleCloud\Client. Este cliente está en beta. Anthropic\GoogleCloud\Client requiere google/auth como dependencia opcional. Usa new Anthropic\GoogleCloud\Client(workspaceId: ...) o establece la variable de entorno ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID. Consulta Resolución del proyecto, la ubicación y el workspace.

Versionado semántico

Cada versión principal de este SDK envía una versión de la API en el encabezado anthropic-version de forma predeterminada, y cada nueva versión de la API viene acompañada de una nueva versión principal. La primera versión principal que envía 2026-10-21 es la 1.0.0; consulta Actualizar a 2026-10-21.

Este paquete sigue las convenciones de SemVer.

Este paquete considera que las mejoras en las definiciones de tipos de PHPDoc (que no son de tiempo de ejecución) son cambios que no rompen la compatibilidad.

Recursos adicionales

Was this page helpful?