UbSub.io

The simplest way to test your webhook.

Distributed ??? events and counting...

Listen to an internet webhook locally

Easily create and listen to webhooks calls from the internet! Use either the existing Ubsub CLI Client, or write your own listener using SocketIO, to get a URL on the internet that you can receive locally. Receive events from many sources, including http, mqtt, iot, and more!

Forward webhook to an internal service

Use UbSub to forward an external URL to an internal endpoint quickly using the Ubsub CLI Client.

Listen to Events with your Application

Listen to events directly in your application from a variety of protocols including SocketIO, MQTT, and HTTP endpoints.

Install: npm i socket.io-client

  const socketio = require('socket.io-client');
  
  const userId = 'HypW9sEVE';
  const userKey = '463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1';
  const topicId = 'rkxsfcsVN4'
  
  const url = `https://socket.ubsub.io/socket?userId=${userId}&topicId=${topicId}&userKey=${userKey}`;
  const io = socketio(url);
  io.on('connect', socket => {
    console.log('Connected!');
    io.on('handshake-error', err => {
      console.log(err);
    });
    io.on('event', data => {
      // data: { topicId: 'rkxsfcsVN4', payload: {} }
      console.log(data);
    });
  });
  
Install: pip install python-socketio[client] websocket-client

  #!/usr/bin/env python3
  import socketio
  
  userId = 'HypW9sEVE'
  userKey = '463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1'
  topicId = 'rkxsfcsVN4'
  namespace = '/socket'
  
  sio = socketio.Client()
  
  @sio.on('connect', namespace=namespace)
  def on_connect():
    print('Connected!')
    sio.emit('subscribe', {
      "userId": userId,
      "userKey": userKey,
      "topicId": topicId
    }, namespace=namespace)
  
  @sio.on('event', namespace=namespace)
  def on_data(data):
    print('GOT DATA:')
    print(data)
  
  url = "https://socket.ubsub.io"
  sio.connect(url, namespaces=[namespace])
  

  using System;
  using Quobject.SocketIoClientDotNet.Client;
  using System.Threading;
  using Newtonsoft.Json;
  using System.Text;
  using Newtonsoft.Json.Linq;
  namespace csharp
  {
      public static class SocketIOExample
      {
          private static readonly String USER_ID = "HypW9sEVE";
          private static readonly String USER_KEY = "463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1";
          private static readonly string TOPIC_ID = "rkxsfcsVN4";
  
          public static void ExampleMain()
          {
              Console.WriteLine("Connecting...");
  
              var url = "https://socket.ubsub.io";
              var manager = new Manager(new Uri(url));
              var sock = manager.Socket("/socket");
  
              sock.On(Socket.EVENT_CONNECT, () =>
              {
                  Console.WriteLine("Connected!");
                  var data = JObject.FromObject(new
                  {
                      userId = USER_ID,
                      userKey = USER_KEY,
                      topicId = TOPIC_ID,
                  });
                  sock.Emit("subscribe", data);
              });
  
              sock.On(Socket.EVENT_ERROR, err =>
              {
                  Console.WriteLine(err);
              });
  
              sock.On("event", data =>
              {
                  Console.WriteLine(data);
              });
  
              while(true)
              {
                  Thread.Sleep(TimeSpan.FromSeconds(1));
              }
          }
      }
  }
  

  package io.ubsub.example;
  
  import io.socket.client.IO;
  import io.socket.client.Socket;
  
  public class Main {
      private static final String USER_ID = "HypW9sEVE";
      private static final String USER_KEY = "463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1";
      private static final String TOPIC_ID = "rkxsfcsVN4";
  
      public static void main(String[] args) throws Throwable {
          String url = String.format("https://socket.ubsub.io/socket?userId=%s&userKey=%s&topicId=%s", USER_ID, USER_KEY, TOPIC_ID);
  
          Socket sock = IO.socket(url);
          sock.on(Socket.EVENT_CONNECT, (x) -> {
              System.out.println("Connected!");
          });
          sock.on("event", x -> {
              System.out.println(x.toString());
          });
          sock.connect();
      }
  }
  

Features

Multi-Protocol

Communicate with different protocols such as HTTP, Email, SocketIO, UDP, and MQTT. Easily connect anything to everything.

Common Language

UbSub communicates with the most common language on the internet: JSON

Many Use Cases

Because there are so many protocols, it covers a variety of use-cases such as low-power IoT devices, 3rd party platforms, web browers, or your own internal systems.

Validation & Transformation

Manipulate and validate your payload and translate it to something your subscriber understands without the hassile of managing servers.

Separate Concerns

No need to have one service need to know about another. Centralize service interaction and communication through UbSub.

Simple Data Store

Persist simple variables to keep track of state between event publications.

Cron Jobs

Schedule tasks to kick off events, check service health, or poll for data.

What are you waiting for?

(You don't even need an email to sign-up!)