RAAD platform

API reference

A private, token-authenticated API for pulling your estate into your own systems. It reads the same data the RAAD console reads, so a device that has just reported in is available here immediately. Send Authorization: Bearer <token> with every request. Every response is { data }, plus { page } on paginated lists, and errors are { error: { code, message } }.

Base URL openapi.json Get a token

The contract itself is private. openapi.json and the interactive console both require a partner or platform session, so open them in a tab where you are already signed in to the portal.

Authentication

One header, on every request.

Tokens are issued in Settings → API inside the portal. A token belongs to one tenant and carries a fixed set of scopes, so the safest pattern is one token per integration with only the scopes that integration needs. The token is shown once at creation. Store it as a secret and rotate it by issuing a new one, then revoking the old.

Send the token in the Authorization header. Query-string tokens are not accepted, and a request with no header, an expired token or a revoked token returns 401. Call /health to confirm which tenant and scopes a token is acting as before you wire anything else up.

Scopes

One read scope per area. A token carries only the ones its integration needs.

A token that lacks the scope an endpoint requires gets 403, not an empty list, so a permissions problem never looks like missing data. Scopes are additive and set when the token is issued.

devices:read
The device registry. /devices and /devices/{id}.
tracking:read
Movement and telemetry. /positions, /positions/history, /sensors and /geofences.
alerts:read
What the platform raised and why. /events, /incidents and /rules.
assets:read
The things devices are fitted to. /assets and /assets/{id}.
drivers:read
/drivers.
compliance:read
Document metadata and expiry. /documents.
maintenance:read
/maintenance.
fuel:read
The energy ledger, packs, cabinets and forecourt. Everything under /power.
meter:read
Smart meters, reads and top-ups. Everything under /meters.
sense:read
Environmental sensors and readings. Everything under /sense.
guard:read
/guard/cases.
cam:read
Clip and driver-safety event metadata. /cam/clips.
esg:read
Carbon footprints and the ledger behind them. Everything under /carbon.
reports:read
/reports.
support:read
/support/cases.

/health requires no scope beyond a valid token, which makes it the right endpoint for an uptime check or a credential test.

Errors and limits

One error shape, whatever went wrong.

200OK. The body is { data }, plus { page } on paginated lists.
400Bad request. A parameter is missing or malformed. Returned by /positions/history when deviceId, from or to is absent or unparseable.
401Unauthorized. Missing, invalid, expired or revoked token.
403Forbidden. The token is valid but lacks the scope this endpoint requires.
404Not found. The resource does not exist, or is not visible to this token. The two cases are deliberately indistinguishable, so a token cannot be used to probe for devices in another tenant.

Rate limiting

Requests are limited per token. Poll /positions rather than looping over /devices/{id}, and page through /events with a cursor rather than re-reading the head of the list. If you need a higher ceiling for a bulk export, ask before you build against it.

Pagination

Cursor-based, on every list that grows without bound.

Registry-style lists (/devices, /positions, /rules, /meters and the like) return everything the token may see in one call. Logs and ledgers grow without bound, so /events, /incidents, /documents, meter readings, sense readings, clips, carbon entries, report runs and cases are paginated. Each returns newest first, up to limit rows, with page.nextCursor set when more remain. Pass that value back as cursor to continue. When nextCursor is null you have reached the end. An endpoint that paginates says so in its header, and takes the same two parameters.

Store the newest id you have processed rather than a timestamp. Events are written as they are evaluated, and a device that reconnects after a gap can backfill events with older occurredAt values than ones you have already seen.

Endpoints

Thirty endpoints, all read-only in v1. Select one to see its parameters, a request in three languages and a real response.

System

Confirm a token works and see what it can reach.

Returns the tenant and scopes this token acts as. Accepts any valid token, so it doubles as a health check and as the first call to make when an integration starts returning 403.

any valid token

Request

Response

Devices

The registry: what is onboarded, what state it is in, and which SIM it is on.

