Deploy webhook listeners.

Write your handler. Deploy it. Get a secure HTTPS URL.

We handle the URL, HTTPS, logs, and request history.

Perfect for.

GitHub events.

Trigger builds, run tests, or deploy on every push.

Payment events.

Handle Stripe, PayPal, and payment webhooks instantly.

Third party integrations.

Connect with Slack, Twilio, SendGrid, whatever you use.

Event driven workflows.

React to any external event in real time.

How it works.

Step 01

Write your handler.

Create an HTTP endpoint that processes webhook payloads.

Step 02

Deploy to Tokay.

git push tokay. We give you a secure HTTPS URL automatically.

Step 03

Configure the webhook.

Paste your Tokay URL into GitHub, Stripe, or your favorite service.

Step 04

Receive events.

Webhooks hit your endpoint. Every request shows up in the dashboard.

Just write your handler.

Focus on the events. We handle HTTPS, uptime, and request history.

Node.js webhook

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
const secret = process.env.WEBHOOK_SECRET;

app.use(express.json());

app.post('/webhook', (req, res) => {
  if (!secret || req.get('x-webhook-secret') !== secret) {
    return res.sendStatus(401);
  }

  console.log('event received', req.body.type);
  res.sendStatus(204);
});

app.listen(port);

Python webhook

import os
from flask import Flask, request

app = Flask(__name__)

@app.post('/webhook')
def webhook():
    secret = os.getenv('WEBHOOK_SECRET')
    if not secret or request.headers.get('X-Webhook-Secret') != secret:
        return 'Unauthorized', 401

    event = (request.get_json(silent=True) or {}).get('type')
    print('event received', event)
    return '', 204

if __name__ == '__main__':
    port = int(os.getenv('PORT', '5000'))
    app.run(host='0.0.0.0', port=port)

Go webhook

package main

import (
    "log"
    "net/http"
    "os"
)

func webhook(w http.ResponseWriter, r *http.Request) {
    secret := os.Getenv("WEBHOOK_SECRET")
    if secret == "" || r.Header.Get("X-Webhook-Secret") != secret {
        http.Error(w, "unauthorized", http.StatusUnauthorized)
        return
    }

    log.Println("event received")
    w.WriteHeader(http.StatusNoContent)
}

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }

    http.HandleFunc("/webhook", webhook)
    log.Fatal(http.ListenAndServe(":"+port, nil))
}

Deploy this and you get a URL like https://your-app.tokay.app/webhook. Paste it into the webhook config and you're live.

Security tips.

Verify the sender.

Most providers include a signature or shared secret. Check it before processing payloads.

Store secrets safely.

Keep webhook secrets in the dashboard, not in your code. We inject them at runtime.

What we handle for you.

Automatic HTTPS.

Every webhook URL is HTTPS by default. Certificates are automatic and always renewed.

Request history.

See every webhook request in the dashboard, including the detected source. Debug from one place.

Zero-config deploys.

No nginx, no load balancers, no reverse proxies. Push your code and get a URL.

All set for live traffic.

Write your endpoint. We give you a secure HTTPS URL. That's the deal.