PHPackages                             whisperr/php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. whisperr/php

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

whisperr/php
============

Whisperr server-side SDK for PHP (with Laravel support) — reliable churn-signal event tracking.

00PHP

Since Jun 13Pushed todayCompare

[ Source](https://github.com/WhisperrAI/whisperr-php)[ Packagist](https://packagist.org/packages/whisperr/php)[ RSS](/packages/whisperr-php/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

whisperr-php
============

[](#whisperr-php)

The Whisperr **server-side** SDK for PHP, with first-class Laravel support — reliable churn-signal event tracking for any PHP backend. The backend is where the highest-signal churn events live (payment failures, cancellations, trial expiry, usage drops), so this is where Whisperr gets its most valuable signal.

```
composer require whisperr/php
```

Laravel
-------

[](#laravel)

The service provider and `Whisperr` facade auto-register via package discovery. Set your key and (optionally) publish the config:

```
php artisan vendor:publish --tag=whisperr-config
```

```
# .env
WHISPERR_API_KEY=wrk_...
```

```
use Whisperr\Laravel\Facades\Whisperr;

// In a controller — source the user id explicitly:
Whisperr::track(auth()->id(), 'plan_upgraded', ['plan' => 'pro']);

// In a Stripe webhook / job — use the id from your domain data:
Whisperr::track($subscription->user_id, 'payment_failed', ['amount_cents' => 4900]);

// Associate traits / contact channels:
Whisperr::identify(auth()->id(), ['traits' => ['plan' => 'pro'], 'email' => $user->email]);
```

Events are buffered during the request and flushed **after the response is sent**(via the app's `terminating` hook), so tracking adds no latency to the response.

Plain PHP
---------

[](#plain-php)

```
use Whisperr\Whisperr;

$whisperr = new Whisperr(['api_key' => getenv('WHISPERR_API_KEY')]);

$whisperr->track('user_8842', 'subscription_cancelled', ['reason' => 'card_declined']);

$whisperr->flush(); // also auto-flushes on shutdown
```

The user id (`external_user_id`) is **always explicit** — the server has no session to infer it from. Pass the same id you use everywhere else for that user, and frontend + backend events land on one timeline automatically.

Design
------

[](#design)

- **Same wire contract as the other Whisperr SDKs.** Events post to `/v1/events/batch`, identities to `/v1/identify`, authenticated with `X-API-Key`.
- **Request-friendly.** Events buffer in memory and deliver in a batch on `flush()` — automatically after the Laravel response (or on shutdown). Retries are bounded so request teardown never hangs.
- **Reliable.** Batching, retry with backoff, 429/5xx retry, 401/403 stop, malformed-4xx drop, per-event idempotency key.
- **No Composer dependencies.** Uses ext-curl + ext-json only.

Options (plain-PHP constructor)
-------------------------------

[](#options-plain-php-constructor)

KeyDefaultNotes`api_key`—App ingestion key (`wrk_…`). Required.`base_url``https://api.whisperr.net`Ingestion base URL.`flush_at``100`Auto-flush when this many events are buffered.`max_batch_size``500`Events per batch (hard backend cap is 500).`max_retries``3`Retries before giving up a batch.`request_timeout``10.0`Per-request timeout (seconds).`disabled``false`No-op client (useful in tests).`debug``false`Verbose logging via `error_log`.`on_error`—`callable(WhisperrError): void` for observability.---

Whisperr — predict churn, automate interventions, recover revenue. [whisperr.net](https://whisperr.net)

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/30412594?v=4)[ggent](/maintainers/ggent)[@ggent](https://github.com/ggent)

### Embed Badge

![Health badge](/badges/whisperr-php/health.svg)

```
[![Health](https://phpackages.com/badges/whisperr-php/health.svg)](https://phpackages.com/packages/whisperr-php)
```

###  Alternatives

[sitegeist/archaeopteryx

The missing link editor for Neos

2585.0k3](/packages/sitegeist-archaeopteryx)[heptacom/heptaconnect-portal-base

HEPTAconnect base dataset that every other portal is based on

1025.2k15](/packages/heptacom-heptaconnect-portal-base)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
