The inMotion Data Platform
The inMotion Data Platform is the time-series engine behind
inMotion Track and Studio, and it is available to you directly. From a weather
station, an industrial sensor, a fleet of vehicles, or your own application, you can create activities and
data streams, write time-series records, and read them back the same way.
Integration is through a RESTful API defined by the
OpenAPI Specification, or the
Python SDK. Requests are authenticated with a developer key or an API key, both created
from your account settings; see Authentication below.
How Data Reaches inMotion
The main routes in, and where each one fits.
Logger Reads the Sensors Directly
Sensors Publish to a Local MQTT Broker
Data Model: Streams, Channels and Activities
- Activities - Data is organised into Track activities (a moving path, e.g. a run, ride or flight) or Site activities (a fixed location, e.g. a weather station or load cell).
- Data streams - Each activity is backed by one or more data streams, which are containers for the variables and dimensions you record.
- Channels - Every stream separates data into channels: As-Acquired (the raw readings you upload), Quality-Controlled (flagged, corrected or interpolated values) and Processed (derived/aggregated values). Raw data is never overwritten — QC and processed views are computed from it.
- Standard Data Types - Variables can be aligned to standard data types (e.g. air temperature, speed, load) so data from different sources and sensors can be compared consistently.
Authentication
- Developer key - A key/secret pair tied to your account, used to sign requests with HMAC. Preferred when your integration authenticates on behalf of a logged-in user.
- API key - Used for unattended devices and services (e.g. a sensor or gateway) that upload data without a user present. Created from the My Keys > API tab in Settings.
- HMAC signing - all API requests are signed, so inMotion can confirm the request body has not been altered in transit.
Creating Your Keys
From the account dropdown menu, choose Settings, then My Keys and its Developer tab, to create a
developer key/secret pair. Use the + button to add a new key, give it a name, optionally enable HMAC
signing, and set an expiration date (or leave it as No expiration date for a
long-lived key). Copy the key and secret using the icon alongside each field - the secret is
only ever shown here.
My Keys's API tab generates an account key and API key pair
scoped to a specific access level (None, Consumer, Contributor, or Owner) for a third-party
integration — useful for granting a device or service access without sharing your own
login. Give the key a name, choose its access level and optional expiration, and save. Each
settings tab links to the OpenAPI protocol definition, which documents how to use
these keys in your own application.
Application Programming Interface
inMotion Track and Studio use the same REST API, and it is
available to you in full. Every endpoint, parameter and response is described in an
OpenAPI Specification,
which you can browse, call against your own account, or use to generate a client in your
preferred language. Requests are JSON over HTTPS and HMAC-signed.
What it covers:
- Activities - create and manage Track activities (a moving path) and Site activities (a fixed location), with their names, types, classification, tags and sharing.
- Data streams & channels - define the streams that hold your variables and dimensions, write to the As-Acquired channel, and read back the Quality-Controlled and Processed views.
- Time-series records - append readings as they arrive or backfill historic data, then query them by time range as raw records, statistics or intervals.
- Batch upload - submit many records, across multiple variables or devices, in one request, for high-frequency sensors and multi-sensor sites.
- Shapes, overlays & raster - create and retrieve routes, coverages and map overlays (see Uploads and Overlays).
- Account - manage developer keys, API keys, members and their access levels.
Software Development Kit
The inMotion Python SDK wraps the
REST API for scripts, data pipelines and IoT gateways — sessions,
auth and HMAC signing, retries, and typed models for activities, streams and records.
Install it from PyPI with
pip install inmotion-sdk:
package on PyPI,
source and examples on GitHub,
and the SDK reference for every class and method.
Any language with an HTTP client can work against the API directly instead.
- Weather stations - Import historical or live climatology readings as Site activities.
- Industrial sensors - Stream high-frequency sensor data (e.g. load cells) and upload windowed statistics for long-running equipment monitoring.
- Fleet & asset tracking - Push GPS and telemetry from vehicles or other moving assets as Track activities.
Data Logger
A Python application for running a station of sensors unattended — on a Raspberry Pi,
a gateway, or a similar device — and publishing their readings to
inMotion as a Site activity. Variables, sensors and publishing
are declared in a single YAML configuration; support for new hardware is added as a plugin,
without modifying the core package.
- BLE profiles - Bluetooth sensors are described using the same Device Config format as My Device Configs, so one profile drives both the logger and inMotion Track's generic BLE reader - define a device once and read it from either.
- MQTT sensors - devices that publish MQTT can report to a broker the logger hosts locally; it subscribes and drives a type: mqtt Device Config. See MQTT ingestion for this and the direct-to-cloud alternative.
- Reliable publishing - a durable local retry queue holds readings on disk through an unreliable connection or a process restart, and an optional permanent local log keeps every reading for offline review.
- Derived & windowed statistics - running totals and corrections are computed as each reading arrives, alongside periodic aggregates (mean, minimum, maximum, circular mean) over a rolling window.
The data logger is not yet published to a package index.
Contact us
for access.
MQTT Ingestion
Devices that use MQTT can reach inMotion in two ways. Both decode
the payload against a Device Config of
type: mqtt. The same file is used either way, so a configuration
validated against a local broker transfers to the cloud broker without changes.
- Local broker, via the Data Logger - the Data Logger hosts a broker on the gateway (a hardened Mosquitto is included). Devices on the LAN publish to it; the logger subscribes, decodes, aggregates at the edge, buffers through outages, and forwards over the SDK. Suited to sites with poor connectivity, or where several sensors should form a single Site activity.
- inMotion Cloud MQTT Broker - the device publishes directly to a hosted broker over TLS, authenticating with a scoped, publish-only key. The device needs no gateway or SDK; inMotion decodes and aggregates server-side. Suited to a single well-connected device, such as an ESP32 or ESPHome node.
MQTT ingestion is being enabled per account on request.
Contact us
for access.
Uploads and Overlays
Some data is not a live feed. Existing files — a recorded route, a field boundary, a
grid of samples — can be imported without code, through Studio's Upload screen or the
API.
- Formats - CSV, GPX, GeoJSON, KML and Shapefile. Each upload is previewed before it is committed, so you can set its nature, classification, title and tags first.
- Tracks - a GPX or CSV trace becomes a Track activity, the same as one recorded on a phone, with the full time-series, statistics and interval views.
- Shapes & coverages - polygons, routes and gridded data become Shapes: prescription maps, heatmaps and sampled coverages, each with its own variables and a colour ramp.
- Overlays - field boundaries, exclusion zones, sanctuaries and other reference geometry, drawn directly on the map or imported, grouped by classification and shown beneath any activity.
See Uploading routes and
overlays and Manage Overlays in the
Studio guide.
MCP Server for LLM Clients
An MCP server
is available for querying inMotion activity data from LLM clients
such as Claude. It requires only an API key.