Teamindeling.nl
API documentatie v1 Importeren in Postman
NL EN

API documentatie

REST API voor het ophalen van club-, seizoen- en teamdata.

Authenticatie

Roep eerst POST /api/v1/license/verify aan met je licentiesleutel. Je ontvangt een bearer_token terug. Stuur die token mee als Authorization: Bearer ... header bij alle verdere verzoeken.

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

Zonder geldige token retourneert de API 401 Unauthorized.

Terug naar inhoudsopgave

Basis-URL

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

De {club}-parameter in de URL is de slug van de club, bijv. sv-rood-wit-zwolle.

Terug naar inhoudsopgave

Licentie verifiëren

POST /api/v1/license/verify

Controleert of een licentiesleutel geldig is voor een bepaalde club. Geeft bij succes een <code>bearer_token</code> terug waarmee alle overige endpoints beveiligd zijn. Slaat het verificatietijdstip op.

Naam Type Vereist Omschrijving
license_key string ja De licentiesleutel
club_slug string ja Slug van de 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

Seizoenen — lijst

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

Geeft standaard alleen het actieve seizoen terug. Stuur ?all=true mee voor alle seizoenen.

Naam Type Vereist Omschrijving
all boolean nee true = alle seizoenen, false (standaard) = alleen actief
200 OK — application/json
{
  "data": [
    {
      "id": 14,
      "name": "2025/2026",
      "start_date": "2025-08-01",
      "end_date": "2026-06-30",
      "is_active": true
    }
  ]
}

Seizoen — detail

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

Geeft een seizoen terug inclusief alle teams en hun spelers.

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 Seizoen behoort niet tot deze club

Categorieën

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

Geeft alle teamcategorieën van de club terug, gesorteerd op volgorde. Inclusief het aantal teams per categorie.

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 — lijst

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

Geeft alle teams terug inclusief spelers, staf en categorie. Elk teamlid bevat naam, e-mail, telefoon, geboortedatum, lengte en rugnummer. Filter op seizoen met ?season_id of op categorie met ?category_id.

Naam Type Vereist Omschrijving
season_id integer nee Filter op seizoen-ID
category_id integer nee Filter op categorie-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 vereist
GET /api/v1/clubs/{club}/teams/{team}

Geeft één team terug inclusief alle spelers, staf en categorie. Bevat ook short_name en finalized_at. De {team}-parameter is het 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 behoort niet tot deze club

Spelers

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

Geeft alle spelers van de club terug, gesorteerd op achternaam. Inclusief geboortedatum, lengte, rugnummer, can_play_multiple_teams, sportlink_id, registratiedatum, registratieteam, posities en foto-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
    }
  ]
}