{"openapi":"3.1.0","info":{"title":"EOS Engineering Intelligence API","version":"1.0.0","description":"Public REST API for accessing engineering metrics, PR data, codebase intelligence, and sprint forecasts.\n\nAll endpoints require an API key passed as `Authorization: Bearer eos_<key>`.\n\nRate limits by plan:\n- **Starter**: 1,000 requests/day\n- **Pro**: 10,000 requests/day\n- **Enterprise**: unlimited\n\nGenerate API keys at **Settings → API**.","contact":{"url":"https://eos.dev"}},"servers":[{"url":"https://eos.dev/api/v1","description":"Production"}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"eos_<key>","description":"API key obtained from Settings → API"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"security":[{"BearerAuth":[]}],"paths":{"/team/health":{"get":{"operationId":"getTeamHealth","summary":"Team engineering health","tags":["Team"],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":7,"minimum":1,"maximum":90},"description":"Look-back window in days"}],"responses":{"200":{"description":"Health metrics","content":{"application/json":{"example":{"data":{"period_days":7,"merged_prs":12,"open_prs":5,"avg_cycle_time_hours":18.4,"avg_review_time_hours":6.2,"throughput_per_day":1.71},"meta":{}}}}},"401":{"description":"Invalid or missing API key"},"429":{"description":"Rate limit exceeded"}}}},"/team/developers":{"get":{"operationId":"listDevelopers","summary":"List tracked developers","tags":["Team"],"responses":{"200":{"description":"Developer list","content":{"application/json":{"example":{"data":[{"handle":"octocat","display_name":"The Octocat"}],"meta":{}}}}}}}},"/team/developers/{handle}":{"get":{"operationId":"getDeveloperMetrics","summary":"Per-developer metrics","tags":["Team"],"parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":7,"minimum":1,"maximum":90}}],"responses":{"200":{"description":"Developer stats with recent PRs"},"404":{"description":"Developer not found"}}}},"/team/prs":{"get":{"operationId":"listPRs","summary":"List pull requests","tags":["Team"],"parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["open","merged","blocked"],"default":"open"},"description":"`blocked` = open >24h with no review"},{"name":"days","in":"query","schema":{"type":"integer","default":7}},{"name":"author","in":"query","schema":{"type":"string"},"description":"Filter by GitHub handle"},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"ISO timestamp for cursor pagination"},{"name":"limit","in":"query","schema":{"type":"integer","default":50,"maximum":100}}],"responses":{"200":{"description":"Paginated PR list with `next_cursor` in meta"}}}},"/team/sprint/forecast":{"get":{"operationId":"getSprintForecast","summary":"Sprint delivery forecast","tags":["Team"],"parameters":[{"name":"end","in":"query","schema":{"type":"string","format":"date"},"description":"Sprint end date (ISO 8601). Defaults to 7 days from now."}],"responses":{"200":{"description":"Confidence score and risk level","content":{"application/json":{"example":{"data":{"confidence_pct":72,"sprint_end":"2026-04-27","days_remaining":7,"open_prs":4,"stalled_prs":1,"risk":"MEDIUM"},"meta":{}}}}}}}},"/codebase/modules":{"get":{"operationId":"listCodebaseModules","summary":"Codebase modules","tags":["Codebase"],"parameters":[{"name":"repo","in":"query","required":true,"schema":{"type":"string"},"description":"Repository in owner/repo format"},{"name":"limit","in":"query","schema":{"type":"integer","default":20,"maximum":100}}],"responses":{"200":{"description":"Top-level modules ranked by chunk count"}}}},"/codebase/ownership":{"get":{"operationId":"getCodebaseOwnership","summary":"Code ownership","tags":["Codebase"],"parameters":[{"name":"repo","in":"query","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"},"description":"File or directory prefix"},{"name":"limit","in":"query","schema":{"type":"integer","default":5,"maximum":20}}],"responses":{"200":{"description":"Top contributors ranked by commit count"}}}},"/agent/query":{"post":{"operationId":"agentQuery","summary":"Agent natural-language query (Pro+)","tags":["Agent"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","maxLength":2000,"description":"Natural language question about your engineering team or codebase"},"context":{"type":"object","description":"Optional additional context for the query"}}},"example":{"query":"Which developers have stalled PRs this week?"}}}},"responses":{"200":{"description":"Agent answer with source metadata","content":{"application/json":{"example":{"data":{"answer":"3 PRs have been open for more than 24 hours without a review...","tools_used":["get_blockers","get_team_status"],"tokens_in":1240,"tokens_out":312},"meta":{}}}}},"403":{"description":"Plan does not include AI agent (Pro+ required)"},"429":{"description":"AI credits exhausted or rate limit exceeded"}}}}}}