{"openapi":"3.1.0","info":{"title":"HALOWERK ladewerk","version":"1.0.0","description":"HALOWERK ladewerk — bezahlte Endpunkte nach x402. Preise in USDC auf Base Mainnet.","contact":{"url":"https://lade.halowerk.com/"}},"servers":[{"url":"https://lade.halowerk.com"}],"paths":{"/v1/nearby":{"post":{"operationId":"charging_nearby","summary":"E-Bike-Ladepunkte im Umkreis einer Koordinate suchen.","description":"OSM-Ladepunkte im Umkreis von 0,1 bis 50 km: Koordinaten, Entfernung, Steckertypen, Zugang, Betreiber, Öffnungszeiten und Gebühren, soweit getaggt. Fahrradtags sind Voraussetzung; unbestätigte Schuko-Punkte können ausdrücklich zugeschaltet werden. Keine aktuelle Belegungsprüfung.","tags":["ladewerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-85,"maximum":85},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.1,"maximum":50,"default":10},"connector":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","maxLength":40},"include_unconfirmed":{"type":"boolean","default":false},"limit":{"type":"integer","minimum":1,"maximum":200,"default":100}}}}}},"responses":{"200":{"description":"result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/route":{"post":{"operationId":"charging_along_route","summary":"E-Bike-Ladepunkte entlang einer übergebenen Route finden.","description":"Eine zusammenhängende Route als points, Google-Polyline (Genauigkeit 5 oder 6) oder GPX-Track/Route. Bis 300 km, 2000 Punkte und 20.000 km² Suchfläche. Ladepunkte im Korridor von 50 bis 5000 m mit Fortschritt und Luftlinien-Abstand. Kein Routing oder Map-Matching.","tags":["ladewerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","oneOf":[{"required":["points"]},{"required":["polyline"]},{"required":["gpx"]}],"additionalProperties":false,"properties":{"points":{"type":"array","minItems":2,"maxItems":2000,"items":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-85,"maximum":85},"lon":{"type":"number","minimum":-180,"maximum":180}}}},"polyline":{"type":"string","minLength":2,"maxLength":30000},"polyline_precision":{"type":"integer","enum":[5,6],"default":5},"gpx":{"type":"string","minLength":20,"maxLength":400000},"corridor_m":{"type":"integer","minimum":50,"maximum":5000,"default":1000},"connector":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","maxLength":40},"include_unconfirmed":{"type":"boolean","default":false},"limit":{"type":"integer","minimum":1,"maximum":200,"default":100}}}}}},"responses":{"200":{"description":"result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/detail":{"post":{"operationId":"charging_detail","summary":"OSM-Details zu einem einzelnen E-Bike-Ladepunkt abrufen.","description":"OSM-Objektkennung node/123, way/123 oder relation/123: Steckertypen, Akku-Schließfach, Kapazität, Öffnungszeiten, Gebühren, Betreiber, Zugang, Roh-Tags, Änderungsdatum und Quellenstand. Nicht erfasste Angaben bleiben null. Keine Live-Verfügbarkeit.","tags":["ladewerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^(node|way|relation)/[1-9][0-9]{0,15}$"}}}}}},"responses":{"200":{"description":"result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/range":{"post":{"operationId":"charging_range_check","summary":"Akku-Reichweite und mögliche Ladehalte entlang einer Route prüfen.","description":"Akku in Wh, Verbrauch in Wh/km, Startladung und Reserve sowie points, Polyline oder GPX. Liefert ein vereinfachtes Energiemodell mit Ladehalten an OSM-getaggten E-Bike-Punkten und passendem Stecker (Vorgabe Schuko). Vollladung je Halt angenommen. Luftlinien-Abstecher, keine Garantie von Betrieb, Öffnung oder Befahrbarkeit.","tags":["ladewerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["battery_wh","wh_per_km"],"oneOf":[{"required":["points"]},{"required":["polyline"]},{"required":["gpx"]}],"additionalProperties":false,"properties":{"points":{"type":"array","minItems":2,"maxItems":2000,"items":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-85,"maximum":85},"lon":{"type":"number","minimum":-180,"maximum":180}}}},"polyline":{"type":"string","minLength":2,"maxLength":30000},"polyline_precision":{"type":"integer","enum":[5,6],"default":5},"gpx":{"type":"string","minLength":20,"maxLength":400000},"corridor_m":{"type":"integer","minimum":50,"maximum":5000,"default":1000},"connector":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","maxLength":40,"default":"schuko"},"battery_wh":{"type":"number","minimum":50,"maximum":3000},"wh_per_km":{"type":"number","minimum":2,"maximum":50},"start_percent":{"type":"number","minimum":1,"maximum":100,"default":100},"reserve_percent":{"type":"number","minimum":0,"maximum":40,"default":10}}}}}},"responses":{"200":{"description":"result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}}},"components":{"schemas":{"PaymentRequired":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"description":{"type":"string"},"inputSchema":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}}}}},"securitySchemes":{"x402":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 Zahlungsnachweis"}}}}