Teamindeling.nl
API Documentation v1 Import into Postman
NL EN

API Documentation

REST API for retrieving club, season, and team data.

Authentication

First call POST /api/v1/license/verify with your license key. You will receive a bearer_token in return. Send that token as the Authorization: Bearer ... header on all subsequent requests.

HTTP Header
Authorization: Bearer TI-A3F2-9KL1-8MNQ-7ZXP

Without a valid token the API returns 401 Unauthorized.

Back to table of contents

Base URL

Base URL
https://teamindeling.nl/api/v1

The {club} parameter in the URL is the club's slug, e.g. sv-rood-wit-zwolle.

Back to table of contents

Verify license

POST /api/v1/license/verify

Checks whether a license key is valid for a given club. On success returns a <code>bearer_token</code> used to authenticate all other endpoints. Records the verification timestamp.

Name Type Required Description
license_key string yes The license key
club_slug string yes Slug of the club
200 OK — application/json
{
  "valid": true,
  "bearer_token": "aBcDeFgHiJkLmNoPqRsTuVwXyZ...",
  "club": {
    "name": "SV Rood-Wit Zwolle",
    "slug": "sv-rood-wit-zwolle",
    "domain": "sv-rood-wit-zwolle.nl"
  },
  "expires_at": "2027-06-30"
}
404 club_not_found
401 invalid_license_key
403 license_expired / license_suspended

Seasons — list

Auth required
GET /api/v1/clubs/{club}/seasons

Returns only the active season by default. Pass ?all=true to retrieve all seasons.

Name Type Required Description
all boolean no true = all seasons, false (default) = active only
200 OK — application/json
{
  "data": [
    {
      "id": 14,
      "name": "2025/2026",
      "start_date": "2025-08-01",
      "end_date": "2026-06-30",
      "is_active": true
    }
  ]
}

Season — detail

Auth required
GET /api/v1/clubs/{club}/seasons/{season}

Returns a season including all teams and their players.

200 OK — application/json
{
  "data": {
    "id": 14,
    "name": "2025/2026",
    "start_date": "2025-08-01",
    "end_date": "2026-06-30",
    "is_active": true,
    "teams": [
      {
        "id": 38,
        "name": "Heren 1",
        "short_name": "H1",
        "slug": "heren-1",
        "sort_order": 0,
        "season_id": 14,
        "finalized_at": "2025-09-01 00:00:00",
        "category": {
          "id": 1,
          "name": "Senioren"
        },
        "players": [ ... ],
        "staff": [ ... ]
      }
    ]
  }
}
404 Season does not belong to this club

Categories

Auth required
GET /api/v1/clubs/{club}/categories

Returns all team categories for the club, sorted by order. Includes the number of teams per category.

200 OK — application/json
{
  "data": [
    {
      "id": 1,
      "name": "Senioren",
      "sort_order": 0,
      "teams_count": 4
    },
    {
      "id": 2,
      "name": "Jeugd",
      "sort_order": 1,
      "teams_count": 8
    }
  ]
}

Teams — list

Auth required
GET /api/v1/clubs/{club}/teams

Returns all teams including players, staff, and category. Each member includes name, email, phone, date of birth, height, and jersey number. Filter by season using ?season_id or by category using ?category_id.

Name Type Required Description
season_id integer no Filter by season ID
category_id integer no Filter by category ID
200 OK — application/json
{
  "data": [
    {
      "id": 38,
      "name": "Heren 1",
      "short_name": "H1",
      "slug": "heren-1",
      "sort_order": 0,
      "season_id": 14,
      "finalized_at": "2025-09-01 00:00:00",
      "category": {
        "id": 1,
        "name": "Senioren"
      },
      "players": [
        {
          "id": 112,
          "first_name": "Sander",
          "last_name": "Vermeulen",
          "email": "s.vermeulen@svroodzwit.nl",
          "phone": "06-48271053",
          "date_of_birth": "1998-04-12",
          "height": 192,
          "jersey_number": 7,
          "position": "Setter",
          "sort_order": 0,
          "photo_url": "https://teamindeling.nl/storage/photos/sander-vermeulen.jpg"
        }
      ],
      "staff": [
        {
          "id": 7,
          "first_name": "Karin",
          "last_name": "Drost",
          "email": null,
          "phone": null,
          "date_of_birth": null,
          "height": null,
          "jersey_number": null,
          "position": "Head coach",
          "sort_order": 0,
          "photo_url": null
        }
      ]
    }
  ]
}

Team — detail

Auth required
GET /api/v1/clubs/{club}/teams/{team}

Returns a single team including all players, staff, and category. Also includes short_name and finalized_at. The {team} parameter is the team ID.

200 OK — application/json
{
  "data": {
    "id": 38,
    "name": "Heren 1",
    "short_name": "H1",
    "slug": "heren-1",
    "sort_order": 0,
    "season_id": 14,
    "finalized_at": "2025-09-01 00:00:00",
    "category": {
      "id": 1,
      "name": "Senioren"
    },
    "players": [ ... ],
    "staff": [ ... ]
  }
}
404 Team does not belong to this club

Players

Auth required
GET /api/v1/clubs/{club}/players

Returns all players of the club, sorted by last name. Includes date_of_birth, height, jersey_number, can_play_multiple_teams, sportlink_id, registered_at, registration_team, positions, and photo URL.

200 OK — application/json
{
  "data": [
    {
      "id": 112,
      "first_name": "Sander",
      "last_name": "Vermeulen",
      "full_name": "Sander Vermeulen",
      "email": "s.vermeulen@svroodzwit.nl",
      "phone": "06-48271053",
      "date_of_birth": "1998-04-12",
      "height": 192,
      "jersey_number": 7,
      "can_play_multiple_teams": false,
      "sportlink_id": "48271",
      "registered_at": "2025-08-15",
      "registration_team": "Heren 1",
      "positions": ["Setter"],
      "photo_url": "https://teamindeling.nl/storage/photos/sander-vermeulen.jpg"
    },
    {
      "id": 98,
      "first_name": "Lotte",
      "last_name": "Bakker",
      "full_name": "Lotte Bakker",
      "email": "l.bakker@svroodzwit.nl",
      "phone": "06-31047829",
      "date_of_birth": "2001-11-03",
      "height": 174,
      "jersey_number": 14,
      "can_play_multiple_teams": true,
      "sportlink_id": null,
      "registered_at": null,
      "registration_team": null,
      "positions": ["Libero"],
      "photo_url": null
    }
  ]
}