{"openapi": "3.0.3", "info": {"title": "Café in meiner Nähe API", "version": "1.0.0", "description": "Agent-native Café-Verzeichnis. Geo-sortierte Suche je PLZ/Koordinaten, mit Buchbarkeit.", "x-versions": [{"name": "v1", "status": "current", "baseUrl": "https://cafe-in-der-naehe.de/v1"}], "x-deprecation-policy": "Soll ein Endpunkt ersetzt werden, bleibt die alte Version 12 Monate unter /v{N} erreichbar; Deprecation wird über x-deprecation:true am Path-Object + Header markiert."}, "x-versioning": "URL-Pfad-Versionierung unter /v1, /v2, ...", "x-openai-isConsequential": false, "servers": [{"url": "https://cafe-in-der-naehe.de/v1"}], "paths": {"/v1/search": {"get": {"summary": "Such-Ergebnisse", "description": "Geo-sortierte Suche nach Cafés. Übergib plz (empfohlen), lat/lon oder q.", "operationId": "searchcafe", "parameters": [{"name": "q", "in": "query", "description": "Suchbegriff (Name oder Stadt)", "schema": {"type": "string"}}, {"name": "plz", "in": "query", "description": "Deutsche Postleitzahl, z. B. 10115", "schema": {"type": "string"}}, {"name": "lat", "in": "query", "description": "Breitengrad (mit lon)", "schema": {"type": "number"}}, {"name": "lon", "in": "query", "description": "Längengrad (mit lat)", "schema": {"type": "number"}}, {"name": "limit", "in": "query", "description": "Maximale Ergebnisanzahl", "schema": {"type": "integer", "default": 10}}, {"name": "booking", "in": "query", "description": "Nur online-buchbare Betriebe", "schema": {"type": "string", "enum": ["only", "true", "false"]}}], "responses": {"200": {"description": "JSON-Suchergebnisse", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SearchResult"}}}}, "400": {"$ref": "#/components/responses/Error"}, "404": {"$ref": "#/components/responses/Error"}, "429": {"$ref": "#/components/responses/RateLimited"}}}}, "/v1/records": {"get": {"summary": "Alle Datensätze", "operationId": "recordscafe", "responses": {"200": {"description": "Alle Datensätze", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RecordList"}}}}, "400": {"$ref": "#/components/responses/Error"}}}}, "/v1/booking-offers": {"get": {"summary": "Online-buchbare Betriebe", "operationId": "bookingOfferscafe", "responses": {"200": {"description": "Booking-Angebote", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BookingList"}}}}}}}}, "components": {"responses": {"Error": {"description": "Fehler", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "RateLimited": {"description": "Zu viele Anfragen", "headers": {"Retry-After": {"schema": {"type": "integer"}, "description": "Sekunden bis zum nächsten erlaubten Request"}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "schemas": {"Problem": {"type": "object", "required": ["title", "status", "code"], "properties": {"type": {"type": "string"}, "title": {"type": "string", "description": "Menschlich-lesbare Fehlerbeschreibung"}, "status": {"type": "integer"}, "code": {"type": "string", "description": "Maschinenlesbarer Fehlercode"}, "detail": {"type": "string"}, "instance": {"type": "string"}}}, "BusinessRecord": {"type": "object", "properties": {"name": {"type": "string"}, "city": {"type": "string"}, "street": {"type": "string"}, "postcode": {"type": "string"}, "lat": {"type": "number"}, "lon": {"type": "number"}, "phone": {"type": "string"}, "website": {"type": "string"}, "completeness_score": {"type": "number"}, "booking_capable": {"type": "boolean"}, "booking_platform": {"type": "string"}, "booking_url": {"type": "string"}, "distance_km": {"type": "number"}}}, "SearchResult": {"type": "object", "properties": {"meta": {"type": "object"}, "records": {"type": "array", "items": {"$ref": "#/components/schemas/BusinessRecord"}}}}, "RecordList": {"type": "object", "properties": {"count": {"type": "integer"}, "records": {"type": "array", "items": {"$ref": "#/components/schemas/BusinessRecord"}}}}, "BookingList": {"type": "object", "properties": {"meta": {"type": "object"}, "offers": {"type": "array", "items": {"type": "object"}}}}}}}