{"info":{"description":"HTTP API for OpenTimeStats dashboard, charts, calendar, and request data.","title":"OpenTimeStats API","version":"0.1.0"},"openapi":"3.0.3","paths":{"/api/calendar-heatmap":{"get":{"parameters":[{"in":"query","name":"date_from","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"calendar","schema":{"type":"string"}}],"responses":{"200":{"description":"Heatmap days and per-calendar aggregates"}},"summary":"Calendar heatmap data"}},"/api/calendar-stats":{"get":{"parameters":[{"in":"query","name":"date_from","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"Calendar statistics array"}},"summary":"Per-calendar confirmation stats"}},"/api/calendar-support":{"get":{"responses":{"200":{"description":"Support pages and scraped public stats"}},"summary":"Live public calendar support stats"}},"/api/calendar-timeline":{"get":{"parameters":[{"in":"query","name":"date_from","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"Calendar timeline series"}},"summary":"Per-calendar timeline"}},"/api/calendars":{"get":{"responses":{"200":{"description":"Calendar list"}},"summary":"Distinct calendars"}},"/api/create-now":{"post":{"responses":{"201":{"description":"Created"},"500":{"description":"Stamping failed"}},"summary":"Create and stamp a new request immediately"}},"/api/dashboard-recent":{"get":{"responses":{"200":{"description":"Compact recent request list"}},"summary":"Recent dashboard requests"}},"/api/overview":{"get":{"responses":{"200":{"description":"Overview payload"}},"summary":"Dashboard counters and averages"}},"/api/requests":{"get":{"parameters":[{"in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"maximum":100,"type":"integer"}},{"in":"query","name":"status","schema":{"enum":["pending","partial","complete"],"type":"string"}},{"in":"query","name":"calendar","schema":{"type":"string"}},{"in":"query","name":"date_from","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"sort_by","schema":{"default":"created_at","enum":["id","created_at","status"],"type":"string"}},{"in":"query","name":"sort_dir","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"Request page with attestation details"}},"summary":"Paginated request list"}},"/api/timeline":{"get":{"parameters":[{"in":"query","name":"date_from","schema":{"format":"date-time","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"Timeline payload"}},"summary":"First-confirmation timeline"}},"/download/{filename}":{"get":{"parameters":[{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Downloaded file"},"404":{"description":"Unknown filename"}},"summary":"Download request file or proof"}}},"servers":[{"url":"http://localhost:5050"}]}
