handicap.report — Platz-API v1

Zentrale Stammdaten für eingebettete Golfplatz-Rechner (Handicap + Scramble). Reine Daten, keine Berechnung. CORS offen (von jeder Domain abrufbar). Antworten 5 Min gecacht.

Basis-URL

https://handicap.report/api/v1/courses.php

Endpunkte

GET ?id=<platz-id> — vollständige Platzdaten (Tees + Loch-Par/Stroke-Index)
GET (ohne Parameter) — Index aller Plätze (leichtgewichtig: id, club, ort, bundesland, holeCount, hasHoles)
GET ?q=<text> — Suche in Clubname/Ort  ·  ?bundesland=NRW — Filter  ·  ?scramble — nur Plätze mit Stroke-Index

Beispiel

GET /api/v1/courses.php?id=golfclub-niep-neukirchen-vluyn-18

{
  "id": "golfclub-niep-neukirchen-vluyn-18",
  "club": "Golfclub Niep", "ort": "Neukirchen-Vluyn", "bundesland": "NRW",
  "holeCount": 18, "courseName": "18-Loch-Meisterschaftsplatz",
  "tees": [
    { "name": "Gelb", "gender": "M", "cr": 73.6, "slope": 138, "par": 75, "unsicher": false },
    { "name": "Rot",  "gender": "F", "cr": 75.6, "slope": 132, "par": 75, "unsicher": false }
  ],
  "holes": [ { "number": 1, "par": 4, "strokeIndex": 3 }, ... ]   // null, wenn kein Stroke-Index vorhanden
}

Felder

FeldBedeutung
tees[]je Abschlagbox × Geschlecht: name, gender (M/F), cr, slope, par, unsicher (Quelle ungeprüft)
holes[]je Loch: number, par, strokeIndex (1..N, eindeutig). null = kein Stroke-Index (Scramble nicht möglich, Handicap-Rechner ok).

Nutzung im Embed

Einmal pro Platz die id referenzieren, Antwort cachen, bei Nicht-Erreichbarkeit auf eine eingebettete Fallback-Config zurückfallen. Rechenlogik bleibt clientseitig.

const r = await fetch("https://handicap.report/api/v1/courses.php?id=" + courseId);
const course = await r.json(); // → tees + holes für die Rechner

Stand: 2026-06-18 · handicap.report