Every device this token may see, with its current state and the time it last reported. Returns the whole set rather than a page, so cache it and refresh on a schedule rather than per request.

devices:read

Request

Response

Notes

state is one of moving, idle, stopped, offline or nodata. nodata means the device is registered but has never reported; offline means it has reported before and has now gone quiet. protocol names the decoder handling the device, one of 267 supported.

One device with its latest status and telemetry.

devices:read404 if not visible

Path parameters

idintegerRequired
The deviceId from /devices. Not the uniqueId printed on the hardware.

Request

Response

Positions

Where everything is now, and where one thing has been.

The latest position of every device this token may see. This is the endpoint to poll for a live map: one call returns the whole estate, so you never need to fan out per device.

tracking:read

Request

Response

Notes

lastFix is when the GPS fix was taken; lastUpdate is when the platform received it. A device inside a tunnel or a container reports a fresh lastUpdate against a stale lastFix. Treat a widening gap between the two as loss of GPS rather than loss of the device. lat and lon are null until the first fix.

Movement history for one device over a time range, already segmented into trips and stops with a summary. You do not have to reconstruct journeys from raw points.

tracking:read400 on bad range404 if not visible

Query parameters

deviceIdintegerRequired
The device to report on.
fromdate-timeRequired
Start of the range, ISO 8601. Send it in UTC with a Z suffix.
todate-timeRequired
End of the range, ISO 8601. Keep ranges to a day or so per call for a busy device.

Request

Response

Sensors

Configured sensors and their latest values, per device.

Every configured sensor on every device this token may see, with the most recent reading. Values are already calibrated, so a fuel probe reads in litres rather than in raw counts.

tracking:read

Request

Response

Events

Rule fires and device events, newest first.

Everything the platform has raised against a device: rule fires and events reported by the hardware itself. Newest first, cursor-paginated. This is the feed to mirror into a ticketing system or a warehouse.

alerts:readcursor-paginated

Query parameters

limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

severity is one of critical, warning, info or muted. muted events are suppressed in the console but still returned here, so filter on it if you are mirroring the operator's worklist rather than the full log. page.nextCursor is null on the last page.

Geofences

The tenant's zones, with geometry you can draw.

Every zone on the tenant, with geometry already parsed. Pair it with /positions to render the same map the console shows.

tracking:read

Request

Response

Notes

Coordinates are [longitude, latitude], matching GeoJSON. That is the reverse of the lat/lon fields on a position, so check the order before you plot. radius is in metres. A polygon is not closed for you; repeat the first point if your renderer needs it.

Assets

The things your customers manage, as opposed to the hardware fitted to them.

Every asset this token may see, with the class-specific attributes bag for its type. A device is the hardware; an asset is the truck, trailer, container or site it reports on, and this is the list your own systems key on.

assets:readcursor-paginated

Query parameters

typestringOptional
Only assets of one type, for example truck, trailer, container, site or fridge.
statusstringOptional
active, maintenance or retired.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

mobility is derived from the type: mobile for vehicles, trailers and containers, fixed for sites, buildings, rooms, fridges and cabinets. The keys inside attributes depend on the type, so read them as a bag rather than a fixed shape.

One asset with the driver assigned to it and the devices linked to it. This is the join between the asset world and the device world: start here to find which deviceId to pass to /positions/history.

assets:read404 if not visible

Path parameters

idstringRequired
The asset id from /assets.

Request

Response

Drivers

Who is behind the wheel, and where each one is in onboarding.

The tenant's drivers with contact details, licence number and onboarding stage. The stage is computed from the documents on file, so a driver whose insurance lapses drops out of ready without anyone editing the record.

drivers:readcursor-paginated

Query parameters

stagestringOptional
One of draft, invited, in_review, ready, suspended or archived.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

suspended and archived are set by hand and stay put; every other stage is recomputed whenever a document changes or expires. status is kept for compatibility and no longer drives anything. Use stage.

Compliance

Documents and their expiry dates, without the file bytes.

