Events API
This page records a planned event-query contract. The interactive example loads prepared challenge data and formats it in the browser; it does not call a hosted Praxis API.
sample-boulevard example is derived from the same prepared static records used by the challenge.Planned endpoint#
$ curl "$PRAXIS_API/v1/feeds/{feed_id}/events" \
-H "Authorization: Bearer $PRAXIS_KEY"
This request is a contract sketch for future runtime work. This site does not issue base URLs or keys, and no availability or compatibility commitment is implied by the example.
Planned query parameters#
feed_idstringrequiredzonestringzone_a. Omit for all zones on the feed.typestringzone.entry, zone.exit, zone.dwell, or lock.acquired.sincefloatt greater than this value, in seconds from feed start. Useful for polling.evidencebooleanfalse to keep payloads small.Try it#
This control fetches /challenge/zone.json, a prepared static file for a 15.6 second aerial clip, then builds an API-shaped preview in this browser. The file contains 15 scored entry rows. Loading it does not execute detection, tracking, or event evaluation.
/challenge/zone.jsonEach preview element represents one prepared scored entry with a timestamp, saved track ID, and normalized position. Deduplication was applied while preparing the artifacts. The browser does not independently establish that every row maps to a distinct physical car.
Planned polling pattern#
A future client could poll with since set to the timestamp of the last event it processed:
last_t = 0.0
while True:
r = get(f"/v1/feeds/{feed}/events", params={"since": last_t})
for ev in r.json()["events"]:
handle(ev) # your logic
last_t = ev["t"]
sleep(1.0)Ordering, immutability, retry behavior, retention, and evidence durability are not guarantees of the current site. Those semantics must be specified and tested when the hosted service is implemented.