Sportskeeda API endpoint
Returns the source's published season, team totals, every player cap scenario and expanded salary breakdown. The site's player search and sortable columns are applied to the complete server-rendered rows. The published season may lag the current season.
/sportskeeda/salary-capQuery parameters: slug (required) is a host-free NFL team salary page path such as nfl/san-francisco-49ers/salary-cap. Discover team and tab slugs through /sportskeeda/page-options. q (optional, up to 100 characters) matches a player-name substring without case sensitivity. sort_by is optional and accepts exactly player, cap_number, cut_pre_june_1_dead_money, cut_pre_june_1_cap_saving, cut_post_june_1_dead_money, cut_post_june_1_cap_saving, trade_pre_june_1_dead_money, trade_pre_june_1_cap_saving, trade_post_june_1_dead_money, trade_post_june_1_cap_saving, restructure_cap_saving, or extension_cap_saving. order requires sort_by and accepts exactly asc or desc; its default is asc. Without sorting, the upstream order is preserved.
Returns the team summary amounts when published, every player row, four cut/trade scenario pairs, restructure and extension savings, and the expanded salary breakdown. status is ok when the page publishes player data and no_data when it publishes an empty cap table and blank summary; in the latter case the four amounts are null and players is empty. Money is reported as integer dollars, including negative savings. season is the year printed in the source summary; this may be older than the current season. Source rows missing required headings or fields return an upstream error.
| Field | Filled in, of 53 checked | Values in the sample |
|---|---|---|
| name | 53 | “Brock Purdy” and 52 other values |
| slug | 53 | |
| cap_number | 53 | 776,389 to 23,709,530, median 1,445,000 |
| cut_pre_june_1_dead_money | 53 | 0 to 88,154,120, median 800,000 |
| cut_pre_june_1_cap_saving | 53 | -64,444,590 to 3,674,000, median 559,624 |
| cut_post_june_1_dead_money | 53 | 0 to 66,213,530, median 280,215 |
| cut_post_june_1_cap_saving | 53 | -42,504,000 to 6,126,471, median 885,000 |
| trade_pre_june_1_dead_money | 53 | 0 to 70,906,719, median 660,000 |
| trade_pre_june_1_cap_saving | 53 | -47,915,731 to 4,390,000, median 803,812 |
| trade_post_june_1_dead_money | 53 | 0 to 21,687,754, median 231,055 |
| trade_post_june_1_cap_saving | 53 | 776,389 to 16,396,000, median 1,303,234 |
| restructure_cap_saving | 53 | 0 to 5,744,800, median 0 |
| extension_cap_saving | 53 | 0 to 5,744,800, median 64,000 |
| breakdown | 53 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| slug | string | Yes | NFL team salary-cap page path without host | nfl/san-francisco-49ers/salary-cap | |
| q | string | No | Case-insensitive player-name substring, at most 100 characters | Purdy | |
| sort_by | string | No | Sortable column; omit to preserve source order Allowed values: player, cap_number, cut_pre_june_1_dead_money, cut_pre_june_1_cap_saving, cut_post_june_1_dead_money, cut_post_june_1_cap_saving, trade_pre_june_1_dead_money, trade_pre_june_1_cap_saving, trade_post_june_1_dead_money, trade_post_june_1_cap_saving, restructure_cap_saving, extension_cap_saving. | ||
| order | string | No | Sort direction; requires sort_by; default asc Allowed values: asc, desc. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sportskeeda/salary-cap?slug=nfl%2Fsan-francisco-49ers%2Fsalary-cap&q=coffee&sort_by=player&order=asc" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"data": {
"slug": "nfl/san-francisco-49ers/salary-cap",
"team": "San Francisco 49ers",
"season": 2025,
"status": "ok",
"cap_space": 42430479,
"salary_cap": 340563099,
"active_cap_spend": 257067681,
"dead_money": 41064939,
"q": "Purdy",
"total": 1,
"players": [
{
"name": "Brock Purdy",
"slug": "nfl/brock-purdy",
"cap_number": 23709530,
"cut_pre_june_1_dead_money": 88154120,
"cut_pre_june_1_cap_saving": -64444590,
"cut_post_june_1_dead_money": 66213530,
"cut_post_june_1_cap_saving": -42504000,
"trade_pre_june_1_dead_money": 29254120,
"trade_pre_june_1_cap_saving": -5544590,
"trade_post_june_1_dead_money": 7313530,
"trade_post_june_1_cap_saving": 16396000,
"restructure_cap_saving": 5744800,
"extension_cap_saving": 5744800,
"breakdown": {
"base_salary": 8296000,
"signing_bonus": 7313530,
"option_bonus": 7550000,
"roster_bonus": 0,
"per_game_bonus": 850000,
"workout_bonus": 100000,
"other_bonus": 0,
"guaranteed": 46996000
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/publicnews.sportskeedaSalaryCapResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| data | sportskeeda.SalaryCapResponse | No | ||||
| data.active_cap_spend | integer | No | ||||
| data.cap_space | integer | No | ||||
| data.dead_money | integer | No | ||||
| data.order | string | No | ||||
| data.players | array | No | ||||
| data.players[].breakdown | sportskeeda.SalaryBreakdown | No | ||||
| data.players[].breakdown.base_salary | integer | No | ||||
| data.players[].breakdown.guaranteed | integer | No | ||||
| data.players[].breakdown.option_bonus | integer | No | ||||
| data.players[].breakdown.other_bonus | integer | No | ||||
| data.players[].breakdown.per_game_bonus | integer | No | ||||
| data.players[].breakdown.roster_bonus | integer | No | ||||
| data.players[].breakdown.signing_bonus | integer | No | ||||
| data.players[].breakdown.workout_bonus | integer | No | ||||
| data.players[].cap_number | integer | No | ||||
| data.players[].cut_post_june_1_cap_saving | integer | No | ||||
| data.players[].cut_post_june_1_dead_money | integer | No | ||||
| data.players[].cut_pre_june_1_cap_saving | integer | No | ||||
| data.players[].cut_pre_june_1_dead_money | integer | No | ||||
| data.players[].extension_cap_saving | integer | No | ||||
| data.players[].name | string | No | ||||
| data.players[].restructure_cap_saving | integer | No | ||||
| data.players[].slug | string | No | ||||
| data.players[].trade_post_june_1_cap_saving | integer | No | ||||
| data.players[].trade_post_june_1_dead_money | integer | No | ||||
| data.players[].trade_pre_june_1_cap_saving | integer | No | ||||
| data.players[].trade_pre_june_1_dead_money | integer | No | ||||
| data.q | string | No | ||||
| data.salary_cap | integer | No | ||||
| data.season | integer | No | ||||
| data.slug | string | No | ||||
| data.sort_by | string | No | ||||
| data.status | string | No | ok, no_data | |||
| data.team | string | No | ||||
| data.total | integer | No |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/sportskeeda/salary-cap?slug=nfl%2Fsan-francisco-49ers%2Fsalary-cap&q=coffee&sort_by=player&order=asc" \
-H "x-api-key: $CRAWLORA_API_KEY"