Document metadata for the tenant, soonest expiry first. Rejected uploads are left out. Each row tells you what the document is, who or what it belongs to and when it runs out; the file itself is not served over the API.

compliance:readcursor-paginated

Query parameters

typestringOptional
Only one document type, for example insurance, licence, photo or a type your tenant has configured.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

A document belongs to either an asset or a driver, so one of assetId and driverId is set. To build an expiry feed, page through with limit=500 and stop when expiryDate is later than your horizon; the list is already in that order.

Maintenance

Service, inspection and repair tasks against assets.

Maintenance tasks, soonest due first. A task is due on a date, at an odometer reading, or both, so a service that is booked for next month can still come due early on a hard-working truck.

maintenance:readcursor-paginated

Query parameters

statusstringOptional
scheduled, done or cancelled.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

kind is service, inspection, repair or other. cost is in the tenant's billing currency and is only filled in once a task is done.

Incidents and rules

Alerts rolled up into incidents, and the rules that raise them.

Alerts grouped into incidents. A fuel sensor that trips forty times in a night is one incident with count: 40, not forty rows, so this is the feed to drive a ticketing or on-call system from. /events stays the raw log underneath.

alerts:readcursor-paginated

Query parameters

statestringOptional
open, acknowledged, snoozed or resolved.
modulestringOptional
The module that raised it, for example tracking, fuel, meter or sense.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

Newest activity first, ordered by lastAt. Exactly one of deviceId, assetId, meterId or packId names the subject, depending on the module.

Every alerting rule configured for the tenant, across all modules: what it watches, the threshold, the severity it raises at, which devices or groups it applies to and whether it is switched on. Read this to explain an incident, or to audit what a customer is actually monitoring.

alerts:read

Request

Response

Notes

A rule with empty deviceIds and groupIds applies to the whole tenant. The shape of threshold depends on trigger.

Power

Fuel and electricity on one ledger, plus packs, cabinets and the forecourt.

The unified energy ledger, newest first. Every fill, charge, swap and sale lands here as one row with a quantity, a unit and an amount, whether the resource was diesel or kilowatt-hours. Reconcile a fuel card or a charging bill against it.

fuel:readlimit only, no cursor

Query parameters

limitintegerOptional
Rows to return. Defaults to 100, capped at 500.

Request

Response

Notes

kind is swap, sale, charge or fill. direction is in for energy bought and out for energy sold or dispensed, so summing amount by direction gives cost and revenue.

Every battery pack in the estate with its state of charge, state of health and where it is: in the field, in a cabinet, charging, flagged or retired.

fuel:read

Request

Response

Notes

This returns the full pack record, so expect more fields than shown as the model grows. The ones above are stable. status is in_field, in_cabinet, charging, flagged or retired.

Swap cabinets with live bay occupancy, and the forecourt if the tenant runs one: pumps and chargers with today's throughput. One call gives a wall display everything it needs.

fuel:read

Request

Response

Notes

forecourt is null for a tenant that has no dispensing points. Cabinet counts (ready, charging, fault) add up to occupied bays; the remainder of bays is empty.

Energy throughput, cost and revenue over a trailing window, with the indicative carbon figures the ESG module derives from it. The numbers a monthly report opens with.

fuel:read

Query parameters

daysintegerOptional
Length of the trailing window. Defaults to 30, capped at 365.

Request

Response

Notes

scope2Kg is the emissions from charging; avoidedKg is the combustion those swaps displaced. Both are indicative and use the same factors as /carbon/summary.

Meters

Smart meters, their reads and their prepaid top-ups.

Every smart meter with its supply state, prepaid balance and when it last reported. Where the platform could fetch fresh state from the meter engine for this call, live is true.

meter:read

Request

Response

Notes

relayState is connected, disconnected or unknown. A meter with a zero balance and a disconnected relay has been cut off for non-payment; a top-up reconnects it. status is enrolled, offline or fault.

Interval reads for one meter, newest first. Each row is one OBIS register at one timestamp, so a meter reporting import energy and instantaneous power produces two rows per interval.

