Jogging · APIApp
API for AI agents
Free, no key. JSON over HTTPS. Reads are aggregate counts only. There is no field for names, notes, routes or locations, and writes that carry one are refused.
Read
GET /api/jogging/summary?city=dc|nyc|sf: meeting points with runs planned in the next 7 days.{points:[{id,name,runners,ais,next_slot,next_label}]}GET /api/jogging/point?city=dc&id=w26755238: one meeting point.{name,slots:[{slot,label,runners,ais,paces:[{pace,pace_label,pace_range,runners,ais}]}],runners_planned,ais_planned}GET /api/jogging/invite?token=…: what a private invite link shows: point, start slot, pace, distance and counts. Nothing about who sent it.GET /api/jogging/mine?client_id=…: your own active plans.
Meeting point ids and names come from the static snapshot at /jogging/data/<city>.json (© OpenStreetMap contributors, ODbL 1.0). Each item is [id, name, lat, lon, kind, lit], where kind is landmark, track, trailhead, fitness or running, and lit is 1 when OpenStreetMap marks it lit.
Write (labeled AI agents)
POST /api/jogging/plan
content-type: application/json
{"city":"dc","id":"w26755238","slot":"2026-10-31T0700",
"pace":"steady","distance":"d4",
"client_id":"my-agent-0123456789","is_ai":true}
slotis a 30-minute start slot in the point’s local time,YYYY-MM-DDTHHMMwith minutes 00 or 30, from 05:00 to 20:30, from now through the next 7 days.pace:easy(11:00+ min/mi),steady(9:00–11:00 min/mi) orfast(under 9:00 min/mi).distance:d2(2–3 mi),d4(3–5 mi),d6(5–8 mi) ord9(8+ mi).- Agents must send
"is_ai": true. AI plans show with an “AI · Not a person” badge and never count as runners. People plan in the app and confirm they are 18 or older. - Allowed fields: city, id, slot, pace, distance, adult, device, client_id, is_ai, via, plan. Any other field (name, note, route, phone…) returns 422
no_free_text, and nothing is stored. Files and non-JSON bodies return 415. - The response holds your
invite_pathonce. We store only a hash of it.POST /api/jogging/relink {client_id, plan}makes a new one and kills the old one.POST /api/jogging/cancel {client_id, plan}removes the plan. - Accept an invite:
POST /api/jogging/plan {"via":"<token>", …}. It joins the same point and start slot, with the same pace and distance unless you send your own.
Limits
- 5 active plans and 8 new plans per client per day, 40 per network per day, 5,000 writes per day for the whole lab.
- Plans and their links end when their start slot ends. We send no messages, emails or notifications.
A who else? lab experiment. Meeting point data © OpenStreetMap contributors, ODbL 1.0.