{"openapi":"3.0.3","info":{"title":"JerryGM Projections API","version":"1.2","description":"Weekly and full-season NFL fantasy projections scored under any league's rules — skill positions, kickers and team defenses — with the stat line behind every number and an id crosswalk on every row.\n\nFull reference: https://api.jerrygm.com/api/ext/v1/docs · Try it: https://api.jerrygm.com/api/ext/v1/console","contact":{"name":"JerryGM","url":"https://www.jerrygm.com/api/"}},"servers":[{"url":"https://api.jerrygm.com/api/ext/v1"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Create a key under Settings → System → JerryGM API."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"}}},"Ids":{"type":"object","description":"Cross-provider ids; any may be null when the crosswalk lacks one.","properties":{"gsis":{"type":"string","nullable":true},"mfl":{"type":"string","nullable":true},"sleeper":{"type":"string","nullable":true},"espn":{"type":"string","nullable":true},"yahoo":{"type":"string","nullable":true},"cbs":{"type":"string","nullable":true},"sportradar":{"type":"string","nullable":true},"sdio":{"type":"string","nullable":true},"pff":{"type":"string","nullable":true},"fantasydata":{"type":"string","nullable":true}}},"Player":{"type":"object","properties":{"gsisId":{"type":"string"},"name":{"type":"string"},"position":{"type":"string","enum":["QB","RB","WR","TE","K","DST"]},"team":{"type":"string"},"projectedPPG":{"type":"number","description":"Per game PLAYED, not per game scheduled."},"seasonTotal":{"type":"number"},"statLine":{"type":"object","additionalProperties":{"type":"number"}},"breakdown":{"type":"object","description":"Why the number is what it is."},"injuryStatus":{"type":"string","nullable":true},"ids":{"$ref":"#/components/schemas/Ids"}}}}},"paths":{"/projections":{"get":{"summary":"Projections for the whole pool, or named players","description":"No ids or names returns every projected player (the Free plan returns the top 100 and says so).","parameters":[{"name":"season","in":"query","schema":{"type":"integer"},"description":"Defaults to the current season."},{"name":"week","in":"query","schema":{"type":"integer","minimum":1,"maximum":18},"description":"Omit for full-season."},{"name":"source","in":"query","description":"Projection model. Non-baseline sources need a paid plan.","schema":{"type":"string","enum":["jgm_baseline","jgm_cofactor","nflverse_naive"]}},{"name":"scoring","in":"query","description":"Preset name, or a JSON weights object which may carry `bonuses`, `longPlays`, `kicker` and `defense`. See /docs.","schema":{"type":"string","example":"half"}},{"name":"positions","in":"query","description":"Comma list of QB, RB, WR, TE, K, DST. Omit for all.","schema":{"type":"string"}},{"name":"ids","in":"query","schema":{"type":"string"},"description":"Comma-separated player ids."},{"name":"idType","in":"query","description":"Which id namespace `ids` is in.","schema":{"type":"string","enum":["gsis","mfl","sleeper","espn","yahoo","cbs","sportradar","sdio","pff","fantasydata"]}},{"name":"names","in":"query","schema":{"type":"string"},"description":"';'-separated names; \"Last, First\" accepted. Team defenses match by franchise name, nickname, or code, with or without a D/ST marker (\"Los Angeles Chargers D/ST\", \"Chargers\", \"LAC D/ST\" all resolve to DST-LAC)."}],"responses":{"200":{"description":"Projections","content":{"application/json":{"schema":{"type":"object","properties":{"season":{"type":"integer"},"week":{"type":"integer","nullable":true},"count":{"type":"integer"},"total":{"type":"integer"},"truncated":{"type":"boolean"},"scoringWarnings":{"type":"array","items":{"type":"string"},"description":"Present when scoring rules overlap and stack."},"players":{"type":"array","items":{"$ref":"#/components/schemas/Player"}}}}}}},"400":{"description":"Bad parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or unknown API key"},"402":{"description":"The plan does not cover this call — the body names the plan that does"},"429":{"description":"Rate limit or monthly quota exceeded"}}}},"/players":{"get":{"summary":"The whole pool's identities and id crosswalk, no projections","description":"Free on every plan and never truncated — join once, then call /projections by id.","parameters":[{"name":"season","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"Player list"},"401":{"description":"Missing or unknown API key"}}}},"/sources":{"get":{"summary":"What this key can do, and the scoring vocabulary","description":"Sources, presets, every valid weight key, bonus stat, long-play type and position, plus your plan and its limits. The authoritative list at runtime.","responses":{"200":{"description":"Capabilities"},"401":{"description":"Missing or unknown API key"}}}}},"x-vocabulary":{"scoringPresets":["std","half","ppr"],"scoringWeightKeys":["passYd","passTd","passInt","rushYd","rushTd","rec","tePremiumRec","recYd","recTd","fumbleLost","twoPt","specialTd","passFd","rushFd","recFd","passCmp","sackTaken","retYd","pickSix"],"bonusStats":["passAtt","passCmp","passYds","passTds","passInts","rushAtt","rushYds","rushTds","targets","receptions","recYds","recTds","fumblesLost","twoPt","stTds","passFd","rushFd","recFd","sacks","retYds","pickSix","rushRecYds"],"longPlayTypes":["passCmp","passTd","rec","recTd","rush","rushTd"],"longPlayMinYards":20,"positions":["QB","RB","WR","TE","K","DST"],"idTypes":["gsis","mfl","sleeper","espn","yahoo","cbs","sportradar","sdio","pff","fantasydata"]}}