meter:readcursor-paginated404 if not visible

Path parameters

idstringRequired
The meter id from /meters.

Query parameters

limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

1-0:1.8.0 is cumulative import energy in kWh; 1-0:1.7.0 is instantaneous import power in kW. Consumption over a period is the difference between two 1.8.0 reads.

Prepaid top-up history for one meter, newest first: how much was bought, by what route, whether the token reached the meter, and the UTRN where one was issued.

meter:readcursor-paginated404 if not visible

Path parameters

idstringRequired
The meter id from /meters.

Query parameters

limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

status is pending, delivered or failed. operator names the console user for a manual top-up and is null for a customer payment.

Sense

Temperature, humidity and door sensors across fixed sites.

Every environmental sensor and the fixed place it watches: a fridge, a cold room, a site. Sensors talk over LoRaWAN, so they are identified by devEui rather than a deviceId.

sense:read

Request

Response

Notes

place is null for a sensor that has been onboarded but not yet assigned to a place. capabilities says which metrics to expect from /sense/readings.

Environmental readings, newest first. Filter to one sensor and one metric to chart it; leave the filters off to mirror the whole stream.

sense:readcursor-paginated

Query parameters

devicestringOptional
The sensor id from /sense/places.
metricstringOptional
temperature, humidity, door or battery.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

Units are degrees Celsius, percent relative humidity, 1 or 0 for a door (open or closed) and volts for battery.

Guard

Custody cases raised on locked assets.

Guard custody cases, newest first. A case opens when a locked asset does something it should not, such as leaving a geofence, losing telemetry or reporting tamper, and tracks what was done about it until it closes.

guard:readcursor-paginated

Query parameters

statestringOptional
open, watch, drifting, action_pending, restricted, recovery or closed.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

classifier is what opened the case, for example geofence_exit, tamper, telemetry_gap or no_response. Lock and unlock commands are not exposed in v1.

Cam

Camera clips and driver-safety events, as metadata.

Camera clips and driver-safety (DSM) events, newest first. Metadata only: what was detected, on which camera channel, where and when, and whether the clip has been stored. The media itself is fetched in the console.

cam:readcursor-paginated

Query parameters

eventstringOptional
Only one event type, for example dsm_drowsiness, dsm_phone or dsm_distraction.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

kind is dsm_event, periodic or request; channel is driver (cab-facing) or road. traccarDeviceId is the camera's deviceId in /devices. status is pending, stored, failed or expired.

Carbon

Indicative Scope 1 and 2 emissions, by period and by activity.

Computed carbon footprints, one per reporting period: Scope 1 from fuel burned, Scope 2 from electricity drawn, and the total. What the ESG report prints.

esg:read

Request

Response

Notes

status is computed (rolling, will change as the period fills), draft or final. Figures are indicative: they use published emission factors, not metered stack measurements.

The carbon ledger, newest first: each activity with the quantity it was measured in, the emission factor applied and where that factor came from. Enough to reproduce any footprint line by line.

esg:readcursor-paginated

Query parameters

scopestringOptional
1 for direct combustion or 2 for purchased electricity. Anything else returns both.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

Emissions for a row are quantity × factorValue in kg CO₂e. factorValue is null where no factor has been assigned yet, and such rows are excluded from /carbon/summary.

Reports

Report runs that have finished, with their headline metrics.

Completed report runs, newest first. Every report a user runs or schedules in the console is kept as a durable artifact with the parameters it ran with and its headline metrics, so you can pick up a nightly trips report without re-running it.

reports:readcursor-paginated

Query parameters

limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

key is the report type: trips, stops, summary, route, events, geofence or rule_alerts. Only runs with status: done are listed. The rows themselves are downloaded from the console.

Support

Faults and requests raised against the estate.

Support cases, newest first: the number a customer quotes on the phone, the category, priority, status and the SLA clock. Mirror this into your own desk so your team sees the same queue the console does.

support:readcursor-paginated

Query parameters

statusstringOptional
new, in_progress, on_hold, resolved or closed.
limitintegerOptional
Rows per page. Defaults to 100, capped at 500.
cursorstringOptional
The page.nextCursor from the previous response. Omit it for the first page.

Request

Response

Notes

category is connectivity, device, platform or billing; type is fault or request; priority runs P1 to P4. slaDueAt is null once a case is resolved or where no SLA applies.

Schemas

Every object v1 returns, plus the error envelope.

Device

Returned by /devices and /devices/{id}.

deviceIdinteger
Stable identifier. Use this everywhere the API asks for an id.
namestring
The operator-facing name, usually the plate or asset number.
uniqueIdstring
The identifier the hardware reports, typically the IMEI.
stateenum
moving, idle, stopped, offline or nodata.
customerstring | null
The customer the device is assigned to, if any.
iccidstring | null
The SIM fitted to the device, for support and reconciliation.
protocolstring | null
The decoder handling this device.
lastUpdatedate-time | null
When the platform last heard from the device.

Position

Returned by /positions.

deviceIdinteger
The device this position belongs to.
namestring
Device name, repeated so a map does not need a second lookup.
uniqueIdstring
Hardware identifier.
lat lonnumber | null
Decimal degrees. Null until the device has had a fix.
speedKmhnumber
Ground speed at the last fix.
coursenumber
Heading in degrees, 0 to 359.
statestring
Same values as on Device.
ignitionboolean | null
Null where the device does not report ignition.
addressstring | null
Reverse-geocoded, and populated lazily. Do not depend on it being present.
lastFixdate-time | null
When the GPS fix was taken.
lastUpdatedate-time | null
When the platform received it.

Event

Returned by /events.

idstring
Sortable identifier. Store the newest you have processed to resume.
deviceId deviceNameinteger, string
The device the event fired against.
typestring
Machine-readable kind, for example fuelDrop or geofenceExit. Branch on this, not on label.
labelstring
The human-readable version shown in the console.
detailstring | null
Extra context where the rule produced any.
severityenum
critical, warning, info or muted.
latitude longitudenumber | null
Where the event fired, when the position was known.
occurredAtdate-time
When the event happened, which can be earlier than when it was written.
acknowledgedboolean
Whether an operator has cleared it in the console.

Geofence

Returned by /geofences.

idstring
Zone identifier.
namestring
The name operators see.
kindenum
circle or polygon. It determines the shape of geometry.
geometryobject
A circle is { center: [lon, lat], radius } with the radius in metres. A polygon is { points: [[lon, lat]] }.
colorstring
Hex colour used to draw the zone in the console.

Asset

Returned by /assets.

idstring
Asset identifier. Use it for /assets/{id}.
registrationstring
The plate, serial or name operators know the asset by.
typestring
Asset type, for example truck, trailer, container, site, fridge.
mobilityenum
mobile or fixed, derived from the type.
make model yearstring | null, string | null, integer | null
Vehicle identity where known.
statusenum
active, maintenance or retired.
fuelTypestring | null
For vehicles and generators, for example diesel, petrol, electric.
attributesobject
Class-specific fields for this asset type. Treat the keys as a bag.
driverIdstring | null
The driver currently assigned.
createdAtdate-time
When the asset was created.

AssetDetail

Returned by /assets/{id}.

driverobject | null
{ id, name } of the assigned driver.
devicesarray
Linked hardware: { deviceId, label, type }. deviceId is null for a device slot that is defined but not yet fitted.
Every other field is the same as Asset.

Driver

Returned by /drivers.

idstring
Driver identifier.
namestring
Full name.
email phonestring | null
Contact details, where captured.
licenseNumberstring | null
Driving licence number.
stageenum
draft, invited, in_review, ready, suspended, archived. Computed from documents.
statusstring
Legacy field. Do not build on it.
createdAtdate-time
When the driver was added.

Document

Returned by /documents.

