flowthings.io Documentation


flowthings.io is built from the ground up to enable rapid development of solutions for real time data collection, complex event processing, and data delivery.

flowthings.io enables the rapid creation of scalable solutions that require:

  • real time data ingestion
  • complex event processing
  • real time data sharing
  • efficient REST, Webhook, and Websocket data distribution

Core API Objects



A Drop represents a single entity of data within on flowthings.io. Drops contains a heterogenous map of elements. It's an atomic piece of information that can exist in one or more Flows.

A Drop could be a reading from a sensor, an inventory update, a location update; the possibilities are endless. Any complex assortment of related data elements can map to the elements of a Drop.

Learn more about Drops at Drop Object Overview.



If a Drop is the core data object in the service, a Flow is the core stream object. Flows are real time streams of Drops. Flows have a limited number of Drops (a capacity of up to 100,000) and can be queried using Flow Filter Language.

Flow Filter Language can also be used to specify a logical filter that will be applied to Drops being written to a Flow. Only Drops that pass the Flow's filter will make it into the Flow.

Learn more about Flows at Flow Object Overview.



Flows can be have one or more Tracks associated with them. A Track's purpose is to monitor, filter, and/or transform the Drops from its source Flow to some number of destination Flows. When a Drop enters a Flow, all Tracks that denote that Flow as a source are executed. Tracks have a "source" which designates the Flow to be monitored, and one or more "destination" Flows, which indicate possible outputs for the track.

Real time processing of the Drop data is done in a javascript environment which has been augmented with additional functionality provided by flow javascript tools. These tools allow Tracks to execute external http calls, query Drops in other Flows, and leverage custom utilities.

A Track can specify simple yet powerful filters in order to accept or reject Drops from the source Flow based on specified criteria. When a new Drop is written to the source a filter written in Flow Filter Language will test the Drop before doing any processing. If the Drop passes the filter, then an optional javascript transformation function is executed with the incoming Drop as the first parameter. If the function returns a valid set of new Drops, the Drops will be written to the destination Flows.

Learn more about Tracks at Track Object Overview.


An Identity represents a flowthings.io user. Each Identity has an ID, which which you can reference other users to form Groups. This can be useful if you are administering a development team on a large application.

Learn more about Identities at Identity Object Overview.


A Group is a collection of users, to whom you might want to grant Share permissions. While Shares can indeed be granted on a user-by-user basis, the purpose of a Group is to make administration more convenient when working with large numbers of users.

Learn more about groups at Group Object Overview.


A Share allows you to grant limited access of your namespace to other Flow users. Unlike Tokens:

  • The recipient of a Share must be another registered user of flowthings.io
  • A wide range of actions are available. Users can create Flows, Tracks, Tasks or Drops within your namespace

A typical use case of Shares might be used to allow members of a team to collaborate in building a single application.

Learn more about Shares at Share Object Overview.


A Token is means of granting limited access to your application to the outside world. For example, you may wish to grant a unique Token to each of your devices.

Tokens are designed to be sandboxed for security purposes:

  • A Token can be restricted to particular Paths. E.g. /account_id/homesecurity/thermostat
  • Tokens can read Read any objects from the Paths specified, but may only write Drops
  • Tokens may be revoked at any time
  • Tokens may have a duration, after which they expire and cannot be used

Learn more about Tokens at Token Object Overview.