image

The teams endpoint is the club directory. Call it with no id and body is the list of clubs. Each row has a numeric id, an abbreviation, a league, and a division. That id is what the other team routes ask for.

👉 To access this endpoint, you must obtain an API key: https://steadyapi.com/register


Authentication

Every call uses a Bearer token from your SteadyAPI dashboard.

Documentation:
https://docs.steadyapi.com/#authenticating-requests

headers = {
  'Authorization': 'Bearer YOUR_API_KEY'
}

Where this fits

The schedule and box score use gamePk. This list is how you get a club id. Pass that id as teamIds on GET /v1/mlb/teams-roster when you want one club’s players. The roster parameter is teamIds, plural, even for a single club. You do not need a date for the directory itself.


List MLB teams

Endpoint: GET /v1/mlb/teams

Documentation:
https://docs.steadyapi.com/#baseball-mlb-GETapi-v1-mlb-teams

Parameters

  • teamId — optional integer. Omit it to list clubs

With no teamId, body is the full list. Set teamId when you want that club’s record rather than the directory. There is no season parameter and no name search. The sample row’s season is part of the payload, not something you send.

Python

import requests

url = "https://api.steadyapi.com/v1/mlb/teams"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

response = requests.get(url, headers=headers)
response.raise_for_status()
teams = response.json().get("body") or []

for team in teams:
    if team.get("abbreviation") == "OAK":
        print(team.get("id"), team.get("name"), team.get("season"))
        break

Annotated sample

{
  "id": 133,
  "name": "Oakland Athletics",
  "season": 2023,
  "abbreviation": "OAK",
  "teamName": "Athletics",
  "locationName": "Oakland",
  "venue": { "id": 10, "name": "Oakland Coliseum" },
  "league": { "id": 103, "name": "American League" },
  "division": { "id": 200, "name": "American League West" }
}

Store id. That is the team id for roster and the other team endpoints. abbreviation and teamName are the short labels. name is the full club string in this row. League and division names are nested. The venue name is venue.name. The documented sample still says Oakland Athletics for id 133 in season 2023. Use the id, not the city string, when you call the next endpoint.


Practical use

body is a list when you omit teamId. Do not treat it as a single club object. Find the row, then read id.

teamName is Athletics and name is Oakland Athletics in this sample. They are different fields. Show name if you want the full label from the payload.

Spring league and all-star fields sit on the same row. You can ignore springLeague and allStarStatus unless you are building a spring-training view. They are not required to call the roster.

👉 Get your API key and list teams: https://steadyapi.com/register

How to Get an NHL Roster Using SteadyAPI Oct 12, 2026

How to Get an NHL Roster Using SteadyAPI

Load forwards, defensemen, and goalies for one NHL abbreviation. Player names are objects with a default field.

How to Get an AliExpress Description Using SteadyAPI Oct 12, 2026

How to Get an AliExpress Description Using SteadyAPI

Turn a product-detail description token into ordered text modules. The product id alone is not enough.

How to Find Vehicles for Sale Using SteadyAPI Oct 11, 2026

How to Find Vehicles for Sale Using SteadyAPI

Search vehicle listings by make, model, and ZIP. Price and mileage on each row are numbers.

How to Track Amazon New Releases Using SteadyAPI Oct 10, 2026

How to Track Amazon New Releases Using SteadyAPI

Pull one category’s new-release ranking. Store each row’s ASIN, rank, and price string.