idstring
Document identifier.
typestring
Document type, for example insurance, licence, photo.
fileName mimeType sizeBytesstring, string | null, integer | null
What was uploaded. The bytes are not served.
issueDate expiryDatedate-time | null
Validity window.
statusenum
active or pending. Rejected documents are not listed.
assetId driverIdstring | null
Exactly one is set: the owner of the document.
createdAtdate-time
When it was uploaded.

MaintenanceTask

Returned by /maintenance.

idstring
Task identifier.
assetIdstring | null
The asset the task is against.
titlestring
What the task is.
kindenum
service, inspection, repair or other.
statusenum
scheduled, done or cancelled.
dueDate dueOdometerKmdate-time | null, number | null
When it falls due, by date, by odometer, or both.
completedAt costdate-time | null, number | null
Filled in once done. Cost is in the tenant's currency.
createdAtdate-time
When the task was created.

Incident

Returned by /incidents.

idstring
Incident identifier.
titlestring
What the console shows.
modulestring
The module that raised it, for example tracking, fuel, meter, sense.
categorystring | null
The alert type, for example fuelDrop.
severityenum
critical, warning or info.
stateenum
open, acknowledged, snoozed or resolved.
countinteger
How many alerts were rolled into this incident.
deviceId deviceName assetId meterId packIdvarious | null
The subject. One of the ids is set, depending on the module.
firstAt lastAtdate-time
First and most recent alert in the group.
resolution resolvedAtstring | null, date-time | null
How and when it was closed.

Rule

Returned by /rules.

idstring
Rule identifier.
namestring
What operators call it.
triggerstring
What it watches, for example fuelDrop, geofenceExit, speeding.
deviceIds groupIdsinteger[], string[]
What it applies to. Both empty means the whole tenant.
geofenceIdstring | null
For geofence triggers, the zone.
thresholdobject | null
Trigger-specific settings.
severitystring
The severity it raises at.
enabledboolean
Whether it is currently switched on.
templateIdstring | null
Set when the rule was created from a catalogue template.

PowerConsumptionRow

Returned by /power/consumption.

idstring
Ledger row identifier.
occurredAtdate-time
When the fill, charge, swap or sale happened.
kindenum
swap, sale, charge or fill.
resourceTypestring
diesel, petrol, electricity and so on.
directionenum
in (bought) or out (sold or dispensed).
quantity unitnumber, string
How much, in L or kWh.
amount currencynumber, string | null
What it cost or earned.
party sitestring | null
The vehicle, rider or customer, and where it happened.
statusstring
logged, pending, reconciled, exception, disputed or dismissed.
methodstring | null
Payment or fuelling method, for example fuel_card, mpesa.

Site

Returned by /power/sites.

id name addressstring, string, string | null
The cabinet.
statusenum
online, degraded or offline.
feedRefstring | null
The cabinet's reference in its own telemetry feed.
bays ready charging faultinteger
Total bays and how many hold a pack that is ready, charging or faulted.
swapsToday kwhTodayinteger, number
Today's throughput.

PowerSummary

Returned by /power/summary.

energyKwh fuelLnumber
Electricity and fuel throughput over the window.
revenue costnumber
Money out and money in, in currency.
swaps costPerSwapinteger, number
Battery swaps and the average cost of each.
elecCost fuelCostnumber
Cost split by resource.
scope2Kg avoidedKgnumber
Indicative emissions from charging and combustion displaced by swaps.
currency daysstring, integer
The currency and the window length used.

Meter

Returned by /meters.

id serial namestring
Identity: the platform id, the manufacturer serial and the display name.
engineDeviceIdinteger
The meter's id in the metering engine.
idCodestring | null
The meter number printed on the unit.
assetId assetLabelstring | null
The site or building the meter serves.
commsMode endpointstring | null
push or poll, and the address polled where relevant.
relayStateenum
connected, disconnected or unknown.
balancenumber | null
Prepaid balance, in the tenant's currency.
lastSeenstring | null
When the meter last reported.
statusenum
enrolled, offline or fault.
liveboolean
Whether this row reflects a fresh read from the engine.

