Open-source · Self-hosted · African Fintech

Webhook infrastructure for fintech developers.

A self-hosted gateway for Paystack webhooks — with Flutterwave and Monnify coming soon. Normalised ingestion, guaranteed delivery, automatic retries, and AI-powered failure diagnostics.

Get started freeSign inView on GitHub
hooklens · events
Live
All EventsFailedRetryingQueued
StatusProviderDestinationAttemptsLatencyReceived
DeliveredPaystackapi.acme.io/hooks1124ms2s ago
DeliveredFlutterwaveapi.acme.io/hooks198ms14s ago
FailedMonnifystaging.acme.io/webhooks52m ago
RetryingPaystackapi.acme.io/hooks3412ms5m ago
PaystackFlutterwaveMoniepointBachsClerkResendPaystackFlutterwaveMoniepointBachsClerkResendPaystackFlutterwaveMoniepointBachsClerkResend

Capabilities

Infrastructure for the full webhook lifecycle

FIG 0.1

Authentication

Signatures verified automatically

Paystack HMAC-SHA512 signatures are verified per-endpoint before events enter your queue. More providers arriving soon.

FIG 0.2

Observability

AI-assisted failure diagnostics

Instant insights into why a delivery failed — analyzing headers, payloads, and downstream server responses.

FIG 0.3

Resilience

Zero-downtime event replays

Replay failed events individually or in bulk. Original timestamps and payload integrity preserved.

FIG 0.4

Reliability

Automatic exponential backoff

Configurable retry policies handle transient network errors and downstream server restarts gracefully.

FIG 0.5

Visibility

Real-time delivery logs

Filter events by provider, status, or date range. Search payloads and headers with zero indexing delay.

FIG 0.6

Development

Secure local development tunnels

Receive webhooks on localhost without exposing your machine to the public internet.

Developer Experience

Zero configuration. Total visibility.

Inspect headers, drill into JSON payloads, understand exactly why a delivery failed.

Events /evt_3d8c2a5eFailed
{
  "event": "charge.success",
  "data": {
    "id": 302961,
    "status": "success",
    "reference": "trx_1v9k0h8z23",
    "amount": 10000,
    "currency": "NGN",
    "channel": "card",
    "gateway_response": "Successful",
    "paid_at": "2023-10-24T14:22:01.000Z",
    "customer": {
      "id": 84312,
      "email": "customer@example.com",
      "customer_code": "CUS_x902ks"
    }
  }
}
Diagnostic

The destination returned 502 Bad Gateway. Your reverse proxy is reachable, but the upstream application appears unresponsive.

Delivery History

Attempt 52h ago
502Max retries reached
Attempt 43h ago
502Backoff +8m
Attempt 117h ago
502Initial delivery

Integrations

Works with your entire stack

Sources

Paystack

Live

Nigeria · Africa

Flutterwave

Coming soon

Monnify

Coming soon

HookLens Gateway

Destinations

Express

Node.js

Next.js

Node.js

NestJS

Node.js

Fastify

Node.js

Hono

TypeScript

FastAPI

Python

Pricing

Open source and transparent

Open Source

$0

/forever

  • Self-host anywhere
  • Unlimited events
  • Paystack (live)
  • Flutterwave & Monnify (coming soon)
  • BullMQ async delivery
  • AI diagnostics (BYOK)
Coming soon

Cloud

Soon

/managed

  • Fully managed
  • 90-day retention
  • Email support
  • Usage analytics
  • Priority queues

Enterprise

Custom

/annually

  • Custom retention
  • SLA guarantees
  • Dedicated support
  • Custom integrations
  • Audit logs

FAQs

Is HookLens really free?

Yes. The core gateway is open-source under the MIT license, free to self-host forever. You bring your own infrastructure.

Which payment providers are supported right now?

Paystack is fully supported today with HMAC-SHA512 signature verification. Flutterwave and Monnify are on the roadmap and will be released soon.

What does self-hosted mean exactly?

You run HookLens on your own servers or any cloud VM. You control the data, the code, and the infrastructure.

Do I need Redis and Postgres?

Yes. HookLens uses BullMQ for the delivery queue (Redis) and Postgres for event storage. Both are supported everywhere.

What is AI failure diagnostics?

When a delivery fails, HookLens sends error context to an LLM to generate a plain-English explanation. You provide your own API key.