HTTP Bridge Webhook


The HTTP Webhook feature is available starting with Crossbar 0.11.0.

The HTTP Webhook Service broadcasts incoming HTTP/POST requests on a fixed WAMP topic.

Webhooks are a method of “push notification” used by services such as GitHub and BitBucket to notify other services when events have happened through a simple HTTP POST. The HTTP Webhook Service allows you to consume these events (providing it is accessible by the external service) through a WAMP PubSub channel (allowing potentially many things to occur from one webhook notification).

Try it

Clone the examples repository, and go to the rest/webhooks subdirectory.

Now start Crossbar:

crossbar start

and open http://localhost:8080 in your browser. Open the JavaScript console to see events received.

To submit an example webhook via HTTP/POST, you can use curl:

curl -H "Content-Type: text/plain" \
   -d 'fresh webhooks!' \


The HTTP Webhook Service is configured on a path of a Web transport - here is part of a Crossbar configuration:

   "workers": [
         "type": "router",
         "transports": [
               "type": "web",
               "paths": {
                  "webhook": {
                     "type": "webhook",
                     "realm": "realm1",
                     "role": "anonymous",
                     "options": {
                         "topic": "com.myapp.topic1",
                         "success_response": ""

The service dictionary has the following parameters:




MUST be “webhook” (required)


The realm to which the forwarding session is attached that will inject the submitted events, e.g. “realm1”(required)


The fixed (authentication) role the forwarding session is authenticated as when attaching to the router-realm, e.g. “role1” (required)


A dictionary of options (required, see below).

The options dictionary has the following configuration parameters:




The topic to which the forwarded events will be sent.


An integer when present limits the length (in bytes) of a HTTP/POST body that will be accepted. If the request body exceed this limit, the request is rejected. If 0, accept unlimited length. (default: 0)


A string to send as the body in a successful reply (default is OK)


A string to send as the body in an unsuccessful reply (default is NOT OK)


The same secret you told GitHub when creating the WebHook configuration. A string to send as the body in an unsuccessful reply (default is NOT OK)

With GitHub

If you set up Crossbar to have a Webhook service, and make it externally available, you can configure GitHub to send events to it. Underneath Settings and “Services & Webhooks”, you can add a new webhook, which just requires the URL of the externally-accessible Webhook service. You can configure GitHub to send certain events, or all events.

When you have configured it, it will send a ‘ping’ for you to verify it. As you have configured the Webhook service, you will recieve a message similar to this (most of the body cut out for brevity) on the WAMP topic it was configured with.

    "body": "{\"zen\":\"Design for failure.\",[...more json...]}",
    "headers": {
        "Content-Length": [
        "X-Github-Event": [
        "X-Github-Delivery": [
        "Accept": [
        "User-Agent": [
        "Host": [
        "Content-Type": [

The message on the WAMP topic will be a dict containing the body as a string, and the headers as a dictionary of lists.

You will also see the following in the logs:

2015-08-19T04:44:43+0000 [Router        490] Successfully sent webhook from to com.myapp.topic1

For more information on Webhooks, please see GitHub’s Webhooks Guide.