Parameters/api_get_vehicle_parameter_values

api_get_vehicle_parameter_valuestoken required

Returns telemetry parameter values (`telemetry.unit_parameter`) for a vehicle over a time window. The window may span up to 72 hours for raw readings, or up to 31 days when `interval` is set and the series is sampled.

POST/api— body field action.name = "api_get_vehicle_parameter_values"

Parameters

NameTypeRequiredDescription
vehicle_idnumberoptionalVehicle id. Required if `license_nmbr` is not provided.e.g. 555
license_nmbrstringoptionalLicense plate. `License_NMBR` is also accepted as an alias. Required if `vehicle_id` is not provided.e.g. AB-123-CD
param_typenumberrequiredNumeric code for the measurement you want — the parameter-type id, NOT its name. Speed is `10003`, not `"speed"`; a non-numeric value is rejected with action_value 1. Send several in one call as a comma-separated list (e.g. `10003,10004`), up to 20 codes; every value must be digits only. Marked required because, although the request is accepted without it, it then returns ZERO rows rather than all parameter types. `0` is not a wildcard either — no parameter uses that code, so it also returns nothing.e.g. 10003
start_timedaterequiredStart of the time window, inclusive.e.g. 2026-04-26T00:00:00Z
end_timedaterequiredEnd of the time window, INCLUSIVE — a reading whose timestamp equals `end_time` is returned. Must be after `start_time`. Maximum window is 72 hours without `interval`, or 31 days with it; exceeding the applicable limit returns action_value 3.e.g. 2026-04-27T00:00:00Z
intervalnumberoptionalSampling interval in seconds — keeps one reading per interval instead of every reading. Supplying it also RAISES the maximum window from 72 hours to 31 days, which is how a week or month of history is requested. Must be a positive whole number; a decimal, sign, or non-numeric value is rejected with action_value 1. The window divided by the interval must not exceed 20,000 sampled points, so a very small interval on a wide window returns action_value 3 — use a coarser interval (e.g. 3600 for a week).e.g. 3600

Pagination

This action is paginated. The two parameters below are accepted on every call (both optional); omitting them yields page 1 with 100 rows. The response carries a pagination envelope alongside data; iterate while has_more === true.

page, page_size and has_more are present on every paginated response. total_count and total_pages are returned only by some actions — treat them as optional and drive iteration from has_more rather than from a page count worked out in advance.

NameTypeRequiredDescription
page_numbernumberoptional1-based page index. Defaults to 1 if omitted. Page 1 pins a snapshot for stateful actions (events, telemetry) — subsequent pages reuse that snapshot until the session expires (~30 minutes).e.g. 1
page_sizenumberoptionalRows per page. Defaults to 2000, which is also the maximum — larger values are silently capped to 2000, and a response of exactly 2000 rows usually means there are more pages. For stateful actions (events, telemetry) only the value sent with page 1 is honored, because later pages reuse the size pinned by the snapshot; stateless actions read it on every request.e.g. 2000
Iterate every page
curl
# Iterate every page until pagination.has_more is false.
# page_size "100" is a deliberate small page so the loop is visible — the
# default is 2000, which is also the maximum. Raise it to fetch fewer,
# larger pages; you still stop on has_more either way.
# Requires: jq (https://stedolan.github.io/jq/).
page=1
while :; do
  body=$(curl -s -X POST 'https://private.develop-1.questar.io/v2/private-questar-units/api' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_TOKEN' \
    -d '{"action":{"name":"api_get_vehicle_parameter_values","parameters":[{"vehicle_id":555,"license_nmbr":"AB-123-CD","param_type":10003,"start_time":"2026-04-26T00:00:00Z","end_time":"2026-04-27T00:00:00Z","interval":3600,"page_number":"'$page'","page_size":"100"}]}}')
  echo "$body" | jq '.response.properties.data[]'
  has_more=$(echo "$body" | jq -r '.response.properties.pagination.has_more // false')
  [ "$has_more" = "true" ] || break
  page=$((page + 1))
done

Page 1 pins a snapshot for stateful actions (events, telemetry). If the session expires (~30 min) the API returns action_value="3" with description pagination_session_expired — restart from page_number=1.

Notes

Either `vehicle_id` or `license_nmbr`/`License_NMBR` must be provided; omitting both returns action_value '1'. A window wider than the applicable maximum (72 hours raw, 31 days sampled) returns action_value '3'. `parameter_type` echoes back the numeric code you asked for, not a name — the readable name is in `parameter_type_description`. `parameter_type_description` and `time` are URL-encoded in the response and must be decoded before display; `value` is always formatted to 7 decimal places. You only receive vehicles your credentials are permitted to see.

Request

curl
curl -X POST 'https://private.develop-1.questar.io/v2/private-questar-units/api' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  --data '{"action":{"name":"api_get_vehicle_parameter_values","parameters":[{"vehicle_id":555,"license_nmbr":"AB-123-CD","param_type":10003,"start_time":"2026-04-26T00:00:00Z","end_time":"2026-04-27T00:00:00Z","interval":3600}]}}'
Body
{
  "action": {
    "name": "api_get_vehicle_parameter_values",
    "parameters": [
      {
        "vehicle_id": 555,
        "license_nmbr": "AB-123-CD",
        "param_type": 10003,
        "start_time": "2026-04-26T00:00:00Z",
        "end_time": "2026-04-27T00:00:00Z",
        "interval": 3600
      }
    ]
  }
}

Response

Successful responses always wrap the action's payload in response.properties. The action_value field reports the handler outcome: "0" for success, "1" for invalid params, "2" for not allowed, "3" for limit-exceeded /pagination-session-expired, "999" for general error.

Authentication is checked before the action runs and fails the same way for every action. A token that is not valid returns HTTP 200 with action_value "2" and description invalid_session; an empty bearer returns "2" with session_token_required. Read the description to tell these apart from an action's own "2". With no Authorization header the gateway answers HTTP 401 {"message":"Unauthorized"}, and with a bearer that is not a token HTTP 403 {"message":"Forbidden"}.

200 OK
{
  "response": {
    "properties": {
      "action_name": "api_get_vehicle_parameter_values",
      "action_value": "0",
      "description": "success",
      "data": [
        {
          "vehicle_id": "229477",
          "parameter_type": "10003",
          "parameter_type_description": "Sys%20Param%20Speed",
          "value": "0.0000000",
          "time": "2026-09-02T17%3A31%3A29.0000000%2B00%3A00"
        }
      ],
      "pagination": {
        "page": 1,
        "page_size": 100,
        "has_more": true
      }
    }
  }
}