{"id":51192941,"url":"https://github.com/resend/resend-webhooks-ingester","last_synced_at":"2026-06-27T17:30:28.857Z","repository":{"id":339733109,"uuid":"1135123733","full_name":"resend/resend-webhooks-ingester","owner":"resend","description":"A boilerplate example on how to ingest Resend's webhooks and send them to your preferred database","archived":false,"fork":false,"pushed_at":"2026-05-27T14:01:16.000Z","size":166,"stargazers_count":41,"open_issues_count":3,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T19:35:42.454Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/resend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-15T17:10:23.000Z","updated_at":"2026-05-27T14:02:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/resend/resend-webhooks-ingester","commit_stats":null,"previous_names":["resend/resend-webhooks-ingester"],"tags_count":4,"template":true,"template_full_name":null,"purl":"pkg:github/resend/resend-webhooks-ingester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resend%2Fresend-webhooks-ingester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resend%2Fresend-webhooks-ingester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resend%2Fresend-webhooks-ingester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resend%2Fresend-webhooks-ingester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/resend","download_url":"https://codeload.github.com/resend/resend-webhooks-ingester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resend%2Fresend-webhooks-ingester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34862627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T17:30:28.050Z","updated_at":"2026-06-27T17:30:28.830Z","avatar_url":"https://github.com/resend.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Resend Webhooks Ingester\n\nA self-hosted webhook ingester for [Resend](https://resend.com) that stores email, contact, and domain events in your database. Built with Next.js for easy deployment to Vercel or your preferred hosting platform. [Learn more about storing webhooks data](https://resend.com/docs/dashboard/webhooks/how-to-store-webhooks-data)\n\n## Deploy\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/resend/resend-webhooks-ingester\u0026env=RESEND_WEBHOOK_SECRET\u0026envDescription=Your%20Resend%20webhook%20signing%20secret\u0026envLink=https://resend.com/webhooks)\n[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/cd2lvJ?referralCode=w2CHHM\u0026utm_medium=integration\u0026utm_source=template\u0026utm_campaign=generic)\n[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/resend/resend-webhooks-ingester)\n\nOr use [Docker](#docker): `docker pull ghcr.io/resend/resend-webhooks-ingester`\n\n## Table of Contents\n\n- [Features](#features)\n- [Supported Databases](#supported-databases)\n- [Supported Event Types](#supported-event-types)\n- [Quick Start](#quick-start)\n- [Database Setup](#database-setup)\n- [Running Locally](#running-locally)\n- [Development \u0026 Testing](#development--testing)\n- [Deployment](#deployment)\n- [Configuring Resend Webhooks](#configuring-resend-webhooks)\n- [API Reference](#api-reference)\n- [Data Retention](#data-retention)\n- [Troubleshooting](#troubleshooting)\n\n## Features\n\n- Receives and verifies Resend webhooks using Svix signatures\n- Stores all webhook events in your database (append-only log)\n- Supports all Resend event types: emails, contacts, and domains\n- Idempotent event storage (duplicate webhooks are safely ignored)\n- Type-safe with full TypeScript support\n- Multiple database connectors available\n\n## Supported Databases\n\n| Connector | Endpoint | Best For |\n|-----------|----------|----------|\n| [Supabase](#supabase) | `/supabase` | Quick setup with managed Postgres |\n| [PostgreSQL](#postgresql) | `/postgresql` | Self-hosted or managed Postgres (Neon, Railway, Render) |\n| [Neon](#neon) | `/neon` | Serverless environments (Vercel, Netlify, Cloudflare) |\n| [MySQL](#mysql) | `/mysql` | Self-hosted or managed MySQL |\n| [PlanetScale Postgres](#planetscale-postgres) | `/postgresql` | Serverless Postgres |\n| [PlanetScale MySQL](#planetscale-mysql) | `/planetscale` | Serverless MySQL |\n| [MongoDB](#mongodb) | `/mongodb` | Document database (Atlas, self-hosted) |\n| [Snowflake](#snowflake) | `/snowflake` | Data warehousing and analytics |\n| [BigQuery](#bigquery) | `/bigquery` | Google Cloud analytics |\n| [ClickHouse](#clickhouse) | `/clickhouse` | High-performance analytics |\n\n## Supported Event Types\n\n### Email Events\n| Event | Description |\n|-------|-------------|\n| `email.sent` | Email accepted by Resend, delivery attempted |\n| `email.delivered` | Email successfully delivered to recipient |\n| `email.delivery_delayed` | Temporary delivery issue |\n| `email.bounced` | Email permanently rejected |\n| `email.complained` | Recipient marked email as spam |\n| `email.opened` | Recipient opened the email |\n| `email.clicked` | Recipient clicked a link in the email |\n| `email.failed` | Email failed to send |\n| `email.scheduled` | Email scheduled for future delivery |\n| `email.suppressed` | Email suppressed by Resend |\n| `email.received` | Inbound email received |\n\n### Contact Events\n| Event | Description |\n|-------|-------------|\n| `contact.created` | Contact added to an audience |\n| `contact.updated` | Contact information updated |\n| `contact.deleted` | Contact removed from an audience |\n\n### Domain Events\n| Event | Description |\n|-------|-------------|\n| `domain.created` | Domain added to Resend |\n| `domain.updated` | Domain configuration updated |\n| `domain.deleted` | Domain removed from Resend |\n\n## Quick Start\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/resend/resend-webhooks-ingester.git\ncd resend-webhooks-ingester\n```\n\n### 2. Install dependencies\n\n```bash\npnpm install\n```\n\n### 3. Set up environment variables\n\n```bash\ncp .env.example .env.local\n```\n\nEdit `.env.local` with your Resend webhook secret and database credentials (see [Database Setup](#database-setup)).\n\n### 4. Create database tables\n\nRun the appropriate schema file for your database from the `schemas/` directory.\n\n### 5. Deploy and configure webhook\n\nDeploy to Vercel (or your preferred platform) and configure your webhook endpoint in the [Resend Dashboard](https://resend.com/webhooks).\n\n## Database Setup\n\n### Supabase\n\n**Environment Variables:**\n```env\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\n```\n\n**Schema:** Run `schemas/supabase.sql` in the Supabase SQL Editor.\n\n**Endpoint:** `POST /supabase`\n\n---\n\n### PostgreSQL\n\nWorks with any PostgreSQL database: self-hosted, Neon, Railway, Render, etc.\n\n**Environment Variables:**\n```env\nPOSTGRESQL_URL=postgresql://user:password@host:5432/database\n```\n\n**Schema:** Run `schemas/postgresql.sql` in your database.\n\n**Endpoint:** `POST /postgresql`\n\n---\n\n### Neon\n\nRecommended for serverless environments (Vercel, Netlify, Cloudflare). For long-running servers, use the PostgreSQL connector instead.\n\n**Environment Variables:**\n```env\nNEON_DATABASE_URL=postgresql://user:password@ep-xyz.us-east-1.aws.neon.tech/database?sslmode=require\n```\n\n**Schema:** Run `schemas/postgresql.sql` in your Neon database.\n\n**Endpoint:** `POST /neon`\n\n---\n\n### MySQL\n\n**Environment Variables:**\n```env\nMYSQL_URL=mysql://user:password@host:3306/database\n```\n\n**Schema:** Run `schemas/mysql.sql` in your database.\n\n**Endpoint:** `POST /mysql`\n\n---\n\n### PlanetScale Postgres\n\n**Environment Variables:**\n```env\nPOSTGRESQL_URL=postgresql://username:password@host:5432/postgres?sslmode=verify-full\n```\n\nGet your connection string from the PlanetScale dashboard under **Connect \u003e Create role**.\n\n**Schema:** Run `schemas/postgresql.sql` in your PlanetScale database.\n\n**Endpoint:** `POST /postgresql`\n\n---\n\n### PlanetScale MySQL\n\n**Environment Variables:**\n```env\nPLANETSCALE_URL=mysql://username:password@host/database?ssl={\"rejectUnauthorized\":true}\n```\n\nGet your connection string from the PlanetScale dashboard under **Connect \u003e Create password**.\n\n**Schema:** Run `schemas/mysql.sql` in your PlanetScale database.\n\n**Endpoint:** `POST /planetscale`\n\n---\n\n### MongoDB\n\nWorks with MongoDB Atlas, self-hosted MongoDB, or any MongoDB-compatible database.\n\n**Environment Variables:**\n```env\nMONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/?retryWrites=true\u0026w=majority\nMONGODB_DATABASE=resend_webhooks\n```\n\nGet your connection string from your MongoDB Atlas dashboard or construct it for your self-hosted instance.\n\n**Schema:** Run `schemas/mongodb.js` using mongosh:\n```bash\nmongosh \"your-connection-string\" schemas/mongodb.js\n```\n\nOr execute the commands manually in MongoDB Compass or Atlas.\n\n**Endpoint:** `POST /mongodb`\n\n---\n\n### Snowflake\n\n**Environment Variables:**\n```env\nSNOWFLAKE_ACCOUNT=your-account-identifier\nSNOWFLAKE_USERNAME=your-username\nSNOWFLAKE_PASSWORD=your-password\nSNOWFLAKE_DATABASE=your-database\nSNOWFLAKE_SCHEMA=your-schema\nSNOWFLAKE_WAREHOUSE=your-warehouse\n```\n\n**Schema:** Run `schemas/snowflake.sql` in a Snowflake worksheet.\n\n**Endpoint:** `POST /snowflake`\n\n---\n\n### BigQuery\n\n**Environment Variables:**\n```env\nBIGQUERY_PROJECT_ID=your-project-id\nBIGQUERY_DATASET_ID=your-dataset-id\n# Optional: Service account credentials as JSON string\nBIGQUERY_CREDENTIALS={\"type\":\"service_account\",\"project_id\":\"...\"}\n```\n\nIf running on Google Cloud (Cloud Run, GKE), you can omit `BIGQUERY_CREDENTIALS` and use default application credentials.\n\n**Schema:** Run `schemas/bigquery.sql` in the BigQuery console (replace `YOUR_DATASET` with your dataset ID).\n\n**Endpoint:** `POST /bigquery`\n\n---\n\n### ClickHouse\n\n**Environment Variables:**\n```env\nCLICKHOUSE_URL=https://your-instance.clickhouse.cloud:8443\nCLICKHOUSE_USERNAME=default\nCLICKHOUSE_PASSWORD=your-password\nCLICKHOUSE_DATABASE=default\n```\n\n**Schema:** Run `schemas/clickhouse.sql` in your ClickHouse client.\n\n**Endpoint:** `POST /clickhouse`\n\n---\n\n## Running Locally\n\nStart the development server:\n\n```bash\npnpm dev\n```\n\nThe webhook endpoints will be available at `http://localhost:3000/{connector}`.\n\nFor local testing, expose your server using [ngrok](https://ngrok.com):\n\n```bash\nngrok http 3000\n```\n\nUse the ngrok URL (e.g., `https://abc123.ngrok.io/supabase`) as your webhook endpoint in Resend.\n\n## Development \u0026 Testing\n\n### Running Tests Locally\n\nThe project includes integration tests for MongoDB, PostgreSQL, MySQL, and ClickHouse that run with Docker.\n\n**Cloud-only connectors** (require real accounts, not run in CI):\n- **Supabase** - Requires real Supabase project credentials\n- **Neon** - Requires a Neon database and connection string\n- **PlanetScale** - Requires real PlanetScale account (uses same schema as MySQL)\n- **Snowflake** - Requires real Snowflake account\n- **BigQuery** - Requires real GCP project\n\n**1. Start databases with Docker Compose:**\n\n```bash\ndocker compose up -d\n```\n\n**2. Apply schemas to test databases:**\n\n```bash\npnpm db:setup\n```\n\n**3. Start the dev server with test environment:**\n\n```bash\npnpm dev:test\n```\n\n**4. Run tests (in another terminal):**\n\n```bash\npnpm test\n```\n\nOr run tests for a specific connector:\n\n```bash\npnpm test:mongodb\npnpm test:supabase\npnpm test:postgresql\npnpm test:neon\npnpm test:mysql\npnpm test:clickhouse\n```\n\n### Test Environment\n\nTests use `.env.test` for configuration. The `dev:test` script loads this file automatically via dotenv-cli.\n\n### Testing Cloud Connectors (Supabase, PlanetScale, etc.)\n\nTo test cloud connectors like Supabase:\n\n1. Add your credentials to `.env.test`:\n```env\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=your-service-role-key\nSUPABASE_DB_URL=postgresql://postgres:password@db.your-project.supabase.co:5432/postgres\n```\n\n2. Run the schema setup (from Supabase SQL Editor or via CLI):\n```bash\npnpm db:setup --supabase\n```\n\n3. Run the tests:\n```bash\npnpm test:supabase\n```\n\n## Deployment\n\n### Docker\n\nPull the image from GitHub Container Registry:\n\n```bash\ndocker pull ghcr.io/resend/resend-webhooks-ingester:latest\n```\n\nRun with environment variables:\n\n```bash\ndocker run -p 3000:3000 \\\n  -e RESEND_WEBHOOK_SECRET=whsec_your_secret \\\n  -e MONGODB_URI=mongodb://host:27017 \\\n  -e MONGODB_DATABASE=resend_webhooks \\\n  ghcr.io/resend/resend-webhooks-ingester:latest\n```\n\nOr build locally:\n\n```bash\ndocker build -t resend-webhooks-ingester .\ndocker run -p 3000:3000 -e ... resend-webhooks-ingester\n```\n\n### Vercel\n\nUse the [deploy button](#deploy) above, or:\n\n1. Push your code to GitHub\n2. Import the repository in [Vercel](https://vercel.com)\n3. Add environment variables:\n   - `RESEND_WEBHOOK_SECRET` (required)\n   - Database-specific variables for your chosen connector\n4. Deploy\n\nYour webhook endpoint: `https://your-project.vercel.app/{connector}`\n\n### Other Platforms\n\nThis is a standard Next.js application:\n\n- **Netlify**: Use the Next.js runtime\n- **Railway**: Deploy directly from GitHub or use the deploy button above\n- **Render**: Use the deploy button above or connect your repo\n- **Fly.io**: Use the Dockerfile\n- **Google Cloud Run**: Build and deploy container\n- **Self-hosted**: Use Docker or `pnpm build \u0026\u0026 pnpm start`\n\n## Configuring Resend Webhooks\n\n1. Go to your [Resend Dashboard](https://resend.com/webhooks)\n2. Click **Add Webhook**\n3. Enter your webhook endpoint URL (e.g., `https://your-domain.com/supabase`)\n4. Select the events you want to receive\n5. Click **Create**\n6. Copy the **Signing Secret** and add it as `RESEND_WEBHOOK_SECRET`\n\n## Project Structure\n\n```\nsrc/\n├── app/\n│   ├── page.tsx              # Empty root page\n│   ├── supabase/route.ts     # Supabase connector\n│   ├── postgresql/route.ts   # PostgreSQL connector\n│   ├── neon/route.ts         # Neon serverless connector\n│   ├── mysql/route.ts        # MySQL connector\n│   ├── planetscale/route.ts  # PlanetScale connector\n│   ├── mongodb/route.ts      # MongoDB connector\n│   ├── snowflake/route.ts    # Snowflake connector\n│   ├── bigquery/route.ts     # BigQuery connector\n│   └── clickhouse/route.ts   # ClickHouse connector\n├── lib/\n│   ├── verify-webhook.ts     # Svix signature verification\n│   └── webhook-handler.ts    # Shared webhook handling logic\n├── types/\n│   └── webhook.ts            # TypeScript types for webhook payloads\n└── env.d.ts                  # Environment variable types\n\nschemas/\n├── supabase.sql              # Supabase/PostgreSQL schema\n├── postgresql.sql            # PostgreSQL schema\n├── mysql.sql                 # MySQL/PlanetScale schema\n├── mongodb.js                # MongoDB schema and indexes\n├── snowflake.sql             # Snowflake schema\n├── bigquery.sql              # BigQuery schema\n└── clickhouse.sql            # ClickHouse schema\n\ntests/\n├── setup.ts                  # Test configuration\n├── helpers/\n│   ├── svix.ts               # Webhook signature generation\n│   ├── fixtures.ts           # Sample event payloads\n│   ├── db-clients.ts         # DB clients for assertions\n│   └── test-factory.ts       # Shared test cases\n└── integration/\n    ├── mongodb.test.ts\n    ├── supabase.test.ts\n    ├── postgresql.test.ts\n    ├── mysql.test.ts\n    └── clickhouse.test.ts\n```\n\n## API Reference\n\nAll connectors share the same API:\n\n### `POST /{connector}`\n\nReceives and stores Resend webhook events.\n\n**Required Headers:**\n- `svix-id`: Webhook message ID\n- `svix-timestamp`: Unix timestamp\n- `svix-signature`: HMAC signature\n\n**Responses:**\n| Status | Description |\n|--------|-------------|\n| `200` | Webhook processed successfully |\n| `400` | Missing headers or unknown event type |\n| `401` | Invalid webhook signature |\n| `500` | Server error (triggers Resend retry) |\n\n## Security Considerations\n\n- **Always verify webhook signatures** - The ingester rejects requests with invalid signatures\n- **Use environment variables** - Never commit secrets to your repository\n- **Use service role keys carefully** - Keys that bypass RLS should only be used server-side\n- **HTTPS only** - Always use HTTPS in production\n\n## Data Retention\n\nBy default, webhook events are stored **indefinitely**. This gives you complete historical data for analytics and auditing.\n\nIf you need to limit data retention, you can set up scheduled jobs to delete old events. Below are example queries to delete events older than a specified number of days.\n\n### PostgreSQL / Supabase\n\n```sql\n-- Delete email events older than 90 days\nDELETE FROM resend_wh_emails\nWHERE event_created_at \u003c NOW() - INTERVAL '90 days';\n\n-- Delete contact events older than 90 days\nDELETE FROM resend_wh_contacts\nWHERE event_created_at \u003c NOW() - INTERVAL '90 days';\n\n-- Delete domain events older than 90 days\nDELETE FROM resend_wh_domains\nWHERE event_created_at \u003c NOW() - INTERVAL '90 days';\n```\n\nFor Supabase, you can use [pg_cron](https://supabase.com/docs/guides/database/extensions/pg_cron) to schedule these queries.\n\n### MySQL / PlanetScale\n\n```sql\n-- Delete email events older than 90 days\nDELETE FROM resend_wh_emails\nWHERE event_created_at \u003c DATE_SUB(NOW(), INTERVAL 90 DAY);\n\n-- Delete contact events older than 90 days\nDELETE FROM resend_wh_contacts\nWHERE event_created_at \u003c DATE_SUB(NOW(), INTERVAL 90 DAY);\n\n-- Delete domain events older than 90 days\nDELETE FROM resend_wh_domains\nWHERE event_created_at \u003c DATE_SUB(NOW(), INTERVAL 90 DAY);\n```\n\n### BigQuery\n\n```sql\n-- Delete email events older than 90 days\nDELETE FROM `your_project.your_dataset.resend_wh_emails`\nWHERE event_created_at \u003c TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY);\n```\n\nYou can also set up [partition expiration](https://cloud.google.com/bigquery/docs/managing-partitioned-tables#partition-expiration) on your tables.\n\n### Snowflake\n\n```sql\n-- Delete email events older than 90 days\nDELETE FROM resend_wh_emails\nWHERE event_created_at \u003c DATEADD(day, -90, CURRENT_TIMESTAMP());\n```\n\nYou can use [Snowflake Tasks](https://docs.snowflake.com/en/user-guide/tasks-intro) to schedule cleanup.\n\n### ClickHouse\n\n```sql\n-- Delete email events older than 90 days\nALTER TABLE resend_wh_emails DELETE\nWHERE event_created_at \u003c now() - INTERVAL 90 DAY;\n```\n\nAlternatively, use [TTL expressions](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl) in your table definition for automatic cleanup.\n\n### MongoDB\n\n```javascript\n// Delete email events older than 90 days\ndb.resend_wh_emails.deleteMany({\n  event_created_at: { $lt: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) }\n});\n\n// Delete contact events older than 90 days\ndb.resend_wh_contacts.deleteMany({\n  event_created_at: { $lt: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) }\n});\n\n// Delete domain events older than 90 days\ndb.resend_wh_domains.deleteMany({\n  event_created_at: { $lt: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) }\n});\n```\n\nYou can also use [MongoDB Atlas scheduled triggers](https://www.mongodb.com/docs/atlas/app-services/triggers/scheduled-triggers/) or create a TTL index for automatic expiration.\n\n## Example Queries\n\nSee [`queries_examples.md`](./queries_examples.md) for useful analytics queries including:\n- Email status counts by day\n- Bounce rates\n- Open rates\n- Click-through rates\n- Contact growth tracking\n- Most clicked links\n\n## Troubleshooting\n\n### Webhooks not being received\n- Verify your endpoint URL is correct in Resend\n- Check that your server is publicly accessible\n- Ensure `RESEND_WEBHOOK_SECRET` matches the signing secret in Resend\n\n### Signature verification failing\n- Make sure you're using the raw request body for verification\n- Check that `RESEND_WEBHOOK_SECRET` is set correctly\n- Verify the webhook secret hasn't been rotated in Resend\n\n### Database insertion errors\n- Verify your database credentials are correct\n- Check that the schema has been applied\n- Review server logs for specific error messages\n\n### Snowflake connection issues\n- Verify your account identifier format (e.g., `xy12345.us-east-1`)\n- Ensure the warehouse is running and accessible\n- Check that the user has INSERT permissions on the tables\n\n### BigQuery errors\n- Verify the service account has BigQuery Data Editor role\n- Ensure the dataset and tables exist\n- Check that the project ID is correct\n\n## Resources\n\n- [Resend Webhooks Documentation](https://resend.com/docs/webhooks/introduction)\n- [Resend Event Types](https://resend.com/docs/webhooks/event-types)\n- [Verifying Webhook Signatures](https://resend.com/docs/webhooks/verify-webhooks-requests)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresend%2Fresend-webhooks-ingester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresend%2Fresend-webhooks-ingester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresend%2Fresend-webhooks-ingester/lists"}