The official PHP SDK for the Buena.ai API provides a powerful and flexible way to integrate Buena.ai’s lead generation and LinkedIn automation features into your PHP applications.

🔄 Auto-Generated: Generated with OpenAPI Generator and automatically updated via GitHub Actions.

📦 Installation

Install the SDK using Composer:

composer require buena/sdk

🚀 Quick Start

<?php
require_once 'vendor/autoload.php';

use Buena\SDK\Configuration;
use Buena\SDK\Api\DefaultApi;
use Buena\SDK\ApiException;
use Buena\SDK\Model\CreateLeadRequest;

// Initialize the client
$config = Configuration::getDefaultConfiguration()
    ->setHost('https://api.buena.ai/api/v2')
    ->setApiKey('ApiKeyAuth', 'your-api-key');

$apiInstance = new DefaultApi(
    new GuzzleHttp\Client(),
    $config
);

try {
    // List leads
    $leads = $apiInstance->listLeads();
    echo "Leads: " . print_r($leads, true) . "\n";

    // Create a new lead
    $createRequest = new CreateLeadRequest([
        'first_name' => 'John',
        'last_name' => 'Doe',
        'email' => 'john@example.com',
        'company' => 'Example Corp'
    ]);

    $newLead = $apiInstance->createLead($createRequest);
    echo "Created lead: " . print_r($newLead, true) . "\n";

} catch (ApiException $e) {
    echo 'Exception when calling DefaultApi: ', $e->getMessage(), PHP_EOL;
    echo 'HTTP Status Code: ', $e->getCode(), PHP_EOL;
    echo 'Response Body: ', $e->getResponseBody(), PHP_EOL;
}

🔧 Configuration

<?php
use Buena\SDK\Configuration;
use Buena\SDK\Api\DefaultApi;
use GuzzleHttp\Client;

// Basic configuration
$config = Configuration::getDefaultConfiguration()
    ->setHost('https://api.buena.ai/api/v2')  // API base URL
    ->setApiKey('ApiKeyAuth', 'your-api-key')  // API key
    ->setUserAgent('BuenaSDK-PHP/1.0.0');     // Custom user agent

// Custom HTTP client with timeout
$httpClient = new Client([
    'timeout' => 30,           // Request timeout in seconds
    'verify' => true,          // SSL verification
    'debug' => false,          // Debug mode
]);

// Create API instance
$apiInstance = new DefaultApi($httpClient, $config);

// Optional: Set custom headers
$config->setDefaultHeader('X-Custom-Header', 'CustomValue');

📋 Available Operations

Leads Management

  • $apiInstance->listLeads($limit, $offset) - List all leads with optional pagination
  • $apiInstance->createLead($createLeadRequest) - Create a new lead
  • $apiInstance->getLead($leadId) - Get a specific lead by ID
  • $apiInstance->updateLead($leadId, $updateLeadRequest) - Update an existing lead
  • $apiInstance->deleteLead($leadId) - Delete a lead

API Keys Management

  • $apiInstance->listApiKeys() - List all API keys
  • $apiInstance->createApiKey($createApiKeyRequest) - Create a new API key

Health Check

  • $apiInstance->healthCheck() - Check API status

🔗 Repository & Advanced Usage

For complete documentation, examples, and source code:

📁 PHP SDK Repository

Access the full SDK source code, advanced examples, and detailed documentation.

💡 Features

PSR-4 Autoloading - Full composer autoload support
Type Declarations - PHP 8.1+ type hints and return types
Error Handling - Comprehensive exception handling with detailed responses
HTTP Client Flexibility - Compatible with any PSR-18 HTTP client
Auto Updates - Automatically updated from OpenAPI spec via GitHub Actions
Production Ready - Battle-tested OpenAPI Generator with Guzzle HTTP client

🛠️ Error Handling

<?php
use Buena\SDK\ApiException;

try {
    $leads = $apiInstance->listLeads();

} catch (ApiException $e) {
    echo "API Exception: " . $e->getMessage() . PHP_EOL;

    // Handle specific HTTP status codes
    switch ($e->getCode()) {
        case 401:
            echo "Invalid API key - check your authentication" . PHP_EOL;
            break;
        case 429:
            echo "Rate limit exceeded - please retry later" . PHP_EOL;
            break;
        case 500:
            echo "Server error - please contact support" . PHP_EOL;
            break;
        default:
            echo "HTTP error {$e->getCode()}: {$e->getMessage()}" . PHP_EOL;
            break;
    }

    // Get detailed response information
    echo "Response Body: " . $e->getResponseBody() . PHP_EOL;
    echo "Response Headers: " . print_r($e->getResponseHeaders(), true) . PHP_EOL;

} catch (Exception $e) {
    echo "Unexpected error: " . $e->getMessage() . PHP_EOL;
}

