> For the complete documentation index, see [llms.txt](https://docs.sportmonks.com/v3/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/includes/coaches.md).

# Coaches

#### What does the include do?

The `coaches` include allows you to retrieve information about the head coaches (managers) of both teams in a fixture. This gives you each coach's biographical and profile data alongside the fixture, so you can display who was in charge of each side for a given match.

#### Why use coaches?

The coaches include is useful for:

* **Match centre displays**: Show which manager was in charge of each team for a specific fixture
* **Manager profiles**: Access biographical data (nationality, date of birth, image) without a separate request
* **Tactical build-up context**: Combine with lineups and formations to attribute team selection to a specific coach
* **Historical tracking**: See coaching changes across a season by comparing the `coaches` include across multiple fixtures for the same team

#### Requesting coaches

To retrieve coach information for a fixture, use the following include:

```http
https://api.sportmonks.com/v3/football/fixtures/{fixture_id}
?api_token=YOUR_TOKEN&include=coaches
```

**Example:** Get coaches for Sparta Rotterdam vs Feyenoord (fixture ID: 19714695)

```http
https://api.sportmonks.com/v3/football/fixtures/19714695
?api_token=YOUR_TOKEN&include=coaches
```

#### Response structure

When you include `coaches` in your request, you'll receive an array of two coach objects, one for each team in the fixture:

<details>

<summary>Response structure</summary>

```javascript
{
  "data": {
    "id": 19714695,
    "sport_id": 1,
    "league_id": 72,
    "season_id": 27958,
    "stage_id": 77482444,
    "group_id": null,
    "aggregate_id": null,
    "round_id": 407172,
    "state_id": 5,
    "venue_id": 332,
    "name": "Sparta Rotterdam vs Feyenoord",
    "starting_at": "2026-08-09 10:15:00",
    "result_info": "Feyenoord won after full-time.",
    "leg": "1/1",
    "details": null,
    "length": 90,
    "placeholder": false,
    "has_odds": true,
    "has_premium_odds": true,
    "starting_at_timestamp": 1786270500,
    "coaches": [
      {
        "id": 23237,
        "player_id": 23237,
        "sport_id": 1,
        "country_id": 38,
        "nationality_id": 38,
        "city_id": null,
        "common_name": "G. van Bronckhorst",
        "firstname": "Giovanni",
        "lastname": "van Bronckhorst",
        "name": "Giovanni van Bronckhorst",
        "display_name": "Giovanni van Bronckhorst",
        "image_path": "https://cdn.sportmonks.com/images/soccer/coaches/5/23237.png",
        "height": 178,
        "weight": 75,
        "date_of_birth": "1975-02-05",
        "gender": "male",
        "meta": {
          "fixture_id": 19714695,
          "coach_id": 23237,
          "participant_id": 73
        }
      },
      {
        "id": 23707,
        "player_id": 23707,
        "sport_id": 1,
        "country_id": 38,
        "nationality_id": 38,
        "city_id": null,
        "common_name": "R. Meijer",
        "firstname": "Rogier",
        "lastname": "Meijer",
        "name": "Rogier Meijer",
        "display_name": "Rogier Meijer",
        "image_path": "https://cdn.sportmonks.com/images/soccer/coaches/27/23707.png",
        "height": 186,
        "weight": 70,
        "date_of_birth": "1981-09-05",
        "gender": "male",
        "meta": {
          "fixture_id": 19714695,
          "coach_id": 23707,
          "participant_id": 919
        }
      }
    ]
  }
}
```

</details>

#### Field descriptions

**Main coach fields**

| Field            | Type    | Description                                                                            |
| ---------------- | ------- | -------------------------------------------------------------------------------------- |
| `id`             | integer | Unique identifier for this coach                                                       |
| `player_id`      | integer | Links to a player record if the coach previously played professionally, null otherwise |
| `sport_id`       | integer | ID of the sport (1 = football/soccer)                                                  |
| `country_id`     | integer | ID of the coach's country                                                              |
| `nationality_id` | integer | ID of the coach's nationality                                                          |
| `common_name`    | string  | Shortened display name (e.g. "G. van Bronckhorst")                                     |
| `firstname`      | string  | Coach's first name                                                                     |
| `lastname`       | string  | Coach's last name                                                                      |
| `name`           | string  | Full name                                                                              |
| `display_name`   | string  | Preferred display name                                                                 |
| `image_path`     | string  | URL to the coach's headshot                                                            |
| `height`         | integer | Height in centimetres, may be null                                                     |
| `weight`         | integer | Weight in kilograms, may be null                                                       |
| `date_of_birth`  | string  | Date of birth (YYYY-MM-DD)                                                             |
| `gender`         | string  | "male" or "female"                                                                     |

**Meta object fields**

Unlike the `participants` include, coach objects **do not carry a `location` field**. The `meta` object only links the coach to the fixture and the team:

| Field                 | Type    | Description                                                                       |
| --------------------- | ------- | --------------------------------------------------------------------------------- |
| `meta.fixture_id`     | integer | The fixture this coach assignment belongs to                                      |
| `meta.coach_id`       | integer | Repeats the coach's `id`                                                          |
| `meta.participant_id` | integer | **The linking field.** Matches the `id` of one of the two teams in `participants` |

#### Identifying home vs away coach

Coach objects have **no home/away flag of their own**. To determine which coach belongs to the home team and which to the away team, combine `coaches` with `participants` and match on `meta.participant_id`:

```http
https://api.sportmonks.com/v3/football/fixtures/{fixture_id}
?api_token=YOUR_TOKEN&include=coaches;participants
```

{% tabs %}
{% tab title="JavaScript" %}

```javascript
function getCoachesByLocation(fixture) {
  const home = fixture.participants.find(p => p.meta.location === 'home');
  const away = fixture.participants.find(p => p.meta.location === 'away');

  const homeCoach = fixture.coaches.find(c => c.meta.participant_id === home.id);
  const awayCoach = fixture.coaches.find(c => c.meta.participant_id === away.id);

  return { homeCoach, awayCoach };
}
```

{% endtab %}

{% tab title="Python" %}

```python
def get_coaches_by_location(fixture):
    home = next(p for p in fixture['participants'] if p['meta']['location'] == 'home')
    away = next(p for p in fixture['participants'] if p['meta']['location'] == 'away')

    home_coach = next(c for c in fixture['coaches'] if c['meta']['participant_id'] == home['id'])
    away_coach = next(c for c in fixture['coaches'] if c['meta']['participant_id'] == away['id'])

    return home_coach, away_coach
```

{% endtab %}

{% tab title="PHP" %}

```php
function getCoachesByLocation(array $fixture): array
{
    $home = current(array_filter($fixture['participants'], fn($p) => $p['meta']['location'] === 'home'));
    $away = current(array_filter($fixture['participants'], fn($p) => $p['meta']['location'] === 'away'));

    $homeCoach = current(array_filter($fixture['coaches'], fn($c) => $c['meta']['participant_id'] === $home['id']));
    $awayCoach = current(array_filter($fixture['coaches'], fn($c) => $c['meta']['participant_id'] === $away['id']));

    return [$homeCoach, $awayCoach];
}
```

{% endtab %}
{% endtabs %}

#### Nested includes

Coach records support additional nested includes, in line with the standalone Coach entity:

* **`coaches.country`** - Full country record instead of just `country_id`
* **`coaches.player`** - The coach's own playing career record, when `player_id` is not null
* **`coaches.trophies`** - Honours won across the coach's career

```http
https://api.sportmonks.com/v3/football/fixtures/{fixture_id}
?api_token=YOUR_TOKEN&include=coaches.country
```

#### Code examples

**JavaScript example**

{% tabs %}
{% tab title="JavaScript" %}

```javascript
const API_TOKEN = "YOUR_TOKEN";
const FIXTURE_ID = 19714695;

async function getFixtureCoaches() {
  const url = `https://api.sportmonks.com/v3/football/fixtures/${FIXTURE_ID}`;
  const params = new URLSearchParams({
    api_token: API_TOKEN,
    include: "coaches;participants"
  });

  const response = await fetch(`${url}?${params}`);
  const data = await response.json();
  const fixture = data.data;

  const home = fixture.participants.find(p => p.meta.location === 'home');
  const away = fixture.participants.find(p => p.meta.location === 'away');

  const homeCoach = fixture.coaches.find(c => c.meta.participant_id === home.id);
  const awayCoach = fixture.coaches.find(c => c.meta.participant_id === away.id);

  console.log(`${home.name}: ${homeCoach.display_name}`);
  console.log(`${away.name}: ${awayCoach.display_name}`);
}

