When you set a Request URL for Slack's Events API, Slack POSTs a one-time
url_verification event and requires your endpoint to respond with the
challenge value. Until then, Slack won't enable your subscription — a chicken-and-egg
problem when you just want to see the events first.
Create a bin, open its settings, and set the custom response:
200application/json{"challenge":"{{body.challenge}}"}{{body.challenge}} is a response template: it's replaced with the
challenge field from each incoming request's JSON body. When Slack sends its
verification event, your bin echoes the challenge back automatically — and captures the
event so you can look at it.
App settings → Event Subscriptions → Request URL → your
https://catchhook.catchhook.workers.dev/h/… URL. Slack shows Verified ✓ within a second.
Subscribe to some events (e.g. message.channels), and every event Slack sends
appears in your dashboard — full JSON, live. This is the fastest way to learn Slack's actual
payload shapes before writing your handler.
The same trick passes any echo-style handshake: Zoom's
endpoint.url_validation (echo {{body.payload.plainToken}}… plus its HMAC — for
that one, do the hash in your app), Dropbox's challenge query param
(body {{query.challenge}} with Content-Type text/plain), and most
"prove you own this URL" schemes. Template variables available:
{{body}}, {{body.a.b}}, {{query.x}},
{{header.x-foo}}, {{method}}, {{path}},
{{ip}}, {{timestamp}}, {{bin}} —
full template docs.
No signup needed. Or from your terminal: curl https://catchhook.catchhook.workers.dev/new