DotDot is the first GPS tracking platform built for LLM agents. Manage followers, react to run events, send cheers — all programmatic.
// your agent receives this{ "event": "run.started", "runner": "sarah", "run_id": "a1b2c3d4", "tracking_url": "dotdot.sivoov.app/sarah", "started_at": "2025-07-12T06:30:00Z"}
// agent posts to Discord, texts the crew$ curl -X POST your-discord-webhook \ -d "Sarah just started running!"Real use cases, real endpoints. Your agent handles the logistics — you handle the elevation.
Before a 100-miler, your agent bulk-invites your crew, sets privacy to friends-only, and schedules notification days. During the race, it relays cheers to your Discord.
POST /api/me/followers/bulk-inviteAuthorization: Bearer dotdot_pat_k8x...
{ "invites": [ { "email": "[email protected]" }, { "email": "[email protected]" }, { "email": "[email protected]" } ]}Your agent watches for run events and posts updates to Slack, Discord, Strava clubs, or your blog. Real-time, zero manual effort.
// webhook: run.finished{ "event": "run.finished", "runner": "arthur", "distance_meters": 80467, "duration_seconds": 51840, "spectator_count": 247}
// "Arthur finished 50mi in 14:24"Auto-approve anyone from your running club's email domain. Deny the rest. Get a Telegram ping for edge cases.
// webhook: follower.requested{ "event": "follower.requested", "follower_id": "f9e8d7c6", "email": "[email protected]", "nickname": "Jamie"}
// agent checks domain → approvePOST /api/me/followers/f9e8d7c6/approveYour agent sends personalized cheers based on progress. It knows when you've been climbing for an hour and sends the right words.
// agent reads live positionGET /api/runners/sarah/current
// detects big climb, sends cheerPOST /api/runs/a1b2c3d4/cheers{ "nickname": "Coach Bot", "message": "8hrs in, summit done."}Getting started
One click in your dashboard. Pick scopes, name it, copy it. Shown once, hashed forever.
read:runs · write:followers · write:events
Tell us where to send events. We sign every payload with HMAC-SHA256 so you know it's us.
run.started · run.finished · follower.approved
Events arrive as POST requests. Your agent calls the DotDot API back. That's the whole loop.
HTTPS + JSON — no SDK required
Reference
Standard REST. Authorization: Bearer dotdot_pat_...
Full OpenAPI 3.1 spec at /api/openapi.json
Real-time
Register a webhook URL. We POST signed JSON payloads when things happen. HMAC-SHA256 on every request. Retry with exponential backoff. Your agent reacts in real time.
Runner begins a GPS-tracked run
Run completed with summary stats
Someone cheered during a run
New follow request incoming
Follow request was approved
3, 5, 10, 25, 50, 100 watchers
New GPS data (configurable)
1POST https://your-agent.dev/webhook2X-DotDot-Signature: sha256=a8f5f1...3Content-Type: application/json4
5{6 "event": "spectator.milestone",7 "timestamp": "2025-07-12T09:45:00Z",8 "data": {9 "run_id": "a1b2c3d4",10 "runner": "sarah",11 "threshold": 50,12 "count": 53,13 "top_followers": [14 "Coach Mike",15 "Alex",16 "Sam"17 ]18 }19}Verify the signature. Parse the JSON. Do your thing.
1GET /.well-known/agent.json2
3{4 "name": "DotDot",5 "description": "Live GPS run tracking for ultra runners — programmable API for agents",6 "url": "https://dotdot.sivoov.app",7 "openapi": "https://dotdot.sivoov.app/api/openapi.json",8 "auth": {9 "type": "bearer",10 "instructions": "Create a Personal Access Token at /dashboard?tab=integrations"11 },12 "webhook_events": [13 "run.started",14 "run.finished",15 "cheer.received",16 "follower.requested",17 "follower.approved",18 "spectator.milestone",19 "trackpoints.batch"20 ]21}Standards-first
DotDot publishes a standard discovery file at /.well-known/agent.json. Any agent framework that speaks OpenAPI can generate a client automatically. No SDK to install. No vendor lock-in. Just HTTPS and JSON.
The one human step
Your Garmin watch starts LiveTrack, which emails DotDot. The only manual setup is adding [email protected] as a LiveTrack recipient in Garmin Connect — a one-time step. After that, every run is automatically tracked, broadcast, and available via the API.
Working on full automation. Community recipes for agent-driven setup coming soon.
Create an account. Generate a token. Let your agent handle the rest.