getFixtureCoaches();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

API_TOKEN = "YOUR_TOKEN"
FIXTURE_ID = 19714695

url = f"https://api.sportmonks.com/v3/football/fixtures/{FIXTURE_ID}"
params = {
    "api_token": API_TOKEN,
    "include": "coaches;participants"
}

response = requests.get(url, params=params)
fixture = response.json()['data']

home = next(p for p in fixture['participants'] if p['meta']['location'] == 'home')
away = next(p for p in fixture['participants'] if p['meta']['location'] == 'away')

home_coach = next(c for c in fixture['coaches'] if c['meta']['participant_id'] == home['id'])
away_coach = next(c for c in fixture['coaches'] if c['meta']['participant_id'] == away['id'])

print(f"{home['name']}: {home_coach['display_name']}")
print(f"{away['name']}: {away_coach['display_name']}")
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$apiToken = "YOUR_TOKEN";
$fixtureId = 19714695;

$url = "https://api.sportmonks.com/v3/football/fixtures/{$fixtureId}";
$params = http_build_query([
    "api_token" => $apiToken,
    "include" => "coaches;participants"
]);

$response = file_get_contents("{$url}?{$params}");
$fixture = json_decode($response, true)["data"];

$home = current(array_filter($fixture["participants"], fn($p) => $p["meta"]["location"] === "home"));
$away = current(array_filter($fixture["participants"], fn($p) => $p["meta"]["location"] === "away"));

