开源免费 · MIT 协议 · 可自托管

别再猜 Webhook
到底发来了什么

一个地址,接住所有回调。实时查看每一次请求的方法、请求头、请求体与来源,把「回调没生效」变成「一眼就看清」。

  • 无需注册,30 秒接入
  • 支持任意 HTTP 方法与子路径
  • 敏感请求头自动脱敏
适用于各种回调来源
StripeGitHubShopifySlack TwilioVercelPayPalDiscord
7×
HTTP 方法全覆盖
256bit
端点 Token 熵
512KB
请求体上限可配
0¥
开源自托管成本
FEATURES

调试 Webhook 该有的,这里都有

从接收、检查到清理,覆盖回调联调的完整链路,而不是只给你一个 RequestBin。

任意请求,照单全收

GET / POST / PUT / PATCH / DELETE 全支持,多级子路径与查询参数原样保留,不挑调用方。

完整请求快照

请求头、查询串、Content-Type、来源 IP、UA、原始请求体,一条不落地存下来。

JSON 与二进制都能看

JSON 自动格式化并保留解析副本,文本 UTF-8 存储,二进制 Base64 无损保存。

安全默认开启

Token 仅存 SHA-256 哈希,Authorization / Cookie 等敏感头入库前脱敏,管理接口独立鉴权。

检索、分页与统计

按端点、方法、时间筛选,分页浏览历史,一眼看清请求量趋势与活跃端点。

自动过期清理

定时任务按保留天数清理历史,支持每个端点单独覆盖,设为 0 即永久保留。

HOW IT WORKS

三步,从零到看见请求

不需要 SDK、不需要账号、不改一行业务代码。

01

创建一个端点

起个名字,系统生成带 256-bit 随机 Token 的唯一 Webhook 地址。

POST /api/v1/endpoints
02

把地址填给调用方

粘贴到 Stripe、GitHub 或任意平台的回调配置里,也可以直接用 curl 发一条。

POST /hook/<token>
03

实时检查与排查

在收件箱里查看完整请求详情,定位签名、字段、编码或重试问题。

GET /api/v1/events/:id
LIVE DEMO

别只听我们说,现在就发一条

无需注册。生成一个临时地址,用下面任意方式发送 HTTP 请求,右侧收件箱会实时出现结果。

01 · 生成临时端点 PUBLIC
  1. 点击按钮,创建一个 30 分钟有效的临时端点
  2. 复制地址,用 curl 或「发送示例请求」调用它
  3. 右侧收件箱自动刷新,点开即可查看完整快照
02 · 实时收件箱 LIVE 0

还没有收到请求

生成地址并发送一条,结果会出现在这里
想要完整能力?打开控制台管理端点、轮换 Token、筛选历史与查看统计。 打开控制台 ↗
DEVELOPER FIRST

干净、可预测的 REST API

统一响应结构、标准状态码、完整 OpenAPI 3.1 文档,接进你的脚本或 CI 都很容易。

# 创建一个端点
curl -X POST https://your-domain/api/v1/endpoints \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"stripe-payments"}'

# 查看最近收到的请求
curl https://your-domain/api/v1/events?limit=20 \
  -H "Authorization: Bearer $ADMIN_TOKEN"
const res = await fetch('/api/v1/endpoints', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'stripe-payments' }),
})

const { data } = await res.json()
console.log(data.webhook_url, data.token)
import requests

r = requests.post(
    'https://your-domain/api/v1/endpoints',
    headers={'Authorization': 'Bearer ' + token},
    json={'name': 'stripe-payments'},
)
r.raise_for_status()
print(r.json()['data']['webhook_url'])
interface Endpoint {
  id: string
  name: string
  enabled: boolean
  request_count: number
}

async function listEndpoints(token: string): Promise<Endpoint[]> {
  const res = await fetch('/api/v1/endpoints', {
    headers: { Authorization: 'Bearer ' + token },
  })
  const body = await res.json()
  return body.data.items as Endpoint[]
}

常用接口

  • POST/api/v1/endpoints创建端点
  • GET/api/v1/endpoints端点列表
  • POST/hook/:token/*接收 Webhook
  • GET/api/v1/events事件列表(筛选/分页)
  • GET/api/v1/events/:id事件详情
  • DELETE/api/v1/events/:id删除事件
  • GET/api/v1/stats统计概览
  • GET/api/v1/openapi.jsonOpenAPI 3.1 文档
阅读完整 API 文档 ↗
USE CASES

哪里需要回调,哪里就用得上

一个通用收件箱,覆盖日常开发里最常踩的几类坑。

01

支付与订单回调

核对 Stripe / PayPal 真实推送的字段、签名头与重试行为,不用反复翻平台日志。

02

CI / Git 事件

在本地调试 GitHub、GitLab 的 push / PR webhook,看清 payload 结构再写处理逻辑。

03

第三方集成联调

给合作方一个临时地址,确认他们到底发了什么、发了几次、编码对不对。

04

本地开发无公网 IP

免去内网穿透,部署一份就能从任何地方接收并回看请求。

OPEN SOURCE

代码是你的,数据也是你的

MIT 协议开源。既能一键部署到 Vercel 做展示,也能用 Cloudflare Workers + D1 跑一套带持久化的生产实例。

FAQ

常见问题

这个在线演示的数据会保存多久?

首页 Live Demo 使用公开的临时端点,30 分钟后自动失效,数据仅保存在内存中、冷启动即清空,且任何拿到地址的人都能查看。请勿发送真实或敏感数据。正式使用请自托管。

与 RequestBin / Webhook.site 有什么不同?

核心能力相近,但本项目完全开源可自托管,数据留在你自己的 Cloudflare D1 或服务器里;同时提供端点管理、Token 轮换、保留策略与 OpenAPI 文档,方便接进内部工具链。

生产环境需要付费吗?

不需要。主方案运行在 Cloudflare Workers + D1 免费额度内,不需要 Workers Paid 功能。本演示站点可部署在 Vercel 免费计划。

Token 和敏感信息怎么处理?

端点 Token 是 256-bit 随机值,数据库只保存 SHA-256 哈希,明文仅在创建或轮换时返回一次。Authorization、Cookie 等敏感请求头在入库前就会被替换为 [redacted]。

支持多大的请求体?可以永久保留吗?

默认上限 512 KB,可通过 MAX_BODY_SIZE 调整,超限返回 413。默认按 RETENTION_DAYS 定时清理;把单个端点的 retention_days 设为 0 即可跳过自动清理。

准备好看清下一个 Webhook 了吗?

不用注册,从上面的在线演示开始;满意了再花五分钟部署一份自己的。