LemursEye
Documentation
API

API overview

What the LemursEye API is, the conventions every endpoint follows, errors and limits.

The LemursEye API is the same API the console and the mobile app use. Anything you can see or do in the console, a program can do too: read live positions and trips, pull the daily fuel and cost per vehicle, receive alerts, plan trips, manage vehicles and trackers.

Typical uses:

  • ERP and accounting (Odoo, SAP, your own): pull each day's litres and cost per vehicle, and post them as expenses.
  • Your own dashboards: trips, distances and idle time per vehicle, per day.
  • Operations software: create planned trips from your orders, read back which stops were done.
  • Live tracking in your app: stream positions over the live socket.

Base URL

https://lemurseye.com/api/v1/

All requests and responses are JSON over HTTPS (Content-Type: application/json). Every request needs a bearer token: see Authentication.

Your company is in the token

Every call is scoped to the company (the tenant) the token belongs to. You never pass a company id, and you can never read or change another company's data: an id that belongs to someone else answers 404 Not Found, exactly as if it did not exist.

Conventions

ThingFormatExample
IdsUUID7fc349e7-f83d-4072-9e98-0b0b00ff27dc
TimesISO 8601 with offset; responses are in UTC2026-10-25T08:10:41Z
DatesYYYY-MM-DD, in the company's time zone2026-10-25
Distancekilometres133.6
Speedkm/h78
Durationsseconds, in fields ending Seconds or SdrivingSeconds: 12660
FuellitresfuelLitres: 16.1
Moneya number plus the company's ISO 4217 currency codefuelCost: 17.7, currency: "USD"
CoordinatesWGS 84 decimal degreeslatitude: 30.0444, longitude: 31.2357

Fields with no value are null rather than missing. Lists come back newest first unless the page says otherwise.

Permissions

A token carries the permissions of the person or API key it belongs to. Each endpoint names the permission it needs, for example fleet:read or dispatch:write. Without it the answer is 403 Forbidden.

PermissionLets you
fleet:read, fleet:writeRead and change vehicles and their live state
trips:readTrips, stops and history
device:read, device:writeRead and register trackers
drivers:read, drivers:writeRead and change drivers, issue app codes
alerts:read, alerts:ackRead alerts, acknowledge them
rules:writeChange alert rules
geofence:read, geofence:writeRead and change places and zones
dispatch:read, dispatch:writePlanned trips and routes
money:readFuel prices and costs
reports:read, digest:generateRead reports and digests, generate one on demand
settings:read, settings:writeCurrency, fuel prices, calendar
modules:read, modules:writeSee and switch the company's apps
users:readSee people and their roles
users:write, roles:manage, integrations:manageInvite people, change roles, make API keys. People only: an API key never holds these

An owner can see and change what each role holds on the Roles page.

Errors

Errors use the usual HTTP status codes. Most carry a JSON body with a readable error, and some also a machine-readable code:

{ "error": "This is the company's only active owner. Make someone else owner first.", "code": "last_owner" }
StatusMeaningWhat to do
400The request is invalid: a missing field, a bad dateFix the request; error says what is wrong
401No token, or it expiredGet a new token and retry
403The token lacks the permissionUse a role that has it
404Not found, or not yoursCheck the id
409Conflicts with the current state: an IMEI already registered, editing a trip that startedRead error; the request will not succeed as it is
429Too many attempts (sign-in endpoints)Wait a few minutes
5xxA fault on our sideRetry with backoff; tell us if it persists

Limits

  • Lists take a limit (default and maximum are given per endpoint; alerts allow up to 500).
  • Date ranges are capped where they could get large: planned trips up to 62 days at a time.
  • Retry 5xx and network errors with exponential backoff, starting at one second.

Versioning

The path carries the version (/api/v1/). Within v1 we only add: new endpoints, new optional fields, new values in lists. Ignore fields you do not know. Anything that would break a client gets a new version, announced in advance.