hookbridge/hookbridge-php

Official PHP SDK for HookBridge - Webhook Delivery & Retry Service

Maintainers

Package info

github.com/hookbridge/hookbridge-php

Homepage

pkg:composer/hookbridge/hookbridge-php

Statistics

Installs: 11

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.8.0 2026-04-18 14:07 UTC

This package is auto-updated.

Last update: 2026-04-18 14:08:54 UTC


README

Official PHP SDK for HookBridge. Send webhooks with guaranteed delivery, automatic retries, and inbound/outbound observability.

Installation

composer require hookbridge/hookbridge-php

Quick Start

<?php

use HookBridge\HookBridge;

$client = new HookBridge('hb_live_xxxxxxxxxxxxxxxxxxxx');

$endpoint = $client->createEndpoint(
    url: 'https://customer.app/webhooks',
    description: 'Customer production webhook',
);

$result = $client->send(
    endpointId: $endpoint->id,
    payload: ['event' => 'order.created'],
);

echo $result->messageId . PHP_EOL;

Outbound Endpoints

$endpoint = $client->createEndpoint(
    url: 'https://customer.app/webhooks',
    description: 'Main production webhook',
    rateLimitRps: 10,
    burst: 20,
);

$details = $client->getEndpoint($endpoint->id);
$list = $client->listEndpoints(limit: 50);
$rotated = $client->rotateEndpointSecret($endpoint->id);
$client->deleteEndpoint($endpoint->id);

Sending and Observability

$result = $client->send(
    endpointId: $endpoint->id,
    payload: ['event' => 'user.created', 'user_id' => 'usr_123'],
    idempotencyKey: 'user-123-created',
);

$message = $client->getMessage($result->messageId);
$logs = $client->getLogs(limit: 100);
$metrics = $client->getMetrics();
$timeseries = $client->getTimeseriesMetrics(endpointId: $endpoint->id);

$client->replay($message->id);
$client->replayAllMessages('failed_permanent', $endpoint->id, 50);

Inbound Webhooks

$inbound = $client->createInboundEndpoint(
    url: 'https://myapp.com/webhooks/inbound',
    name: 'Stripe inbound',
    description: 'Receives Stripe events through HookBridge',
    verifyStaticToken: true,
    tokenHeaderName: 'X-Webhook-Token',
    tokenValue: 'my-shared-secret',
    signingEnabled: true,
    idempotencyHeaderNames: ['X-Idempotency-Key'],
    ingestResponseCode: 202,
);

echo $inbound->ingestUrl . PHP_EOL;   // Save this
echo $inbound->secretToken . PHP_EOL; // Only shown once

$details = $client->getInboundEndpoint($inbound->id);
$client->pauseInboundEndpoint($inbound->id);
$client->resumeInboundEndpoint($inbound->id);

$client->updateInboundEndpoint($inbound->id, [
    'verify_hmac' => true,
    'hmac_header_name' => 'X-Signature',
    'hmac_secret' => 'whsec_inbound_secret',
]);

Inbound Observability

$inboundEndpoints = $client->listInboundEndpoints(limit: 50);
$inboundLogs = $client->getInboundLogs(inboundEndpointId: $inbound->id, limit: 50);
$inboundMetrics = $client->getInboundMetrics(inboundEndpointId: $inbound->id);
$inboundTimeseries = $client->getInboundTimeseriesMetrics(inboundEndpointId: $inbound->id);
$rejections = $client->listInboundRejections(inboundEndpointId: $inbound->id, limit: 25);

Billing and Exports

$subscription = $client->getSubscription();
$usage = $client->getUsageHistory(limit: 12, offset: 0);
$invoices = $client->getInvoices(limit: 12);

$export = $client->createExport(
    startTime: new DateTimeImmutable('-24 hours'),
    endTime: new DateTimeImmutable('now'),
    endpointId: $endpoint->id,
);

$downloadUrl = $client->downloadExport($export->id);