DaaS API
Docs & Playground
Feeds/GPS points feed

GPS points feedtoken required

GPS positions and speed, as the units report them.

GET/daas/v1/gps-points/feed

Parameters

NameTypeRequiredDescription
cursorstringoptionalThe nextCursor the previous call returned. Omit on the first call.
fromdateoptionalFirst call only: start the feed at this time (ISO-8601 UTC). Ignored when cursor is sent. Omit both to start 24 hours back.e.g. 2026-10-28T00:00:00Z
limitnumberoptionalRecords per call. Default and maximum 40,000.e.g. 1000

Sync loop

Call once with from (or nothing, to start 24 hours back), then keep sending the last nextCursor as cursor. Every record is delivered once, in order. An empty data means caught up: wait and call again later with the returned cursor. Save the cursor to resume after a restart.

curl
# Requires: jq. Persist $cursor between runs to resume where you left off.
cursor=""
while :; do
  if [ -z "$cursor" ]; then q="from=2026-10-28T00:00:00Z"; else q="cursor=$cursor"; fi
  reply=$(curl -s 'https://private.stage.questar.io/v2/private-questar-units/daas/v1/gps-points/feed?'"$q" -H 'Authorization: Bearer YOUR_TOKEN')
  echo "$reply" | jq -c '.data[]'
  cursor=$(echo "$reply" | jq -r '.nextCursor')
  [ "$(echo "$reply" | jq '.data | length')" = "0" ] && sleep 60
done

Notes

Records come back in order. Store the reply's nextCursor and send it as cursor on the next call; an empty data means you are up to date: still store the returned nextCursor and poll again later. A page never splits records that share a timestamp, so a page can be slightly larger than limit. Ordered by arrival (server) time, so a late upload is still delivered once, in order.

Request

curl
curl 'https://private.stage.questar.io/v2/private-questar-units/daas/v1/gps-points/feed?from=2026-10-28T00:00:00Z&limit=1000' \
  -H 'Authorization: Bearer YOUR_TOKEN'
URL
GET https://private.stage.questar.io/v2/private-questar-units/daas/v1/gps-points/feed?from=2026-10-28T00:00:00Z&limit=1000

Response

200 OK
{
  "data": [
    {
      "id": "1-535572805",
      "vehicleId": "1-1295501",
      "time": "2026-10-28T05:06:04.000Z",
      "latitude": 32.291089,
      "longitude": 34.985256,
      "speed": 0
    }
  ],
  "nextCursor": "000001a180e6b6cf"
}

Errors use HTTP status codes with a body of { error: { code, message } }: 400 a bad parameter, 401 a missing or invalid token, 404 no record with that id, 500 a server error.

400 Bad Request
{
  "error": {
    "code": "bad_request",
    "message": "History is limited to 24 hours per call"
  }
}