Coaching data is easy to overlook, but it matters for a surprising number of features โ tactical previews, "manager under pressure" storylines, and simple club identity pages. This guide covers the two places coach data appears in the API: match lineups and team squads.
Where Coach Data Comes From
There's no dedicated /coach endpoint. Instead, coach information is embedded in two places depending on context:
/lineupsโ the coach fielding the team for a specific match/team_squadโ the full coaching staff associated with the team for a season
Getting the Match-Day Coach
Each side's lineup response includes a coach object with name, ID, and image:
import requests
response = requests.get(
'https://live-football-api.com/api/v1/lineups',
params={'api_key': 'YOUR_KEY', 'match_id': match_id, 'lang': 'en'}
).json()
data = response['data']
home_coach = data['home']['coach']
away_coach = data['away']['coach']
print(f"Home: {home_coach['name']}")
print(f"Away: {away_coach['name']}")
This is useful for a pre-match preview card showing "who's in the dugout" alongside the starting XI.
Getting the Full Coaching Staff
The /team_squad endpoint returns a top-level coaches array โ not just the head coach, but the broader coaching staff associated with the team for that season:
response = requests.get(
'https://live-football-api.com/api/v1/team_squad',
params={'api_key': 'YOUR_KEY', 'team_id': 'lfa-man-city', 'lang': 'en'}
).json()
for coach in response['data']['coaches']:
print(f"{coach['name']} โ {coach['id']}")
The same call in JavaScript:
const res = await fetch(
'https://live-football-api.com/api/v1/team_squad' +
`?api_key=YOUR_KEY&team_id=lfa-man-city&lang=en`
);
const result = await res.json();
result.data.coaches.forEach(coach => {
console.log(coach.name);
});
Building a Club Staff Page
Combining squad and coaching data into a single club page requires just one call to /team_squad โ no need to hit multiple endpoints:
function ClubStaffPage({ teamId }) {
const [data, setData] = useState(null);
useEffect(() => {
fetchTeamSquad(teamId).then(setData);
}, [teamId]);
if (!data) return <Loading />;
return (
<>
<h2>Coaching Staff</h2>
<ul>
{data.coaches.map(coach => (
<li key={coach.id}>{coach.name}</li>
))}
</ul>
<h2>Squad</h2>
<ul>
{data.squad.map(player => (
<li key={player.id}>{player.name} โ #{player.number}</li>
))}
</ul>
</>
);
}
Cross-Referencing Coach Changes Across Seasons
Since /team_squad accepts a season parameter, you can track coaching changes over time by comparing the coaches array across multiple seasons for the same team:
const seasons = ['2022/2023', '2023/2024', '2024/2025'];
for (const season of seasons) {
const squad = await fetchTeamSquad(teamId, season);
console.log(`${season}: ${squad.coaches.map(c => c.name).join(', ')}`);
}
Frequently Asked Questions
Does the coach field include tactical formation or role information?
No, the coach object returns identity data (name, ID, image) only. Formation data is available separately as a top-level formation field in the /lineups response.
Is there a way to search for a coach by name directly?
Not currently โ coach data is only accessible through a team's /lineups or /team_squad response rather than a dedicated search endpoint.
Does the coaches array include assistant coaches?
The array can include multiple staff members depending on what's available for that club and season, though the depth of staff data (assistants, fitness coaches, etc.) varies by team.
Can I get a coach's historical record across multiple clubs?
Not directly โ since there's no dedicated coach endpoint, tracking a coach across clubs would require querying each team's squad data separately and cross-referencing by name or ID.