UltraHook is the simplest way to receive webhooks behind a firewall.
Webhooks are HTTP requests made over the web by services when certain events are triggered within the services. Many popular services (GitHub, Stripe, ActiveCampaign, etc) support updates via webhooks. However, since these webhook requests are made over the public web, it's difficult receive them when testing from behind a firewall. This is where UltraHook comes in - it provides you a public endpoint to give to other services and tunnels requests to a private endpoint on your computer.
You download and run the UltraHook client on your computer. It connects to UltraHook servers in the cloud and creates a tunnel from a public endpoint on our servers to your computer. Any HTTP POST requests sent to the public end point will be sent through the tunnel an delivered to a private endpoint accessible from your computer.
UltraHook receives HTTP POST requests at it's public endpoint. It then serializes the requests into a custom format and sends them to a connected client, where it's deserialized and delivered to a private endpoint.
Communication between client and server is over a persistent uni-directional (inbound) streaming HTTPS connection.
No. UltraHook does not cache requests in any way. Furthermore, it always responds with a status code of 200.
No. UltraHook only forwards HTTP POST requests from it's public endpoint to your private endpoint. It does not tunnel any responses back out to the public endpoint. All responses at the public end point have a status code of 200 and a blank body.
UltraHook solves one simple problem very well - it makes it super easy to receive webhooks behind a firewall. It does this with minimal overhead and with little fuss.
Yes. Both public and private endpoints support HTTPS. This means that you can provide an HTTPS url to someone that sends webhook requests. It also means the UltraHook client can deliver requests over HTTPS.
Currently, the client is available as a Ruby gem. It will run on any platform that can run Ruby.
It can be installed from RubyGems.org as follows:
$ gem install ultrahook
There are two required parameters: source hostname and destination. An optional API key can be provided:
$ ultrahook [-k <key>] <subdomain> <destination>
Although the api key is an optional parameter, it's still required. It can either be provided on the command line, in the ULTRAHOOK_API_KEY environment variable or via a configuration file. The configuration file can be setup as follows:
echo "api_key: 0pMcxt1yJrTjUBrGabXrezCRzGRjPsig" > ~/.ultrahook
The destination format is quite flexible. Any of the following are acceptable (and will resolve to the address in parenthesis):
5000 (http://localhost:5000) localhost:5000 (http://localhost:5000) another.machine.com (http://another.machine.com:80) http://localhost:5000 (http://localhost:5000) http://another.machine.com/path (http://another.machine.com:80/path)
Signup for an account and an API key will be emailed to you. We don't really have any form of account management (yet), so all we're really doing is associating a namespace and api key with your email address. If you lose your API key, use this form to get it resent. If your API key is compromised, drop an email to email@example.com to get a new one generated.
The API key gives you a exclusive namespace. All endpoints you create will be subdomains under your own namespace. This ensures that you can always reconnect to the same endpoints at some point in the future.
Your account is associated with a specific namespace and any endpoint you create will be placed under that namespace. A namespace is just a prefix.
If you registered your account with the bob namespace and later created an endpoint named stripe, it would be located at bob-stripe.ultrahook.com.
In theory, you would just login and get your API key. But since we don't have any way to login just yet, head over here to have your API key resent by email.