Skip to main content

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 accept page (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.
V2 pagination parameters: Legacy V1 pagination parameters (applies only to POST /api/GetCompanyVehiclesBatteryHealth): Endpoints with pagination support:

Date and time

  • JSON serialization for DateTime uses custom converters (SimplifiedDateTimeConverter) that write without fractional seconds, e.g. 2026-04-07T14:32:00.
  • Request parameters: pass ISO-like strings that DateTime.Parse accepts (e.g. 2026-04-07T14:32:00 or 2026-04-07T14:32:00Z depending on client). Many actions call DateTime.SpecifyKind(..., Utc) in code—treat replay and position ranges as UTC unless the controller comment says otherwise.
  • TimeSpan in JSON (e.g. trip Duration) 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, isOnline is only set in snapshot-based paths; record-based paths may omit or default it.