PHP SDK
composer require keverd/keverd
curl and json.
Initialize + verify
<?php
use Keverd\Keverd;
$keverd = new Keverd([
'secretKey' => getenv('KEVERD_SECRET_KEY'), // kv_sk_…
]);
$result = $keverd->verify($eventId);
if (($result['action'] ?? null) === 'block') {
// reject
} elseif (($result['action'] ?? null) === 'allow') {
// continue
}
Laravel
use Keverd\Keverd;
use Illuminate\Http\Request;
Route::post('/login', function (Request $request) {
$keverd = new Keverd(['secretKey' => config('services.keverd.secret')]);
$risk = $keverd->verify($request->input('eventId'));
if (($risk['action'] ?? null) === 'block') {
return response()->json([
'error' => 'Blocked',
'reasons' => $risk['reasons'] ?? [],
], 403);
}
return ['ok' => true, 'visitorId' => $risk['visitor_id'] ?? null];
});
Webhooks
Route::post('/webhooks/keverd', function (Request $request) {
$keverd = new Keverd(['secretKey' => config('services.keverd.secret')]);
$event = $keverd->webhooks->constructEvent(
$request->getContent(), // raw body
$request->header('X-Keverd-Signature', ''),
config('services.keverd.webhook_secret'),
);
if ($event['type'] === 'verification.completed') {
$verification = $event['data']['object'];
}
return response()->noContent();
});
Keverd\Webhooks::constructEvent(...).