Hookport
Webhook infrastructure for developers

Catch, reshape, and route any webhook — without the glue code.

Hookport is a programmable webhook relay. Point any sender at a durable URL, transform the payload with a pipeline, then forward it, sink it straight to a database, or drop it in an inbox — and trace every hop in your own observability stack.

pay-events · hook
# any sender POSTs to your hook URL
curl https://hookport.com/h/pay_9x2k \
  -d '{"event":"payment.succeeded","amount":4200}'

# pipeline: normalize → forward → trace
{
  "amount": "42.00",
  "currency": "USD",
  "large": false
}

Everything between "webhook received" and "job done".

Stop writing throwaway relay services. Hookport gives you the whole pipeline as configuration.

Catch any webhook

Every hook gets a durable URL. Sync or async delivery, redirect-following, retries, and full request/response history you can replay.

Transform, no deploys

Chain steps in a live editor: JMESPath, jq, Liquid, sandboxed JavaScript, or bring-your-own LLM. Preview against real payloads before you ship.

Sinks & databases

Skip forwarding entirely: write rows straight to ClickHouse (or your DB) through a pluggable adapter, with Rails-style migrations per connection.

Ready-made receivers

Normalize Sentry, Airbrake and OpenTelemetry (traces, metrics, logs) into clean, flat shapes with one-click sample pipelines.

Self-observability

Emit an OpenTelemetry trace of every hook — receive → transform → deliver, with timing and status — to your own OTLP collector.

Email → webhook

Point an address at a hook and inbound email becomes a JSON payload your pipeline can parse, route, and turn into structured documents.

Pipelines are just steps you can read.

A pipeline is an ordered chain of transformations. Each step reshapes the payload and passes it on — filter with a condition, compute in JavaScript, extract with jq or JMESPath, template with Liquid, or hand it to an LLM. The last step can forward the result, insert it into a database, or emit tags that route the document to another inbox.

  • Live preview against sample payloads
  • Sandboxed JavaScript with hard timeouts
  • ReDoS-guarded regex helpers
  • Reusable, composable pipelines
step: JavaScript
export default (payload) => ({
  amount: (payload.amount / 100).toFixed(2),
  currency: "USD",
  large: payload.amount >= 10000,
  tags: ["finance"],
})

Live in three steps.

01

Create a hook

You get a durable receive URL instantly. Pick sync or async, or make it a sink that only stores what it receives.

02

Attach a pipeline

Build the transformation chain in the editor and preview it against a sample payload. Choose a target, a database, or an inbox.

03

Point your sender

Paste the URL into Stripe, GitHub, Sentry — anything. Watch deliveries, response codes and timings, and trace them in your own tools.

Tame your webhooks.

One durable URL, a pipeline you can read, and a delivery log you can trust.