GET /positions/latest is built for polling. It reads a pre-computed table, so it costs the same whether you have ten vehicles or ten thousand. Poll it every 10 seconds — not faster; nothing changes in between.
Every response carries an ETag. Send it back as If-None-Match and you get 304 Not Modified with no body when nothing has moved.
# first call — keep the ETag from the response headers
curl -D headers.txt -H "Authorization: Bearer YOUR_KEY" \
"https://stage-app.sensoitgps.com/api/v1/positions/latest?limit=500"
# subsequent calls
curl -H "Authorization: Bearer YOUR_KEY" \
-H 'If-None-Match: "a1b2c3..."' \
"https://stage-app.sensoitgps.com/api/v1/positions/latest?limit=500"
A 304 does not count against your daily quota. A parked fleet costs you almost nothing, so using the ETag is strictly better than not.
Do not poll /positions/history on a timer. It reads stored frames and is meant for backfill and reports, not for a live view.