📄 Working with Models

<?php
use Buena\SDK\Model\CreateLeadRequest;
use Buena\SDK\Model\Lead;

// Create a lead request object
$leadRequest = new CreateLeadRequest([
    'first_name' => 'John',
    'last_name' => 'Doe',
    'email' => 'john@example.com',
    'company' => 'Example Corp',
    'phone' => '+1234567890',
    'linkedin_url' => 'https://linkedin.com/in/johndoe'
]);

// Access properties
echo "Creating lead: " . $leadRequest->getFirstName() . " " . $leadRequest->getLastName() . PHP_EOL;
echo "Email: " . $leadRequest->getEmail() . PHP_EOL;

// Work with response models
$lead = $apiInstance->createLead($leadRequest);
if ($lead instanceof Lead) {
    echo "Lead ID: " . $lead->getId() . PHP_EOL;
    echo "Created at: " . $lead->getCreatedAt()->format('Y-m-d H:i:s') . PHP_EOL;
}

🔄 Pagination

<?php
// Paginate through leads
$limit = 50;  // Number of leads per page
$offset = 0;  // Starting offset

do {
    try {
        $response = $apiInstance->listLeads($limit, $offset);

        if ($response && $response->getData()) {
            $leads = $response->getData();
            echo "Retrieved " . count($leads) . " leads" . PHP_EOL;

            // Process leads
            foreach ($leads as $lead) {
                echo "Lead: " . $lead->getFirstName() . " " . $lead->getLastName() . PHP_EOL;
            }

            // Check if there are more pages
            $hasMore = count($leads) == $limit;
            $offset += $limit;

        } else {
            break;
        }

    } catch (ApiException $e) {
        echo "Error retrieving leads: " . $e->getMessage() . PHP_EOL;
        break;
    }

} while ($hasMore);

🧪 Testing

Example PHPUnit test using the PHP SDK:

<?php
use PHPUnit\Framework\TestCase;
use Buena\SDK\Configuration;
use Buena\SDK\Api\DefaultApi;
use Buena\SDK\Model\CreateLeadRequest;
use GuzzleHttp\Client;

class BuenaSDKTest extends TestCase
{
    private DefaultApi $apiInstance;

    protected function setUp(): void
    {
        $config = Configuration::getDefaultConfiguration()
            ->setHost('https://api.buena.ai/api/v2')
            ->setApiKey('ApiKeyAuth', 'test-api-key');

        $this->apiInstance = new DefaultApi(new Client(), $config);
    }

    public function testCreateLead(): void
    {
        $createRequest = new CreateLeadRequest([
            'first_name' => 'Test',
            'last_name' => 'User',
            'email' => 'test@example.com'
        ]);

        $lead = $this->apiInstance->createLead($createRequest);

        $this->assertNotNull($lead);
        $this->assertEquals('test@example.com', $lead->getEmail());
        $this->assertEquals('Test', $lead->getFirstName());
        $this->assertEquals('User', $lead->getLastName());
    }

    public function testListLeads(): void
    {
        $response = $this->apiInstance->listLeads(10, 0);

        $this->assertNotNull($response);
        $this->assertIsArray($response->getData());
        $this->assertLessThanOrEqual(10, count($response->getData()));
    }
}

🔐 Authentication

<?php
// Using API key authentication
$config = Configuration::getDefaultConfiguration()
    ->setApiKey('ApiKeyAuth', 'your-api-key');

// Optional: Set API key prefix (e.g., "Bearer" for JWT tokens)
$config->setApiKeyPrefix('ApiKeyAuth', 'Bearer');

// Using custom headers for authentication
$config->setDefaultHeader('Authorization', 'Bearer your-jwt-token');
$config->setDefaultHeader('X-API-Key', 'your-api-key');

📊 Logging and Debugging

<?php
use GuzzleHttp\Client;
use GuzzleHttp\Middleware;
use GuzzleHttp\MessageFormatter;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// Setup logging
$logger = new Logger('buena-sdk');
$logger->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG));

// Create HTTP client with logging middleware
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push(Middleware::log($logger, new MessageFormatter(MessageFormatter::DEBUG)));

$httpClient = new Client(['handler' => $stack]);

// Use with API instance
$apiInstance = new DefaultApi($httpClient, $config);

🆘 Support