Koppelen met CoachHelpr
Laat de startopstelling van je team zien in je eigen app, op de clubsite of op het scorebord. Je haalt hem op bij één vast adres, met een sleutel voor jouw team.
Wat je kunt uitlezen
Je krijgt de startopstelling van de wedstrijd die nu bezig is, en anders die van de volgende wedstrijd. Heeft die nog geen opstelling, dan krijg je de standaardopstelling van het team.
Per speler krijg je de voornaam, de initialen, het rugnummer, de positie, of die speler aanvoerder is en de plek op het veld. Je ziet ook wie er op de bank begint.
Achternamen, notities en alles over fitheid of blessures geven we nooit mee.
Een sleutel krijgen
Een sleutel hoort bij één team. De coach van dat team maakt hem in de app, via Meer, Teams, het team en Koppelingen, en geeft hem aan jou.
De sleutel werkt niet meer zodra die coach het team niet meer coacht. Elke coach van het team kan hem intrekken, en wij ook.
Bewaar de sleutel op je server, nooit in een webpagina of app die anderen kunnen openen.
Vragen over koppelen stel je via het contactformulier.
Snel starten
Stuur de sleutel mee in de Authorization-header, met Bearer ervoor:
curl https://coachhelpr.app/api/v1/integration/start-lineup \
-H "Authorization: Bearer chk_..."Hetzelfde in JavaScript, op je server, met de sleutel in de omgevingsvariabele COACHHELPR_KEY:
const url = 'https://coachhelpr.app/api/v1/integration/start-lineup';
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.COACHHELPR_KEY}` },
});
if (!response.ok) throw new Error(`CoachHelpr answered ${response.status}`);
const lineup = await response.json();Je krijgt dan dit antwoord:
{
"team": {
"name": "MO14-1",
"clubName": "HC De Linden"
},
"source": "match",
"match": {
"kickoffAt": "2026-10-10T10:30:00.000Z",
"opponent": "HC Oosterpark MO14-2",
"isHome": true,
"pitch": "Veld 2",
"running": false
},
"lineupStatus": "confirmed",
"formation": "3-3-3-1",
"slots": [
{
"slot": 1,
"positionCode": "K",
"line": "keeper",
"x": 50,
"y": 95,
"player": {
"firstName": "Noa",
"initials": "NB",
"shirtNumber": 1,
"isCaptain": false
}
},
{
"slot": 2,
"positionCode": "CA",
"line": "defence",
"x": 50,
"y": 80,
"player": {
"firstName": "Amira",
"initials": "AY",
"shirtNumber": 4,
"isCaptain": true
}
},
{
"slot": 3,
"positionCode": "LA",
"line": "defence",
"x": 20,
"y": 64,
"player": {
"firstName": "Fleur",
"initials": "FJ",
"shirtNumber": 3,
"isCaptain": false
}
},
{
"slot": 4,
"positionCode": "VS",
"line": "defence",
"x": 50,
"y": 67,
"player": {
"firstName": "Lotte",
"initials": "LV",
"shirtNumber": 5,
"isCaptain": false
}
},
{
"slot": 5,
"positionCode": "RA",
"line": "defence",
"x": 80,
"y": 64,
"player": {
"firstName": "Sara",
"initials": "SK",
"shirtNumber": 2,
"isCaptain": false
}
},
{
"slot": 6,
"positionCode": "LM",
"line": "midfield",
"x": 20,
"y": 45,
"player": {
"firstName": "Julia",
"initials": "JM",
"shirtNumber": 8,
"isCaptain": false
}
},
{
"slot": 7,
"positionCode": "MM",
"line": "midfield",
"x": 50,
"y": 48,
"player": {
"firstName": "Evi",
"initials": "ED",
"shirtNumber": 6,
"isCaptain": false
}
},
{
"slot": 8,
"positionCode": "RM",
"line": "midfield",
"x": 80,
"y": 45,
"player": {
"firstName": "Tess",
"initials": "TH",
"shirtNumber": 7,
"isCaptain": false
}
},
{
"slot": 9,
"positionCode": "LV",
"line": "attack",
"x": 20,
"y": 25,
"player": {
"firstName": "Mila",
"initials": "MS",
"shirtNumber": 11,
"isCaptain": false
}
},
{
"slot": 10,
"positionCode": "SP",
"line": "attack",
"x": 50,
"y": 15,
"player": {
"firstName": "Zoë",
"initials": "ZP",
"shirtNumber": 9,
"isCaptain": false
}
},
{
"slot": 11,
"positionCode": "RV",
"line": "attack",
"x": 80,
"y": 25,
"player": null
}
],
"bench": [
{
"firstName": "Iris",
"initials": "IW",
"shirtNumber": 14,
"isCaptain": false
},
{
"firstName": "Yara",
"initials": "YB",
"shirtNumber": 16,
"isCaptain": false
}
],
"serverTime": "2026-10-07T14:02:11.000Z"
}Velden
Alle velden van het antwoord. Een pad met [] geldt voor elk item in die lijst.
| Veld | Type | Betekenis |
|---|---|---|
team | object | Het team van de sleutel. |
team.name | string | De naam van het team. |
team.clubName | string | null | De naam van de club, of null zonder club. |
source | "match" | "standard" | "none" | Waar de opstelling vandaan komt. match: de opstelling van de wedstrijd in het veld match. standard: de standaardopstelling van het team. none: er is geen opstelling. |
match | object | null | De wedstrijd die nu gespeeld wordt, en anders de volgende. Ook gevuld als die wedstrijd nog geen opstelling heeft: source is dan standard of none. null zonder wedstrijd. |
match.kickoffAt | string (date-time) | Wanneer de wedstrijd begint, in UTC. |
match.opponent | string | De tegenstander. |
match.isHome | boolean | true bij een thuiswedstrijd. |
match.pitch | string | null | Het veld, of null als dat niet bekend is. |
match.running | boolean | true als de wedstrijd nu gespeeld wordt. |
lineupStatus | "confirmed" | "proposal" | "outdated" | null | Alleen bij match, anders null. confirmed: de coach heeft de opstelling bevestigd. proposal: een voorstel dat de coach nog niet heeft bevestigd. outdated: er is iets veranderd sinds het voorstel, bijvoorbeeld wie er mee kan doen. |
formation | string | null | Het spelsysteem, zoals 3-3-3-1. null bij none. |
slots | object[] | Elke plek van het spelsysteem, op volgorde, ook een plek waar niemand staat. |
slots[].slot | integer | Het nummer van de plek, vanaf 1. |
slots[].positionCode | string | De afkorting van de positie, zoals K, LA of SP. |
slots[].line | "keeper" | "defence" | "midfield" | "attack" | De linie van de plek. |
slots[].x | integer | Waar de plek staat over de breedte van het veld, van 0 (links) tot 100 (rechts). |
slots[].y | integer | Waar de plek staat over de lengte van het veld, van 0 (bij het doel van de tegenstander) tot 100 (bij het eigen doel). |
slots[].player | object | null | De speler op deze plek, of null als de plek leeg is. |
slots[].player.firstName | string | De voornaam. |
slots[].player.initials | string | De initialen. |
slots[].player.shirtNumber | integer | null | Het rugnummer, of null als dat niet bekend is. |
slots[].player.isCaptain | boolean | true voor de aanvoerder. |
bench | object[] | Wie er op de bank begint. Leeg bij standard en none. |
bench[].firstName | string | De voornaam. |
bench[].initials | string | De initialen. |
bench[].shirtNumber | integer | null | Het rugnummer, of null als dat niet bekend is. |
bench[].isCaptain | boolean | true voor de aanvoerder. |
serverTime | string (date-time) | Het moment waarop we het antwoord maakten, in UTC. |
Fouten en limieten
401 auth_required- Geen sleutel, een verkeerde of ingetrokken sleutel, of een sleutel van een coach die het team niet meer coacht.
429 rate_limited- Meer dan 60 verzoeken in een minuut met dezelfde sleutel. Wacht even en probeer het dan opnieuw.
500 internal_error- Er ging bij ons iets mis. Probeer het later nog een keer.
Eén keer per minuut ophalen is ruim genoeg.
Aanroepen via MCP tellen mee voor dezelfde 60 per minuut. Verbinden kost een paar aanroepen, en elke keer dat de assistent de opstelling opvraagt komt er een bij.
De API stuurt geen CORS-headers, dus een webpagina op een andere site kan het antwoord niet lezen. Roep hem aan vanaf je server.
Gebruiken met AI (MCP)
Met MCP kan een AI-assistent zoals Claude of Cursor de opstelling van je team voor je uitlezen. Je gebruikt dezelfde sleutel, met dezelfde limiet. De tool heeft geen argumenten: de sleutel bepaalt het team.
- Adres
https://coachhelpr.app/api/v1/integration/mcp- Tool
get_start_lineup
In Claude Code voeg je de server toe met:
claude mcp add --transport http coachhelpr \
https://coachhelpr.app/api/v1/integration/mcp \
--header "Authorization: Bearer chk_..."In Cursor zet je dit in ~/.cursor/mcp.json:
{
"mcpServers": {
"coachhelpr": {
"url": "https://coachhelpr.app/api/v1/integration/mcp",
"headers": {
"Authorization": "Bearer chk_..."
}
}
}
}Claude Desktop gaat via mcp-remote, daarvoor heb je Node.js nodig. Zet dit in claude_desktop_config.json:
{
"mcpServers": {
"coachhelpr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://coachhelpr.app/api/v1/integration/mcp",
"--header",
"Authorization:${COACHHELPR_AUTH}"
],
"env": {
"COACHHELPR_AUTH": "Bearer chk_..."
}
}
}
}