Tutorial · 8 min · endpoints verified 2026-09-22
How to build a WNBA team-form tool
Follow canonical team IDs into recent results and head-to-head context. This guide uses only the routes currently supported for WNBA; it never fills a gap with NBA data.
API coverage and endpoint overview: Explore the WNBA API
Why this is hard
The data contract behind a WNBA team-form tool
Without a WNBA standings adapter, a team product should present recent evidence rather than manufacture a league rank from an incomplete slice.
- Team form is not a standings table.
- Head-to-head context begins at Solo and should remain visually distinct from current form.
- Preserve canonical match and team IDs instead of joining on display names.
- Show source timestamps and a useful empty state when a query returns no rows.
Path 1 · recommended
Have your AI agent build it
Use MCP for discovery, then make the workflow-specific REST request when the MCP tool set does not expose that enrichment.
1. Connect the MCP server
Add the server in your MCP client and sign in with your Big Balls account. Your client registers itself and handles the token exchange — there is no key to copy.
{
"mcpServers": {
"bigballs-sports-data": {
"url": "https://mcp.bigballsdata.com/mcp"
}
}
}2. Tools your agent gets
get_matchesLive, upcoming or historical matches for a sport or league.
get_coverageMachine-readable map of what we hold and what we do not.
3. Ask for what you want
Paste this at your agent. It is written to make the model check coverage before it designs anything, which is what stops it inventing a field we do not serve.
Build a WNBA team-form tool. Start with get_coverage for basketball, then get_matches with league=wnba. Preserve canonical IDs and timestamps. Use only WNBA capabilities documented by Big Balls Sports Data. If a field is unavailable, show that state and do not substitute an NBA value.What the agent cannot reach
The MCP server does not expose every REST route used below. It also cannot make an unsupported WNBA field appear, so keep the REST capability boundary visible in the final interface.
Path 2 · hand-coded
Build it yourself
The sequence below starts from a league-filtered collection, follows a returned ID, and shapes only fields the response actually carries.
- 01
List the WNBA population
Begin with an explicit sport and league filter. Check HTTP status before interpreting an empty data array.
League-scoped requestbashcurl -s "https://api.bigballsdata.com/v1/matches?sport=basketball&league=wnba&limit=20" \ + -H "x-api-key: $BBS_API_KEY" - 02
Follow the canonical identifier
Take the ID from the list response and request the exact workflow-specific resource. Never manufacture an ID from a team name.
Workflow detail requestbashcurl -s "https://api.bigballsdata.com/v1/teams/$TEAM_ID/form" \ + -H "x-api-key: $BBS_API_KEY" - 03
Create the product view model
Transform the served fields without inferring unavailable metrics. The example keeps null and empty states explicit.
Honest view modeltypescriptconst form = results.map((game) => ({ opponent: game.opponent?.name ?? 'Unknown', result: game.result, playedAt: game.kickoff_utc, }));
Reference
Every endpoint this tutorial uses
All on the gateway at api.bigballsdata.com. Verified against production on 2026-09-22.
| Method | Path | Returns | Why you need it | Plan |
|---|---|---|---|---|
| GET | /v1/matches?sport=basketball&league=wnba | League-scoped games, teams, status and scores | Defines the exact game population and supplies canonical identifiers. | Free |
| GET | /v1/teams/:id/form | Recent results for one WNBA team | Builds the form strip. | Free |
| GET | /v1/teams/:id/h2h-intelligence | Loaded meetings against one opponent | Adds opponent-specific history without calling it standings. | Solo |
Pricing, honestly
Form is Free; head-to-head starts at Solo
A complete form strip is possible on Free. Solo adds the deeper two-team history.
Free key
Recent results for one team.Solo
Solo adds opponent-specific historical context.- Cache completed games instead of polling immutable rows.
- Treat plan_required as a product boundary, not a retryable outage.
- Keep the WNBA capability set separate from NBA.
More tutorials
Other build guides
- How to build a fantasy hockey app
- How to build a fantasy basketball app
- How to build a soccer xG app
- How to build a cricket app
- NFL fantasy football API tutorial
- How to build an NFL scouting tool
- How to build an NFL conditions analytics tool
- NFL betting model API tutorial
- NFL live game center API tutorial
- How to build an NCAAF scoreboard and live game center
- How to build college football rankings and conference standings
- How to build an NCAAF fantasy football app
- How to build a soccer fantasy app
- How to build a soccer betting model
- How to build a soccer live match center
- How to build a soccer scouting tool
- How to build an NCAAF betting model
- How to build an NCAAF conditions analytics tool
- How to build a WNBA live scoreboard
- How to build a WNBA quarter tracker
- How to build a WNBA odds board
- How to build a WNBA schedule browser
- How to build an NCAAB scoreboard
- How to build a March Madness archive
- How to build an NCAAB game-detail view
- How to build an NCAAB team-form dashboard
- How to build an NCAAB head-to-head tool
Known gaps
What this workflow deliberately leaves out
A useful first version is narrower than a misleading one. Add another panel only when its league-specific route and fields are verified.
- Team form is not a standings table.
- Head-to-head context begins at Solo and should remain visually distinct from current form.
Questions
- Can I replace missing WNBA fields with NBA data?
- No. The schemas may be related, but the identities, competitions, and capability depth are not interchangeable.
- What should the UI do with an empty response?
- Check the status and error envelope, then show a dated empty state. Never turn a failed read into a factual zero.
- Where do the plan labels come from?
- The route floors come from the endpoint-plan registry used by the product and its checks. A sport-specific floor can override the shared route floor.
Related APIs
Other APIs you can build with: