PHPackages                             reliably/reliably - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. reliably/reliably

ActiveLibrary[HTTP &amp; Networking](/categories/http)

reliably/reliably
=================

Privacy-preserving third-party API benchmarks—wrap Stripe/OpenAI clients or stack Guzzle monitor middleware so aggregate latency/errors surface faster than uptime pages.

v0.1.1(2mo ago)01MITPHPPHP &gt;=8.1

Since May 10Pushed 2mo agoCompare

[ Source](https://github.com/ZurabWeb/reliably-php)[ Packagist](https://packagist.org/packages/reliably/reliably)[ RSS](/packages/reliably-reliably/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

`reliably/reliably`
===================

[](#reliablyreliably)

Reliably turns **your outbound API usage**—Stripe, OpenAI, webhooks—into **live, crowd-derived latency and outcome signals** everyone benefits from sharing. **`Reliably::wrap()`** proxies typed clients with provider detection; **`monitorGuzzle()`** (opt-in) adds Guzzle middleware so **hostname + pathname** reach ingest (never bodies or secrets).

**Privacy:** hashed project identifiers by default; Guzzle taps never capture bodies or `Authorization` for Reliably payloads. See **[`PRIVACY.md`](./PRIVACY.md)**.

**Runs where PHP runs:** FPM / Apache register shutdown flushing; Laravel queues and long workers should call **`flush()`** on a timer or between jobs.

```
composer require reliably/reliably
```

Quick Start
-----------

[](#quick-start)

```
use Reliably\Reliably;

$stripe = Reliably::wrap(new \Stripe\StripeClient(getenv('STRIPE_SECRET_KEY')));
$openai = Reliably::wrap(new \OpenAI\Client(getenv('OPENAI_API_KEY')));

$charge = $stripe->charges->create(['amount' => 2000, 'currency' => 'usd']);
// Use $openai the same way you would the underlying OpenAI client.
```

Aggregates surface at [reliably.dev](https://reliably.dev) and [reliably.sh](https://reliably.sh).

With Project ID
---------------

[](#with-project-id)

```
use Reliably\Reliably;

$reliably = new Reliably(['projectId' => 'proj_xxx']);
$stripe = $reliably->wrapClient(new \Stripe\StripeClient(getenv('STRIPE_SECRET_KEY')));
```

What Gets Tracked
-----------------

[](#what-gets-tracked)

ModeWhat you sendNotes**`wrap()` / `wrapClient()`**Curated **provider**, method-chain **endpoint**, status, latency, error class, `resolution: wrap`Proxy via `WrappedClient`; no raw URLs.**`monitorGuzzle()`****Hostname** + pathname-only **endpoint**, method, status, latency; optional unknown hostsIngest maps host → **provider** and `resolution` (`registry` / `fallback`).**Never sent:** bodies, secret-bearing headers, or **URLs with query strings**.

Supported Providers (`wrap`)
----------------------------

[](#supported-providers-wrap)

Fingerprints include (among others):

- Stripe · OpenAI · Anthropic · Twilio · SendGrid · Resend · Supabase · Firebase · AWS · GitHub · Shopify · Slack

Unrecognized clients fall back to namespace / short class name heuristics.

Outbound Monitoring (`monitorGuzzle()`)
---------------------------------------

[](#outbound-monitoring-monitorguzzle)

PHP path is **Guzzle `HandlerStack` middleware** (not global monkey-patching):

```
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use Reliably\Reliably;

$reliably = new Reliably(['projectId' => 'proj_xxx']);
$stack = HandlerStack::create();
$reliably->monitorGuzzle($stack, reportUnknown: false);

$client = new Client(['handler' => $stack]);
// outbound requests through $client emit pathname + host slices to ingest
```

Requires **`guzzlehttp/guzzle` ^7.8** (declared in this package). **`wrap()`** does not require Guzzle in *your* app code.

Configuration
-------------

[](#configuration)

```
$reliably = new Reliably([
    'projectId'    => 'proj_xxx',    // optional
    'endpoint'     => 'https://...', // custom ingest (self-hosted)
    'maxBatchSize' => 100,           // max events before flush
    'enabled'      => true,          // disable in tests
    'debug'        => false,         // log to error_log
]);
```

How Flushing Works
------------------

[](#how-flushing-works)

- **Web SAPI (FPM / mod\_php):** `register_shutdown_function()` flushes at end of request.
- **Long-running workers:** call **`$reliably->flush()`** manually or on a timer (queues, ReactPHP, Swoole, etc.).

Design Principles
-----------------

[](#design-principles)

- **Never crash** — telemetry paths swallow failures where safe
- **Fire and forget** — ingest outages should not break user requests
- **Transparent `wrap()`** — same method chains as the underlying SDK

Other Language SDKs
-------------------

[](#other-language-sdks)

- **JavaScript / TypeScript:** [`@reliablydev/sdk`](https://www.npmjs.com/package/@reliablydev/sdk) — `npm install @reliablydev/sdk`
- **Python:** [`reliably-sdk`](https://pypi.org/project/reliably-sdk/) — `pip install reliably-sdk`

Requirements
------------

[](#requirements)

- PHP 8.1+
- **`guzzlehttp/guzzle` ^7.8** for `monitorGuzzle()` only

License
-------

[](#license)

MIT

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance85

Actively maintained with recent releases

Popularity1

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

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 ~0 days

Total

2

Last Release

76d ago

### Community

Maintainers

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

---

Top Contributors

[![ZurabWeb](https://avatars.githubusercontent.com/u/12236085?v=4)](https://github.com/ZurabWeb "ZurabWeb (5 commits)")

---

Tags

apimonitoringGuzzlestripeopenaireliabilitybenchmarksthird-party-apisoutbound-http

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

###  Alternatives

[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

293.1k](/packages/eslazarev-wildberries-sdk)[xeroapi/xero-php-oauth2

Xero official PHP SDK for oAuth2 generated with OpenAPI spec 3

1054.7M18](/packages/xeroapi-xero-php-oauth2)[meteocontrol/vcom-api-client

HTTP Client for meteocontrol's VCOM API - The VCOM API enables you to directly access your data on the meteocontrol platform.

188.0k1](/packages/meteocontrol-vcom-api-client)

PHPackages © 2026

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