Ingest — OwnTracks

OwnTracks publishes a JSON payload over HTTPS POST in its native schema. Our endpoint accepts the standard format with no modifications.

Endpoint

POST https://app.whereistereza.com/o/{your-org-slug}/api/t/owntracks/{token}
Content-Type: application/json

The {token} is generated when you add the source in the admin.

Payload

{
  "_type": "location",
  "tid":   "iP",
  "tst":   1714032000,
  "lat":   42.7551,
  "lon":   -1.6402,
  "alt":   430,
  "vel":   4,
  "cog":   85,
  "acc":   8,
  "batt":  72,
  "BSSID": "...",
  "SSID":  "...",
  "conn":  "w"
}
Field Type Required Notes
_type string yes Always "location" for tracking points
tid string yes Tracker ID (your device label, e.g. "iP")
tst int yes Unix timestamp in seconds
lat float yes WGS84 latitude
lon float yes WGS84 longitude
alt int no Altitude in metres above sea level
vel int no Speed in km/h
cog int no Course over ground in degrees (0–360)
acc int no Horizontal accuracy in metres
batt int no Battery percentage 0–100

Other OwnTracks message types (waypoint, transition) are accepted but ignored — they're not used in the live map.

Example

curl -X POST \
  https://app.whereistereza.com/o/yourname/api/t/owntracks/abc123secret \
  -H "Content-Type: application/json" \
  -d '{
    "_type":"location",
    "tid":"iP",
    "tst":1714032000,
    "lat":42.7551,
    "lon":-1.6402,
    "alt":430,
    "acc":8
  }'

Response:

{ "status": "ok" }

Errors

  • 400 Bad Request — payload missing required fields.
  • 401 Unauthorized — token doesn't match any source.
  • 429 Too Many Requests — over rate limit (60/min per token).

Notes

  • Points are de-duplicated by (tid, tst) — re-sending the same message is a no-op.
  • Altitude is optional; missing altitudes get smoothed from neighbours during analytics computation.

Need help? Contact support · Where Is Tereza?