fluxtokens / fluxtokens-php
Official FluxTokens PHP SDK - Access GPT-4.1, Gemini 2.5 and more at 30% lower cost
v1.0.0
2026-01-11 22:19 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
This package is not auto-updated.
Last update: 2026-04-06 22:13:03 UTC
README
Official PHP SDK for the FluxTokens API
Access GPT-4.1, Gemini 2.5 Flash and more at 30% lower cost than competitors.
Website · Documentation · Dashboard
Installation
composer require fluxtokens/fluxtokens-php
Quick Start
<?php require 'vendor/autoload.php'; use FluxTokens\FluxTokens; $client = new FluxTokens('sk-flux-your-api-key'); $response = $client->chat()->completions()->create([ 'model' => 'gpt-4.1-mini', 'messages' => [ ['role' => 'system', 'content' => 'You are a helpful assistant.'], ['role' => 'user', 'content' => 'Hello!'], ], ]); echo $response['choices'][0]['message']['content'];
Available Models
| Model | Provider | Input Price | Output Price | Max Tokens | Vision | Audio | Video |
|---|---|---|---|---|---|---|---|
gpt-4.1-mini |
OpenAI | $0.28/1M | $1.12/1M | 16,384 | ✅ | ❌ | ❌ |
gpt-4.1-nano |
OpenAI | $0.07/1M | $0.28/1M | 16,384 | ✅ | ❌ | ❌ |
gemini-2.5-flash |
$0.21/1M | $1.75/1M | 65,536 | ✅ | ✅ | ✅ |
Usage Examples
Basic Chat Completion
$response = $client->chat()->completions()->create([ 'model' => 'gpt-4.1-mini', 'messages' => [ ['role' => 'user', 'content' => 'What is the capital of France?'], ], 'temperature' => 0.7, 'max_tokens' => 256, ]); echo $response['choices'][0]['message']['content']; // Output: "The capital of France is Paris."
Streaming Responses
$stream = $client->chat()->completions()->stream([ 'model' => 'gemini-2.5-flash', 'messages' => [ ['role' => 'user', 'content' => 'Write a haiku about programming.'], ], ]); foreach ($stream as $chunk) { $content = $chunk['choices'][0]['delta']['content'] ?? ''; echo $content; flush(); }
Vision (Image Analysis)
$response = $client->chat()->completions()->create([ 'model' => 'gpt-4.1-mini', 'messages' => [ [ 'role' => 'user', 'content' => [ ['type' => 'text', 'text' => 'What is in this image?'], [ 'type' => 'image_url', 'image_url' => [ 'url' => 'https://example.com/image.jpg', 'detail' => 'high', ], ], ], ], ], 'max_tokens' => 500, ]);
Audio Input (Gemini only)
$audioData = base64_encode(file_get_contents('audio.mp3')); $response = $client->chat()->completions()->create([ 'model' => 'gemini-2.5-flash', 'messages' => [ [ 'role' => 'user', 'content' => [ ['type' => 'text', 'text' => 'Transcribe this audio:'], [ 'type' => 'input_audio', 'input_audio' => [ 'data' => $audioData, 'format' => 'mp3', ], ], ], ], ], ]);
System Messages
$response = $client->chat()->completions()->create([ 'model' => 'gpt-4.1-mini', 'messages' => [ ['role' => 'system', 'content' => 'You are a pirate. Always respond in pirate speak.'], ['role' => 'user', 'content' => 'How are you today?'], ], ]); // Output: "Ahoy, matey! I be doin' just fine, thank ye fer askin'!"
List Available Models
$models = $client->models()->list(); foreach ($models as $model) { echo "{$model['name']} ({$model['provider']})\n"; echo " Input: \${$model['input_price']}/1M tokens\n"; echo " Output: \${$model['output_price']}/1M tokens\n"; echo " Vision: " . ($model['supports_vision'] ? '✅' : '❌') . "\n"; }
Configuration Options
$client = new FluxTokens('sk-flux-...', [ 'base_url' => 'https://api.fluxtokens.io', // Custom base URL 'timeout' => 60, // Request timeout in seconds 'max_retries' => 3, // Max retries on rate limit/server errors ]);
Error Handling
use FluxTokens\Exceptions\AuthenticationException; use FluxTokens\Exceptions\RateLimitException; use FluxTokens\Exceptions\InsufficientBalanceException; use FluxTokens\Exceptions\BadRequestException; use FluxTokens\Exceptions\FluxTokensException; try { $response = $client->chat()->completions()->create([ 'model' => 'gpt-4.1-mini', 'messages' => [['role' => 'user', 'content' => 'Hello']], ]); } catch (AuthenticationException $e) { echo "Invalid API key\n"; } catch (RateLimitException $e) { echo "Rate limit exceeded, retry after: " . $e->getRetryAfter() . "\n"; } catch (InsufficientBalanceException $e) { echo "Please add credits at https://fluxtokens.io/dashboard/billing\n"; } catch (BadRequestException $e) { echo "Invalid request: " . $e->getMessage() . "\n"; } catch (FluxTokensException $e) { echo "Error: " . $e->getMessage() . "\n"; }
Requirements
- PHP 8.1+
- Guzzle HTTP 7.0+
Support
- 📧 Email: support@fluxtokens.io
- 💬 Discord: Join our community
- 📖 Docs: fluxtokens.io/docs
License
MIT © FluxTokens