Webhooks from Slack, Stripe, GitHub and more

A webhook is another service calling your site when something happens: a payment goes through, someone types a Slack command, a pull request opens. On Tessryx it lands on a route of your site, and a workflow decides what to do with it.

Before that workflow runs, Tessryx checks that the request was signed by the service you named, with the signing secret you stored. Anything unsigned or forged gets a 401, so your logic only ever sees the real thing.

Try it

Send a webhook to a verified route

Service

Sent by

Signed with the signing secret, the one you stored.

The request

POST https://acme.tessryx.app/hooks/stripe

  • content-type: application/json
  • stripe-signature: signed when you press Sendchecked, not passed on

{"id":"evt_1Q8xYz","type":"payment_intent.succeeded","data":{"object":{"id":"pi_3Q8xYz","amount":2000,"currency":"usd"}}}

What happens

Press Send to deliver it to the route.

Signed in your browser with each service's real scheme and a made-up secret, then checked the way the route checks it. Nothing leaves this page.

How it works

  1. 01

    Store the signing secret

    Copy it from the service into Secrets: Stripe's whsec_ key, your Slack app's Signing Secret, a GitHub hook's Secret. From then on it can't be read back.

  2. 02

    Add verify to a POST route

    Name the service and the secret on a route that takes POST only. Your AI can set this up for you.

  3. 03

    Point the service at the address

    Paste the route's address into the service's webhook settings. Slack's and Discord's setup checks are answered for you.

Questions

Which services work?

Slack, Discord, Stripe, GitHub, GitLab and Shopify, plus any sender that follows Standard Webhooks, which covers Svix, Clerk, Resend, OpenAI and others.

Can I see the secret?

No. Secrets are write-only: once saved, the dashboard shows only the last four characters, and the workflow that handles the webhook never sees the value either.

What if my work takes longer than a few seconds?

Reply right away and finish in the background. Senders retry a slow reply, Slack and Discord after about 3 seconds and others after about 10, so the workflow answers at once and hands the long part to the next run of a chain.

Does it work on the free plan?

Yes, on every plan. Each webhook that runs your workflow uses credits like any other run.

Under the hood

The technical details

verify.provider
slack, discord, stripe, github, gitlab, shopify or standard_webhooks (Svix, Clerk, Resend, OpenAI and others).
verify.secret
The stored secret holding the signing secret. Neither the route nor the workflow ever sees its value; the signature is checked over the body exactly as it arrived.
401
An unsigned or wrongly signed request is refused before the workflow runs. The route takes POST only and has no sign-in gate.
handshakes
Slack's url_verification and Discord's PING are answered for you.
request.headers
Only the service's delivery headers, like x-github-event, x-shopify-topic or x-slack-retry-num. Never the signing headers.
body
JSON or form-encoded, as Slack slash commands send. Slack's payload field arrives already parsed.
retries
Senders retry a slow reply, Slack and Discord after about 3 seconds and others after about 10. Reply at once and hand longer work to continue_with.
A Stripe webhook route that records each event
{
  "workflow": "payments/record@published",
  "methods": ["POST"],
  "input_mode": "transform",
  "input_transform": "{ \"type\": body.type, \"id\": body.id }",
  "verify": { "provider": "stripe", "secret": "stripe-signing-secret" }
}

More highlights

Give your AI somewhere to build.

Free to start, no credit card. Bring the AI you already use.

Start building for free