Skip to Content
Hardware integrationHTTP (Microcontrollers)

HTTP (Microcontrollers)

For devices without Python — ESP32, Arduino, bare-metal firmware, or any platform with an HTTP client. POST directly to the ingest endpoint.

Ingest URL: https://gateway.plexus.company/ingest
Auth: x-api-key: YOUR_API_KEY

Send a metric

curl -X POST https://gateway.plexus.company/ingest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "source_id": "device-01", "points": [ { "metric": "battery.voltage", "value": 12.4 } ] }'

Send a batch

Multiple points per request — strongly recommended on constrained hardware:

curl -X POST https://gateway.plexus.company/ingest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "source_id": "device-01", "points": [ { "metric": "battery.voltage", "value": 12.4 }, { "metric": "battery.current_ma", "value": 340 }, { "metric": "sensor.temperature_c", "value": 23.5 }, { "metric": "sensor.humidity_pct", "value": 54.1 } ] }'

Send an event

For faults, state changes, or any non-numeric payload, add "class": "event":

curl -X POST https://gateway.plexus.company/ingest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "source_id": "device-01", "points": [ { "metric": "device.fault", "value": { "code": "SENSOR_TIMEOUT", "sensor": "imu" }, "class": "event" } ] }'

Events appear in the Logs endpoint, separate from metrics.

With a timestamp

Include "timestamp" (Unix milliseconds) if your device has a real-time clock. Without it, Plexus uses server receive time:

{ "metric": "battery.voltage", "value": 12.4, "timestamp": 1716201600000 }

Best practices

  • Batch when possible — minimizes radio/network overhead and latency
  • Buffer locally — queue points during connectivity loss and flush on reconnect
  • Use consistent source IDs — changing source_id creates a new device in the fleet
  • Metric names — use <subsystem>.<metric> (e.g. motor.rpm, gps.latitude)
Last updated on