PHP code example of claude-php / claude-php-sdk

1. Go to this page and download the library: Download claude-php/claude-php-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

claude-php / claude-php-sdk example snippets



ClaudePhp\ClaudePhp;
use ClaudePhp\Types\ModelParam;

$client = new ClaudePhp(apiKey: $_ENV['ANTHROPIC_API_KEY']);

$message = $client->messages()->create([
    'model'      => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'max_tokens' => 1024,
    'messages'   => [
        ['role' => 'user', 'content' => 'Explain quantum entanglement in one paragraph.'],
    ],
]);

echo $message->content[0]['text'];

$stream = $client->messages()->stream([
    'model'      => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'max_tokens' => 1024,
    'messages'   => [['role' => 'user', 'content' => 'Write a haiku about PHP.']],
]);

foreach ($stream as $event) {
    if ($event['type'] === 'content_block_delta') {
        echo $event['delta']['text'] ?? '';
    }
}

use ClaudePhp\Lib\Streaming\MessageStream;
use ClaudePhp\Responses\Helpers\StreamEventHelper;

$stream = new MessageStream($client->messages()->stream([...]));

foreach ($stream as $event) {
    if (StreamEventHelper::isTextDelta($event)) {
        echo StreamEventHelper::textDelta($event);
    }
}

$final = $stream->getFinalMessage();

$messages = [
    ['role' => 'user',      'content' => 'My name is Alice.'],
    ['role' => 'assistant', 'content' => 'Nice to meet you, Alice!'],
    ['role' => 'user',      'content' => 'What is my name?'],
];

$response = $client->messages()->create([
    'model'    => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'messages' => $messages,
]);

$response = $client->messages()->create([
    'model'      => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'max_tokens' => 1024,
    'tools'      => [
        [
            'name'         => 'get_weather',
            'description'  => 'Get current weather for a city.',
            'input_schema' => [
                'type'       => 'object',
                'properties' => ['city' => ['type' => 'string']],
                '

use function ClaudePhp\Lib\Tools\beta_tool;

$weather = beta_tool(
    handler:     fn($args) => "Sunny and 24°C in {$args['city']}",
    name:        'get_weather',
    description: 'Get current weather for a city.',
    inputSchema: [
        'type' => 'object', 'properties' => ['city' => ['type' => 'string']], '

// Adaptive — recommended for claude-opus-4-6
$response = $client->messages()->create([
    'model'      => ModelParam::MODEL_CLAUDE_OPUS_4_6,
    'max_tokens' => 8192,
    'thinking'   => ['type' => 'adaptive'],
    'messages'   => [['role' => 'user', 'content' => 'Design a fault-tolerant distributed cache.']],
]);

foreach ($response->content as $block) {
    if ($block['type'] === 'thinking') {
        echo "Reasoning: " . $block['thinking'] . "\n";
    } elseif ($block['type'] === 'text') {
        echo $block['text'];
    }
}

$response = $client->messages()->create([
    'model'    => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'messages' => [
        [
            'role'    => 'user',
            'content' => [
                [
                    'type'   => 'image',
                    'source' => ['type' => 'base64', 'media_type' => 'image/jpeg', 'data' => $base64Data],
                ],
                ['type' => 'text', 'text' => 'What is in this image?'],
            ],
        ],
    ],
]);

$batch = $client->messages()->batches()->create([
    'requests' => [
        ['custom_id' => 'req-1', 'params' => ['model' => ModelParam::MODEL_CLAUDE_SONNET_4_5, 'max_tokens' => 256, 'messages' => [...]]],
        ['custom_id' => 'req-2', 'params' => ['model' => ModelParam::MODEL_CLAUDE_SONNET_4_5, 'max_tokens' => 256, 'messages' => [...]]],
    ],
]);

// Poll until done
while ($batch->processing_status !== 'ended') {
    sleep(5);
    $batch = $client->messages()->batches()->retrieve($batch->id);
}

// Iterate JSONL results
foreach ($client->messages()->batches()->results($batch->id) as $result) {
    echo $result['custom_id'] . ': ' . $result['result']['message']['content'][0]['text'] . "\n";
}

$schema = [
    'type'       => 'object',
    'type' => 'string'],
        'price'    => ['type' => 'number'],
        'quantity' => ['type' => 'integer'],
    ],
];

$parsed = $client->beta()->messages()->parse([
    'model'         => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'max_tokens'    => 256,
    'messages'      => [['role' => 'user', 'content' => 'I bought 3 coffees at $4.50 each.']],
    'output_format' => $schema,
]);
// ['name' => 'coffee', 'price' => 4.5, 'quantity' => 3]

$response = $client->messages()->create([
    'model'    => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'max_tokens' => 2048,
    'tools'    => [['name' => 'code_execution', 'type' => 'code_execution_20250825']],
    'messages' => [['role' => 'user', 'content' => 'Compute the first 10 Fibonacci numbers.']],
]);

$response = $client->messages()->create([
    'model'    => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'tools'    => [['name' => 'memory', 'type' => 'memory_20250818']],
    'messages' => [['role' => 'user', 'content' => 'Remember: I prefer PHP 8.3 and UTC timezone.']],
]);

$response = $client->messages()->create([
    'model'   => ModelParam::MODEL_CLAUDE_SONNET_4_5,
    'tools'   => [
        [
            'name'            => 'web_fetch',
            'type'            => 'web_fetch_20250910',
            'allowed_domains' => ['docs.anthropic.com'],
            'max_uses'        => 3,
        ],
    ],
    'messages' => [['role' => 'user', 'content' => 'Summarize https://docs.anthropic.com/']],
]);

use ClaudePhp\Types\ModelParam;

$client = new ClaudePhp(
    apiKey:        $_ENV['ANTHROPIC_API_KEY'], // defaults to ANTHROPIC_API_KEY env var
    baseUrl:       'https://api.anthropic.com/v1',
    timeout:       30.0,    // seconds
    maxRetries:    2,        // auto-retries on 429 / 5xx
    customHeaders: ['X-My-Header' => 'value'],
);

// OAuth2 / Bearer token (e.g. enterprise SSO, proxies)
$client = new ClaudePhp(apiKey: null, customHeaders: [
    'Authorization' => 'Bearer your-token',
]);

// Custom x-api-key (e.g. API gateway with key management)
$client = new ClaudePhp(apiKey: null, customHeaders: [
    'x-api-key' => 'your-gateway-key',
]);

use ClaudePhp\Exceptions\{AuthenticationError, RateLimitError, APIConnectionError, APIStatusError};

try {
    $response = $client->messages()->create([...]);
} catch (AuthenticationError $e) {
    // Invalid or missing API key
} catch (RateLimitError $e) {
    $retryAfter = $e->response->getHeaderLine('retry-after');
    // Back off and retry
} catch (APIConnectionError $e) {
    // Network or timeout failure
} catch (APIStatusError $e) {
    echo "HTTP {$e->status_code}: {$e->message}";
}

use ClaudePhp\Laravel\Facades\Claude;

$response = Claude::messages()->create([...]);

// app/Providers/ClaudeServiceProvider.php
$this->app->singleton(ClaudePhp::class, fn() => new ClaudePhp(
    apiKey:     config('services.claude.api_key'),
    maxRetries: config('services.claude.max_retries', 2),
));
bash
composer 
bash
composer