$homeCoach = current(array_filter($fixture["coaches"], fn($c) => $c["meta"]["participant_id"] === $home["id"]));
$awayCoach = current(array_filter($fixture["coaches"], fn($c) => $c["meta"]["participant_id"] === $away["id"]));

echo "{$home['name']}: {$homeCoach['display_name']}\n";
echo "{$away['name']}: {$awayCoach['display_name']}\n";
```

{% endtab %}
{% endtabs %}

#### Best practices

1. **Always pair with `participants` for home/away context.** Coach objects have no location field of their own, `meta.participant_id` is the only link back to a specific team.
2. **Check `player_id` before assuming a playing career.** Many coaches never played professionally at a tracked level, `player_id` is null in that case.
3. **Handle null `height`/`weight` gracefully.** These fields are frequently unavailable for coaches, unlike for active players.
4. **Cache coach data per season.** Coaching changes happen mid-season, but not per match, a daily cache is usually sufficient.

#### Related includes

* [**Participants**](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/includes/participants) - Required to resolve home/away for each coach
* [**Lineups**](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/includes/lineups) - Cross-reference team selection with the coach who picked it
* [**Referees**](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/includes/referees) - Another fixture-level personnel include with a similar shape

#### Summary

The `coaches` include returns each team's head coach for a fixture, linked back to the correct team via `meta.participant_id`, not a `team_id` or `meta.location` field. To display home vs away coach, combine this include with `participants` and match on that field. Nested includes (`coaches.country`, `coaches.player`, `coaches.trophies`) are available for deeper coach profile data.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/includes/coaches.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
