PHP code example of captur / events
1. Go to this page and download the library: Download captur/events library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
captur / events example snippets
use Captur\Client;
$client = new Client(apiKey: getenv('CAPTUR_API_KEY'));
// 1. Register an event type (once per project)
$client->eventTypes()->create([
'name' => 'vehicle.entered',
'description' => 'Vehicle entered a car park',
]);
// 2. Ingest an event
$event = $client->events()->create([
'type' => 'vehicle.entered',
'stream' => 'vehicle:AB12XYZ',
'data' => [
'car_park_id' => 'teeside-central',
'barrier' => 'north',
],
]);
echo $event['id'];
$client = new Client(
apiKey: getenv('CAPTUR_API_KEY'),
baseUrl: 'https://captur.events', // default host
version: 'v1', // default API version
);
$event = $client->events()->create([
'type' => 'vehicle.entered',
'stream' => 'vehicle:AB12XYZ',
'occurred_at' => '2026-08-01T08:45:00Z',
'idempotency_key' => 'entry-AB12XYZ-2026-08-01T08:45',
'data' => ['car_park_id' => 'teeside-central'],
]);
$result = $client->events()->createMany([
['type' => 'vehicle.entered', 'stream' => 'vehicle:AB12XYZ', 'data' => []],
['type' => 'vehicle.exited', 'stream' => 'vehicle:AB12XYZ', 'data' => []],
]);
$client->events()->list([
'type' => 'vehicle.entered',
'stream' => 'vehicle:AB12XYZ',
'from' => '2026-08-01T00:00:00Z',
'to' => '2026-08-02T00:00:00Z',
]);
$client->events()->get('01KYY7S1ZGJ1DF8XG4X1RFHQ1S');
$client->events()->delete('01KYY7S1ZGJ1DF8XG4X1RFHQ1S');
$client->events()->deleteMany(['01A…', '01B…']);
$page = 1;
do {
$result = $client->events()->list([
'type' => 'vehicle.entered',
'limit' => 100,
'page' => $page,
]);
foreach ($result['data'] as $event) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 100];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->events()->list($query);
foreach ($result['data'] as $event) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$result = $client->events()->list([
'limit' => 100,
'starting_after' => '01J9X2K8M3N4P5Q6R7S8T9V0W1',
]);
$client->eventTypes()->list();
$client->eventTypes()->get('vehicle.entered');
$client->eventTypes()->update('vehicle.entered', [
'description' => 'Updated description',
]);
$client->eventTypes()->delete('vehicle.entered');
$page = 1;
do {
$result = $client->eventTypes()->list([
'limit' => 50,
'page' => $page,
]);
foreach ($result['data'] as $eventType) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 50];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->eventTypes()->list($query);
foreach ($result['data'] as $eventType) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$client->streams()->get('vehicle:AB12XYZ');
$client->streams()->delete('vehicle:AB12XYZ');
$page = 1;
do {
$result = $client->streams()->get('vehicle:AB12XYZ', [
'limit' => 100,
'page' => $page,
]);
foreach ($result['events'] as $event) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 100];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->streams()->get('vehicle:AB12XYZ', $query);
foreach ($result['events'] as $event) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$result = $client->streams()->get('vehicle:AB12XYZ', [
'limit' => 100,
'starting_after' => '01J9X2K8M3N4P5Q6R7S8T9V0W1',
]);
$client->reports()->sessions([
'start_type' => 'session.started',
'end_type' => 'session.ended',
'from' => '2026-08-01T00:00:00Z',
'to' => '2026-08-02T00:00:00Z',
]);
$page = 1;
do {
$result = $client->reports()->sessions([
'start_type' => 'session.started',
'end_type' => 'session.ended',
'from' => '2026-08-01T00:00:00Z',
'to' => '2026-08-02T00:00:00Z',
'limit' => 50,
'page' => $page,
]);
foreach ($result['data'] as $session) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = [
'start_type' => 'session.started',
'end_type' => 'session.ended',
'from' => '2026-08-01T00:00:00Z',
'to' => '2026-08-02T00:00:00Z',
'limit' => 50,
];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->reports()->sessions($query);
foreach ($result['data'] as $session) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$client->webhooks()->create([
'url' => 'https://example.com/hooks/captur',
'event_types' => ['vehicle.entered'],
]);
$client->webhooks()->list();
$client->webhooks()->get('wh_…');
$client->webhooks()->update('wh_…', ['enabled' => false]);
$client->webhooks()->delete('wh_…');
$page = 1;
do {
$result = $client->webhooks()->list([
'limit' => 50,
'page' => $page,
]);
foreach ($result['data'] as $webhook) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 50];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->webhooks()->list($query);
foreach ($result['data'] as $webhook) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$client->alerts()->list();
$client->alerts()->create(['name' => 'High dwell']);
$client->alerts()->get('al_…');
$client->alerts()->update('al_…', ['name' => 'Updated']);
$client->alerts()->delete('al_…');
$page = 1;
do {
$result = $client->alerts()->list([
'limit' => 50,
'page' => $page,
]);
foreach ($result['data'] as $alert) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 50];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->alerts()->list($query);
foreach ($result['data'] as $alert) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
$client->projections()->list();
$client->projections()->create(['name' => 'occupancy']);
$client->projections()->get('pr_…');
$client->projections()->update('pr_…', ['name' => 'Updated']);
$client->projections()->delete('pr_…');
$client->projections()->replay('pr_…');
$page = 1;
do {
$result = $client->projections()->list([
'limit' => 50,
'page' => $page,
]);
foreach ($result['data'] as $projection) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$page++;
} while ($hasMore);
$cursor = null;
do {
$query = ['limit' => 50];
if ($cursor !== null) {
$query['cursor'] = $cursor;
}
$result = $client->projections()->list($query);
foreach ($result['data'] as $projection) {
// …
}
$hasMore = $result['meta']['has_more'] ?? false;
$cursor = $result['meta']['next_cursor'] ?? null;
} while ($hasMore && $cursor !== null);
use Captur\Webhook;
$payload = $request->getContent(); // raw body — CAPTUR_WEBHOOK_SECRET');
if (! Webhook::verify($payload, $signature, $secret)) {
http_response_code(401);
exit('Invalid signature');
}
$event = json_decode($payload, true, flags: JSON_THROW_ON_ERROR);
use Captur\Exceptions\CapturException;
try {
$client->events()->create([/* … */]);
} catch (CapturException $e) {
echo $e->getMessage(); // human message
echo $e->code(); // e.g. invalid_api_key
echo $e->type(); // e.g. authentication_error
echo $e->status(); // HTTP status
}