SDK · PHP

Build on Bequest, in PHP.

Idiomatic client for the Bequest API. Same endpoints as REST, same idempotency, native error types.

Install

composer require bequest/bequest

Runtime

PHP 8.1+

Auth

Bearer token via BQ_KEY env var.

1. Initialize

Authenticate once.

<?php
use Bequest\Client;

$bq = new Client(api_key: getenv('BQ_KEY'));
2. Send a gift

One call. One dollar.

$gift = $bq->gifts->create([
    'from'         => 'usr_8f3...',
    'to'           => 'org_a91...',
    'amount_cents' => 2500,
    'memo'         => 'Spring drive',
], idempotencyKey: $requestId);

echo $gift->status; // 'settling'
3. Open a campaign

Hosted page in one POST.

$campaign = $bq->campaigns->create([
    'name'       => 'Spring Build-a-Well Drive',
    'goal_cents' => 7_500_000,
    'story'      => 'We are building 12 wells in...',
    'status'     => 'live',
]);
echo $campaign->url;
4. Open a pool

Standing commitments, batched annually.

$pool = $bq->pools->create([
    'name'                   => 'Cedar Block Mutual Aid',
    'flavor'                 => 'community',
    'legal_structure'        => 'mutual_aid',
    'distribution_mechanism' => 'threshold',
]);

$bq->pools->disburse($pool->id, [
    'to'           => 'usr_77...',
    'amount_cents' => 35000,
]);
5. Listen for webhooks

Signed payloads, replay-safe.

<?php
$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_BQ_SIGNATURE'] ?? '';

$event = Bequest\Webhooks::constructEvent(
    payload:   $payload,
    signature: $signature,
    secret:    getenv('BQ_WEBHOOK_SECRET'),
);

if ($event->type === 'gift.settled') {
    Ledger::write($event->data);
}
http_response_code(200);
echo json_encode(['received' => true]);
6. Handle errors

Typed by category.

use Bequest\Exception\{IdempotencyError, RateLimitError, AuthError};

try {
    $bq->gifts->create(/* ... */);
} catch (IdempotencyError $e) {
    // reuse existing gift
} catch (RateLimitError $e) {
    usleep($e->retryAfter * 1_000_000);
} catch (AuthError $e) {
    // rotate key
}
Reference

Full API docs.

The complete reference covers every resource, every parameter, every status code.

Open the API reference