MeterReading

Returned by /meters/{id}/readings.

idstring
Reading identifier, also the cursor.
obisstring
The register, for example 1-0:1.8.0.
tsdate-time
When it was read.
valuenumber
The register value.

Topup

Returned by /meters/{id}/topups.

idstring
Top-up identifier.
modestring
How it was paid, for example mpesa, card, manual.
amountnumber
Amount credited.
utrnstring | null
The token issued to the meter, where one was.
statusenum
pending, delivered or failed.
operatorstring | null
The console user, for a manual top-up.
createdAtdate-time
When it was made.

Place

Returned by /sense/places.

idstring
Sensor identifier. Pass it as device to /sense/readings.
devEuistring
The LoRaWAN device EUI.
name modelstring, string | null
Display name and hardware model.
capabilitiesobject | null
Which metrics the sensor reports.
lastSeendate-time | null
When it last reported.
placeobject | null
{ assetId, name, type } of the place it monitors, or null if unassigned.

SenseReading

Returned by /sense/readings.

idstring
Reading identifier, also the cursor.
senseDeviceId devEuistring
The sensor.
metricenum
temperature, humidity, door or battery.
tsdate-time
When it was taken.
valuenumber
°C, %RH, 1/0 for a door, or volts.

GuardCase

Returned by /guard/cases.

idstring
Case identifier.
subjectType subjectId subjectNamestring, string | null, string | null
What the case is about, usually an asset.
stateenum
open, watch, drifting, action_pending, restricted, recovery or closed.
severitystring
critical, warning or info.
titlestring
What the console shows.
classifierstring | null
What opened it, for example geofence_exit, tamper, telemetry_gap.
openedAt closedAtdate-time, date-time | null
Lifecycle.

CamClip

Returned by /cam/clips.

idstring
Clip identifier.
traccarDeviceIdinteger | null
The camera's deviceId.
kindenum
dsm_event, periodic or request.
eventTypestring | null
For DSM events, what was detected, for example dsm_phone.
channelenum
driver or road.
capturedAtdate-time
The camera's own timestamp.
latitude longitudenumber | null
Where the vehicle was.
driverNamestring | null
Who was driving, where known.
statusenum
pending, stored, failed or expired.

CarbonSummary

Returned by /carbon/summary.

id tenantIdstring
Identity.
periodStart periodEnd reportingYeardate-time, date-time, integer
The reporting period.
scope1Kg scope2Kg totalKgnumber
Emissions in kg CO₂e.
energyKwhnumber
Electricity drawn over the period.
statusenum
computed, draft or final.

CarbonEntry

Returned by /carbon/entries.

idstring
Entry identifier.
scopeinteger
1 or 2.
categorystring
The activity, for example diesel, grid_electricity_ke.
quantity unitnumber, string
How much, in L or kWh.
factorValue factorSource factorYearnumber | null, string | null, integer | null
The emission factor applied and its provenance.
createdAtdate-time
When the entry was written.

Report

Returned by /reports.

idstring
Run identifier.
keyenum
trips, stops, summary, route, events, geofence or rule_alerts.
labelstring
The name the run was given.
statusstring
Always done in this list.
rowCountinteger | null
Rows in the result.
paramsobject | null
What it ran with: range, devices, geofence.
metricsobject | null
Headline figures for the run.
createdAtdate-time
When it finished.

SupportCase

Returned by /support/cases.

id numberstring
Identifier and the human-readable case number.
categoryenum
connectivity, device, platform or billing.
typeenum
fault or request.
priorityenum
P1 to P4.
statusenum
new, in_progress, on_hold, resolved or closed.
titlestring
What was reported.
openedAt slaDueAtdate-time, date-time | null
When it was opened and when the SLA clock runs out.

Error

Returned with every 4xx status.

error.codestring
Stable, machine-readable, for example unauthorized or forbidden. Branch on this.
error.messagestring
Written for a person reading a log. The wording can change; the code will not.