AI
Pass

PHP Integration Examples

Overview

These examples show how to integrate AI Pass into PHP applications using the JavaScript SDK for authentication and PHP for server-side API calls.

Live Example: View working PHP demo

Login Page (index.php)

Handle OAuth authentication using the AI Pass SDK:

<?php
$isLoggingOut = isset($_GET['logout']) && $_GET['logout'] === '1';
?>
<!DOCTYPE html>
<html>
<body>
    <h1>AI Pass OAuth2 Example</h1>

    <div id="login-section">
        <button onclick="login()">Login with AI Pass</button>
    </div>

    <script src="https://aipass.one/aipass-sdk.js"></script>
    <script>
        AiPass.initialize({
            clientId: 'your_client_id',
            scopes: ['api:access', 'profile:read']
        });

        // Handle logout
        const isLoggingOut = <?php echo $isLoggingOut ? 'true' : 'false'; ?>;
        if (isLoggingOut) {
            AiPass.logout().finally(() => {
                window.location = 'index.php';
            });
        }

        // Redirect to dashboard after login
        document.addEventListener('aipass:login', redirectToDashboard);
        if (AiPass.isAuthenticated()) redirectToDashboard();

        function redirectToDashboard() {
            const token = AiPass.getAccessToken();
            const form = document.createElement('form');
            form.method = 'POST';
            form.action = 'dashboard.php';

            const input = document.createElement('input');
            input.type = 'hidden';
            input.name = 'access_token';
            input.value = token;

            form.appendChild(input);
            document.body.appendChild(form);
            form.submit();
        }

        async function login() {
            await AiPass.login();
        }
    </script>
</body>
</html>

Dashboard (dashboard.php)

Use the access token to call AI Pass APIs from PHP:

Session Management & Logout

<?php
session_start();

// Store token from POST
if (!isset($_SESSION['access_token']) && isset($_POST['access_token'])) {
    $_SESSION['access_token'] = $_POST['access_token'];
}

// Redirect if not authenticated
if (!isset($_SESSION['access_token'])) {
    header('Location: index.php');
    exit();
}

$token = $_SESSION['access_token'];

// Handle logout
if (isset($_POST['logout'])) {
    session_destroy();
    header('Location: index.php?logout=1');
    exit();
}
?>

API Call Helper Function

function callAiPassAPI($endpoint, $method, $token, $data = null) {
    $ch = curl_init('https://aipass.one' . $endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json'
    ]);

    if ($method === 'POST') {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    }

    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

Get User Profile

$userInfo = callAiPassAPI('/oauth2/userinfo', 'GET', $token);
$userName = $userInfo['name'] ?? $userInfo['email'] ?? 'Unknown';
$userEmail = $userInfo['email'] ?? '';

Get User Balance

$balance = callAiPassAPI('/api/v1/usage/me/summary', 'GET', $token);
$remainingBudget = $balance['data']['remainingBudget'] ?? 0;
$maxBudget = $balance['data']['maxBudget'] ?? 0;

echo "Balance: $" . number_format($remainingBudget, 2) .
     " / $" . number_format($maxBudget, 2);

Call Chat Completion API

if (isset($_POST['prompt']) && !empty($_POST['prompt'])) {
    $result = callAiPassAPI('/oauth2/v1/chat/completions', 'POST', $token, [
        'model' => 'gemini/gemini-2.5-flash-lite',
        'messages' => [
            ['role' => 'user', 'content' => $_POST['prompt']]
        ],
        'temperature' => 0.7,
        'max_tokens' => 1000
    ]);

    $completionResult = $result['choices'][0]['message']['content'] ??
                       'Error: No response from API';

    echo htmlspecialchars($completionResult);
}

More Resources

Using Claude Code, Cursor, or another AI agent?

Drop the AI Pass skill into your agent and skip the manual setup. Works with Claude Code, Codex, Cursor, OpenCode, and 38+ other agents.

npx skills add aipass-one/skill

Two skills available: aipass-api (personal use) and aipass-oauth-app (for app builders).

Stuck? We're happy to help on Discord

Active Discord community with the AI Pass team. Get unblocked on integration, ask about models, share what you're building.

Join AI Pass Discord