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.

v0.1.1(1mo ago)01MITPHPPHP &gt;=8.1CI passing

Since Jun 15Pushed 1mo agoCompare

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

READMEChangelogDependencies (2)Versions (3)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 in-process.** Batching, retry with backoff (429/5xx), malformed-4xx drop, per-event idempotency key. On `401/403` or exhausted retries, the failed batch stays buffered and is retried on the next `flush()` rather than being dropped. The buffer lives for the request only — it is not crash-durable.
- **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

34

—

LowBetter than 75% of packages

Maintenance91

Actively maintained with recent releases

Popularity1

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

42d ago

### Community

Maintainers

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

---

Top Contributors

[![GGENT10](https://avatars.githubusercontent.com/u/99209571?v=4)](https://github.com/GGENT10 "GGENT10 (6 commits)")

---

Tags

laraveleventstrackinganalyticschurnretentionwhisperr

###  Code Quality

TestsPHPUnit

### 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

[cornford/googlitics

An easy way to integrate Google Analytics with Laravel.

3310.2k](/packages/cornford-googlitics)[classiebit/eventmie

Run your own Events business with Eventmie Pro. Use it as event ticket selling website or event management platform on your own domain.

1892.0k](/packages/classiebit-eventmie)

PHPackages © 2026

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