Sync (GetFeed)/GetFeed FaultData
GetFeed FaultDatatoken required
Fault codes (J1939 spn / fmi and unit faults), when they open and clear.
POST
/daas/apiv1— method = "GetFeed", params.typeName = "FaultData"Parameters
typeName is "FaultData".
| Name | Type | Required | Description |
|---|---|---|---|
fromVersion | string | optional | The toVersion the previous call returned (16 hex digits). Omit on the first call. |
search.fromDate | date | optional | First call only: start the feed at this time (ISO-8601 UTC). Ignored when fromVersion is sent. Omit both to start 24 hours back.e.g. 2026-10-28T00:00:00Z |
resultsLimit | number | optional | Records per call. Default and maximum 25,000.e.g. 1000 |
Sync loop
Call once with search.fromDate (or nothing, to start 24 hours back), then keep sending the last toVersion as fromVersion. Every record is delivered once, in order. An empty data means caught up: wait and call again later with the returned version. Save the version to resume after a restart.
curl
# Requires: jq. Persist $version between runs to resume where you left off.
version=""
while :; do
if [ -z "$version" ]; then params='{"typeName":"FaultData","search":{"fromDate":"2026-10-28T00:00:00Z"}}'
else params='{"typeName":"FaultData","fromVersion":"'$version'"}'; fi
reply=$(curl -s -X POST 'https://private.develop-1.questar.io/v2/private-questar-units/daas/apiv1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{"method":"GetFeed","params":'"$params"'}')
echo "$reply" | jq -c '.result.data[]'
version=$(echo "$reply" | jq -r '.result.toVersion')
[ "$(echo "$reply" | jq '.result.data | length')" = "0" ] && sleep 60
doneNotes
Records come back in version order. Store the reply's
toVersion and send it as fromVersion on the next call; an empty data means you are up to date; still store the returned toVersion (it moves to the feed's cutoff) and poll again later. A page never splits records that share a version, so a page can be slightly larger than resultsLimit. Versions are event time: the feed holds back the last 60 minutes so late-arriving events are not skipped.Request
curl
curl -X POST 'https://private.develop-1.questar.io/v2/private-questar-units/daas/apiv1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
--data '{"method":"GetFeed","params":{"typeName":"FaultData","search":{"fromDate":"2026-10-28T00:00:00Z"},"resultsLimit":1000}}'Body
{
"method": "GetFeed",
"params": {
"typeName": "FaultData",
"search": {
"fromDate": "2026-10-28T00:00:00Z"
},
"resultsLimit": 1000
}
}Response
200 OK
{
"jsonrpc": "2.0",
"result": {
"data": [
{
"id": "1-23049790",
"dateTime": "2026-10-28T04:15:48.000Z",
"vehicle": {
"id": "1-1547967"
},
"diagnostic": {
"id": "1-2276556"
},
"failureMode": {
"id": "fmi-17"
},
"spn": 311,
"faultState": "Inactive",
"count": 1,
"version": "000001a180b8a920"
}
],
"toVersion": "000001a180b8a920"
}
}Errors also come back as HTTP 200, with an error instead of a result. error.data.type says what went wrong: ArgumentException (a bad parameter), MissingMethodException (unknown method) or InvalidOperationException. With no or an invalid token the gateway answers HTTP 401 / 403.
200 OK
{
"jsonrpc": "2.0",
"error": {
"code": -32000,
"message": "Get does not support typeName 'Media'",
"name": "JSONRPCError",
"data": {
"type": "ArgumentException"
},
"errors": [
{
"message": "Get does not support typeName 'Media'",
"name": "ArgumentException"
}
]
}
}