<div align="center">

<img src="assets/banner.png" alt="Evercatch" width="800">

<br/>
<br/>

<img src="https://img.shields.io/badge/STATUS-ALPHA-red?style=flat-square&labelColor=000" alt="ALPHA">
&nbsp;
<img src="https://img.shields.io/badge/BETA-JUNE%202026-orange?style=flat-square&labelColor=000" alt="Beta June 2026">
&nbsp;
<img src="https://img.shields.io/badge/CLOSED%20SOURCE-111?style=flat-square&labelColor=000" alt="Closed Source">

<br/>
<br/>

### Webhook infrastructure that just works.

**One endpoint. Any provider. Reliable delivery.**

Point every webhook at Evercatch. We capture, normalize, and forward them to your app — with retries, history, and zero glue code.

<br/>

[Join the Beta](#-join-the-beta) &nbsp;·&nbsp; [Roadmap](ROADMAP.md) &nbsp;·&nbsp; [Docs](https://docs.evercatch.dev) &nbsp;·&nbsp; [Status](https://status.evercatch.dev) &nbsp;·&nbsp; [Pricing](#-pricing)

</div>

<br/>

> [!WARNING]
> **Evercatch is in active ALPHA development and is not production-ready.** Most external links (docs, dashboard, API, blog) will not be live until the beta launch. Interested in early access? Reach out at [contact@evercatch.dev](mailto:contact@evercatch.dev).

---

## The Problem

You're wiring up Stripe, SendGrid, GitHub, Shopify — all at once. Each one speaks a different language:

- Different payload schemas
- Different signature verification methods
- Different retry semantics
- No single place to debug, search, or replay events

**You're writing glue code instead of shipping features.**

## The Fix

```
Your Providers  →  Evercatch  →  Your App
```

Point every webhook at a single Evercatch endpoint. We handle the rest:

- **Normalize** every payload to a unified schema
- **Validate** signatures so you don't have to
- **Store** events with configurable retention (24h → 90 days)
- **Forward** to your destination with automatic retries and exponential backoff
- **Replay** any event from your dashboard in seconds

---

## Quick Start

### 1. Create an account

```bash
curl -X POST https://api.evercatch.dev/api/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email": "you@example.com",
    "full_name": "Your Name",
    "country": "IE"
  }'
```

```json
{
  "user": { "id": "550e8400-e29b-...", "email": "you@example.com" },
  "api_key": { "api_key": "ec_live_abc123...", "prefix": "ec_live_abc1" },
  "subscription": { "tier": "sandbox", "status": "active" }
}
```

### 2. Point your webhook provider at Evercatch

```
https://api.evercatch.dev/api/v1/webhooks/{provider}/{your-user-id}
```

Configure Stripe in 30 seconds:
1. Open [Stripe Dashboard → Webhooks](https://dashboard.stripe.com/webhooks)
2. Add endpoint → paste your Evercatch URL
3. Add header: `X-API-Key: ec_live_abc123...`
4. Select events → done

### 3. Register a destination

```bash
curl -X POST https://api.evercatch.dev/api/v1/destinations \
  -H "X-API-Key: ec_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My API",
    "url": "https://yourapp.com/webhooks",
    "providers": ["stripe"],
    "event_types": ["payment.*"]
  }'
```

Evercatch now receives, normalizes, stores, and forwards every matching event — automatically retrying on failure.

### Or use a native SDK

```python
# Python
from evercatch import Evercatch

ec = Evercatch("ec_live_abc123...")
ec.destinations.create(
    name="My API",
    url="https://yourapp.com/webhooks",
    providers=["stripe"],
    event_types=["payment.*"],
)
```

```typescript
// Node.js / TypeScript
import { Evercatch } from "@evercatch/sdk";

const ec = new Evercatch("ec_live_abc123...");
await ec.destinations.create({
  name: "My API",
  url: "https://yourapp.com/webhooks",
  providers: ["stripe"],
  eventTypes: ["payment.*"],
});
```

---

## Integrations

We are launching with major integrations from day one, with more coming after beta.

| Provider | Incoming Webhooks | Signature Verification | Normalized Schema |
|----------|:-----------------:|:---------------------:|:-----------------:|
| **Stripe** | ✅ | ✅ | ✅ |
| **More at launch** | ✅ | ✅ | ✅ |

> New integrations are tracked in [ROADMAP.md](ROADMAP.md). Want to see a specific provider? [Request it here](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2ffeature_request.yml).

---

## SDKs

Native, idiomatic clients for your language — all built on the same REST API.

| Language | Package | Status |
|----------|---------|--------|
| **Python** | `pip install evercatch` | Launching with beta |
| **Node.js / TypeScript** | `npm install @evercatch/sdk` | Launching with beta |
| **Go** | `go get github.com/evercatch/evercatch-go` | Launching with beta |
| **Ruby** | `gem install evercatch` | Launching with beta |

All SDKs support the full API surface: destinations, event history, replays, and API key management.

---

## CLI

A first-class CLI tool ships at launch for local development workflows.

```bash
# Install
npm install -g @evercatch/cli

# Authenticate
ec auth login

# Forward live events to your local server during development
ec listen --forward http://localhost:3000/webhooks

# Replay a past event
ec events replay evt_01j9x...

# Inspect recent events
ec events list --provider stripe --limit 20
```

The CLI is designed to replace `ngrok` style tunnelling for webhook development — no tunnels needed, just replay and inspect from your terminal.

---

## Pricing

| Plan | Price | Events / mo | Retention | Destinations | Overage |
|------|-------|-------------|-----------|--------------|---------|
| **Sandbox** | Free | 100k | 24 hours | 2 | — |
| **Indie** | €29 / mo | 1M | 7 days | 10 | €0.50 / 100k |
| **Studio** | €99 / mo | 10M | 30 days | Unlimited | €0.30 / 100k |
| **Enterprise** | €299 / mo | 50M | 90 days | Unlimited | €0.20 / 100k |

<details>
<summary>What's included in each plan</summary>

<br/>

**All plans**
- Unlimited API keys
- Real-time event forwarding
- Automatic retries with exponential backoff
- 99.9% uptime SLA
- Email support

**Studio and above**
- Full-text event search
- Advanced filtering
- Event replay
- Custom retention windows

**Enterprise**
- Priority support + dedicated Slack channel
- Custom SLAs and contracts
- SSO / SAML
- Custom retention and event volume

</details>

[Start Free →](https://evercatch.dev/signup) &nbsp;·&nbsp; [View Full Pricing →](https://evercatch.dev/pricing)

---

## Join the Beta

> We are preparing for **beta launch in June 2026** *(tentative)*. See [ROADMAP.md](ROADMAP.md) for details.

We're looking for early developers to test the platform before public launch. Sign up, try it out, and share honest feedback — we'll set you up with a **free Indie or higher subscription** account for the duration of testing.

**To join the beta developer list:**

Send an email to [contact@evercatch.dev](mailto:contact@evercatch.dev) with the subject line **`Beta Dev List`** and a short description of your use case.

We'll follow up with access details as we get closer to launch.

---

## Reference

<details>
<summary>Found a bug?</summary>

<br/>

**[→ Open a Bug Report](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2fbug_report.yml)**

Include: steps to reproduce · expected vs actual behaviour · your subscription tier · event IDs if applicable.

Do **not** include API keys or sensitive data in public issues.

</details>

<details>
<summary>Have a feature request?</summary>

<br/>

**[→ Open a Feature Request](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2ffeature_request.yml)**

Tell us what problem it solves, how you'd use it, and which tier it matters most for.

</details>

<details>
<summary>Security vulnerability?</summary>

<br/>

**Do not open a public issue.**

Email [security@evercatch.dev](mailto:security@evercatch.dev) — we respond within 24 hours. See [SECURITY.md](SECURITY.md) for our full disclosure policy and bug bounty details.

</details>

<details>
<summary>Need help?</summary>

<br/>

- [docs.evercatch.dev](https://docs.evercatch.dev) — full documentation
- [support@evercatch.dev](mailto:support@evercatch.dev) — email support
- [billing@evercatch.dev](mailto:billing@evercatch.dev) — billing questions
- [Open a support ticket →](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2fsupport_request.yml)

</details>

<details>
<summary>Legal</summary>

<br/>

[Terms of Service](https://evercatch.dev/terms) &nbsp;·&nbsp; [Privacy Policy](https://evercatch.dev/privacy) &nbsp;·&nbsp; [SLA](https://evercatch.dev/sla) &nbsp;·&nbsp; [Acceptable Use](https://evercatch.dev/acceptable-use)

Community: [Code of Conduct](CODE_OF_CONDUCT.md) — report violations to [conduct@evercatch.dev](mailto:conduct@evercatch.dev)

</details>

---

<div align="center">

<br/>

**No webhook left behind.**

<br/>

[evercatch.dev](https://evercatch.dev) &nbsp;·&nbsp; [status.evercatch.dev](https://status.evercatch.dev) &nbsp;·&nbsp; [contact@evercatch.dev](mailto:contact@evercatch.dev)

</div>
