Claude Platform Docs
SDKs, CLI e bibliotecasSDKs de cliente

PHP SDK

Instale e configure o SDK PHP da Anthropic com objetos de valor e padrões builder

A biblioteca PHP da Anthropic fornece acesso conveniente à Claude API a partir de qualquer aplicação PHP 8.1.0+.

Instalação

O SDK usa PSR-18 para HTTP e descobre automaticamente qualquer cliente PSR-18 instalado. O Guzzle é recomendado porque o SDK o configura para streaming sem nenhuma configuração adicional:

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

Requisitos

PHP 8.1.0 ou superior.

Uso

Esta biblioteca usa parâmetros nomeados para especificar argumentos opcionais. Parâmetros com um valor padrão devem ser definidos pelo nome.

$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 opções de autenticação, incluindo Workload Identity Federation, consulte Autenticação. Se a sua chave de API for uma chave pessoal ou de conta de serviço que não esteja vinculada a um workspace, defina o ID do workspace no cabeçalho de requisição anthropic-workspace-id; Selecionar um workspace mostra a opção por requisição para este SDK.

Objetos de valor

Recomenda-se usar o construtor estático with Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...) e parâmetros nomeados para inicializar objetos de valor.

No entanto, builders também são fornecidos (new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz").

Streaming

O SDK oferece suporte a respostas em "streaming" (transmissão contínua) usando "Server-Sent Events" (eventos enviados pelo servidor), ou 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;
}

O streaming requer um cliente HTTP que retorne o corpo da resposta de forma incremental. Quando o Guzzle é o cliente PSR-18 descoberto, o SDK o configura para streaming automaticamente. Com um cliente que faz buffering, o loop foreach produz todos os eventos de uma só vez quando a resposta é concluída, em vez de incrementalmente; se você observar esse sintoma, instale o Guzzle ou forneça um cliente PSR-18 com suporte a streaming por meio da opção de requisição streamingTransporter:

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

Tratamento de erros

Quando a biblioteca não consegue se conectar à API, ou se a API retorna um código de status de não sucesso (ou seja, uma resposta 4xx ou 5xx), uma subclasse de Anthropic\Core\Exceptions\APIException é lançada:

<?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();
}

Os códigos de erro são os seguintes:

CausaTipo de erro
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
Outro erro HTTPAPIStatusException
TimeoutAPITimeoutException
Erro de redeAPIConnectionException

Novas tentativas

Certos erros são automaticamente repetidos duas vezes por padrão, com um breve "exponential backoff" (recuo exponencial).

Erros de conexão (por exemplo, devido a um problema de conectividade de rede), 408 Request Timeout, 409 Conflict, 429 Rate Limit, erros internos >=500 e timeouts são todos repetidos por padrão.

Você pode usar a opção maxRetries para configurar ou desativar isso:

use Anthropic\RequestOptions;

// Configure o padrão para todas as requisições:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));

// Ou configure por requisição:
$result = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5-5',
  requestOptions: RequestOptions::with(maxRetries: 5),
);

Paginação

Os métodos de listagem na Claude API são paginados.

Esta biblioteca fornece iteradores com paginação automática em cada resposta de listagem, para que você não precise solicitar páginas sucessivas manualmente:

$client = new Client();

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

// busca os itens da página atual
foreach ($page->getItems() as $item) {
  echo $item->id, PHP_EOL;
}
// faz requisições de rede adicionais para buscar itens de todas as páginas, incluindo a atual e as seguintes

foreach ($page->pagingEachItem() as $item) {
  echo $item->id, PHP_EOL;

}

Uso avançado

Tracing do OpenTelemetry

Quando a sua aplicação registra um tracer provider do OpenTelemetry, o SDK emite um span para cada requisição que envia. Para enviar os spans para a sua plataforma de observabilidade, consulte Configurar o OpenTelemetry com o Claude SDK.

Propriedades não documentadas

Você pode enviar parâmetros não documentados para qualquer endpoint e ler propriedades de resposta não documentadas, da seguinte forma:

<?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 requisição não documentados

Se você quiser enviar explicitamente um parâmetro extra, pode fazê-lo com as opções extraQueryParams, extraBodyParams e extraHeaders em RequestOptions::with() ao fazer uma requisição, como visto no exemplo anterior.

Endpoints não documentados

Para fazer requisições a endpoints não documentados mantendo o benefício de autenticação, novas tentativas e outros recursos do cliente, você pode fazer requisições usando client->request, da seguinte forma:

$client = new Client();

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

Integrações de plataforma

O SDK PHP oferece suporte às seguintes plataformas:

  • Agent Platform: Anthropic\Vertex\Client. Use ::fromEnvironment().
  • Bedrock: Anthropic\Bedrock\MantleClient. Use new MantleClient(awsRegion: ...).
  • Bedrock (legado): Anthropic\Bedrock\Client. Use ::fromEnvironment() ou ::withCredentials().
  • Claude Platform on AWS: Anthropic\Aws\Client (requer aws/aws-sdk-php como dependência opcional). Use new Anthropic\Aws\Client(workspaceId: ...) ou defina ANTHROPIC_AWS_WORKSPACE_ID. Disponível em beta.
  • Foundry: Anthropic\Foundry\Client. Use ::withCredentials().

Use MantleClient para novos projetos; Anthropic\Bedrock\Client permanece para aplicações existentes que usam a API InvokeModel do Bedrock.

O SDK PHP também oferece suporte a Claude Models on Google Cloud (Anthropic managed) por meio de Anthropic\GoogleCloud\Client. Este cliente está em beta. Anthropic\GoogleCloud\Client requer google/auth como uma dependência opcional. Use new Anthropic\GoogleCloud\Client(workspaceId: ...) ou defina a variável de ambiente ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID. Consulte Resolução de projeto, localização e workspace.

Versionamento semântico

Cada versão principal deste SDK envia uma versão da API no cabeçalho anthropic-version por padrão, e uma nova versão principal acompanha cada nova versão da API. A primeira versão principal que envia 2026-10-21 é a 1.0.0; consulte Atualizar para 2026-10-21.

Este pacote segue as convenções do SemVer.

Este pacote considera melhorias nas definições de tipo PHPDoc (não relacionadas ao runtime) como alterações que não quebram a compatibilidade.

Recursos adicionais

Was this page helpful?