Content types
Token routes in the API Reference: Dashboard user token · API key token.
Response envelope
Successful operations return the payload directly (200 OK with DTO JSON). There is no global wrapper like { "data": ... }.
Service-layer results use ApiResult / ApiResult<T> internally; controllers map them to HTTP status codes and return either the DTO or the error object as the JSON body (see Errors).
Response headers
All V2 responses include an API version header:Rate limiting
Rate limiting is enforced on all V2 endpoints (/v2/api/...). V1 endpoints are not rate-limited.
Every V2 response includes the following headers:
When a rate limit is exceeded, the server returns
429 Too Many Requests with an additional header:
Retry strategy: Wait the full
Retry-After value before retrying. If you receive consecutive 429s, double the wait interval on each attempt up to a maximum of 60 seconds.
Limits:
Company/fleet-wide endpoints are subject to significantly tighter limits than per-vehicle endpoints.
¹ This endpoint returns the last known position for every vehicle in the company. Recommended usage is approximately 1 request every 5 minutes (≈12/hour, ≈300/day) — polling more frequently than this is unlikely to yield new data and burns through the hourly/daily budget quickly.
² Each request queries all vehicles in the company simultaneously. The rate limit applies per request regardless of fleet size.
³ Accepts a maximum of 50 vehicle IDs per request.
Pagination
Most V2 list endpoints acceptpage (1-based, default 1) and pageSize (default 50) query parameters and return:
GET /v2/api/battery-health uses different envelope fields: page, pageSize, and totalCount (instead of currentPage, numberOfPages, totalResults). It also omits lastResultIndex.
Legacy V1 pagination parameters (applies only to
POST /api/GetCompanyVehiclesBatteryHealth):
Endpoints with pagination support:
Date and time
- JSON serialization for
DateTimeuses custom converters (SimplifiedDateTimeConverter) that write without fractional seconds, e.g.2026-04-07T14:32:00. - Request parameters: pass ISO-like strings that
DateTime.Parseaccepts (e.g.2026-04-07T14:32:00or2026-04-07T14:32:00Zdepending on client). Many actions callDateTime.SpecifyKind(..., Utc)in code—treat replay and position ranges as UTC unless the controller comment says otherwise. TimeSpanin JSON (e.g. tripDuration) uses standard .NET format.
Null vs omitted
- Nullable reference fields may be omitted or null depending on serializer defaults; treat absent optional fields as null.
- For
PositionDto,isOnlineis only set in snapshot-based paths; record-based paths may omit or default it.