{"openapi":"3.1.0","info":{"title":"Dreiraum Coworking API","version":"0.1.0","description":"Strukturierte Schnittstelle für KI-Agenten zu Dreiraum Coworking. Stand: Schritt 4 — Read-Endpoints via Core-Adapter, OpenAPI aus Zod-Schemas, Doku unter /docs (Scalar). Booking-POST und MCP folgen.","contact":{"name":"Dreiraum Coworking","url":"https://dreiraum-coworking.de"}},"servers":[{"url":"https://api.dreiraum-coworking.de/api/v1","description":"Aktueller Host"},{"url":"https://dreiraum-coworking.de/api/v1","description":"Produktion (sobald deployed)"}],"tags":[{"name":"system","description":"Health / Discovery"},{"name":"catalog","description":"Standorte, Kategorien, Räume — Read-Operationen"}],"components":{"schemas":{"Location":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"name":{"type":"string","description":"Core-Originalname (Name + Adresse).","example":"Dreiraum Hauptstandort Korbach, Nordwall 12"},"displayName":{"type":"string","description":"Erster Segment des Namens (ohne Adresse).","example":"Dreiraum Hauptstandort Korbach"},"address":{"type":["string","null"],"example":"Nordwall 12"},"city":{"type":"string","example":"Korbach"},"country":{"type":"string","minLength":2,"maxLength":2,"example":"DE"},"active":{"type":"boolean"},"spaceCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time","example":"2025-03-24T14:54:31.347Z"},"updatedAt":{"type":["string","null"],"format":"date-time","example":"2025-03-24T14:54:31.347Z"}},"required":["id","name","displayName","address","city","country","active","spaceCount","createdAt","updatedAt"]},"SpaceType":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"locationId":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"name":{"type":"string","description":"Kategorie-Name aus dem Quellsystem.","example":"Meeting / Workshop"},"description":{"type":["string","null"]},"sortOrder":{"type":"integer"},"active":{"type":"boolean"}},"required":["id","locationId","name","description","sortOrder","active"]},"Space":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"title":{"type":"string","example":"Meeting- & Coachingraum (EG)"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"size":{"type":["integer","null"],"description":"Fläche in m²."},"features":{"type":"array","items":{"type":"string"}},"includedFacilities":{"type":"array","items":{"$ref":"#/components/schemas/Facility"}},"roomSetups":{},"images":{"type":"array","items":{"type":"string"},"description":"Bild-Keys aus dem Quellsystem, keine vollständigen URLs."},"accessHours":{},"prices":{"$ref":"#/components/schemas/PriceTriplet"},"credits":{"$ref":"#/components/schemas/CreditTriplet"},"spaceType":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"name":{"type":"string"}},"required":["id","name"]},"location":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"name":{"type":"string"}},"required":["id","name"]},"active":{"type":"boolean"}},"required":["id","title","subtitle","description","size","features","includedFacilities","images","prices","credits","spaceType","location","active"]},"Facility":{"type":"object","properties":{"type":{"type":"string"},"icon":{"type":"string"}},"required":["type","icon"]},"PriceTriplet":{"type":"object","properties":{"hourly":{"type":["integer","null"]},"daily":{"type":["integer","null"]},"monthly":{"type":["integer","null"]},"currency":{"type":"string","enum":["EUR"]},"priceNote":{"type":"string"}},"required":["hourly","daily","monthly","currency","priceNote"],"description":"Preise stammen als Rohwerte aus dem Quellsystem. Einheit (EUR vs. Cent) ist pro Produkt unterschiedlich gepflegt; das Feld priceNote weist darauf hin."},"CreditTriplet":{"type":"object","properties":{"hourly":{"type":["number","null"]},"daily":{"type":["number","null"]},"monthly":{"type":["number","null"]}},"required":["hourly","daily","monthly"]},"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"service":{"type":"string","enum":["dreiraum-api"]},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time","example":"2025-03-24T14:54:31.347Z"}},"required":["status","service","version","timestamp"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]}},"required":["error"]},"LocationList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Location"}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0}},"required":["count"],"additionalProperties":{}}},"required":["data","meta"]},"SpaceTypeList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SpaceType"}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0}},"required":["count"],"additionalProperties":{}}},"required":["data","meta"]},"SpaceList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Space"}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0}},"required":["count"],"additionalProperties":{}}},"required":["data","meta"]},"LocationDetail":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Location"},{"type":"object","properties":{"spaceTypes":{"type":"array","items":{"$ref":"#/components/schemas/SpaceType"}},"spaces":{"type":"array","items":{"$ref":"#/components/schemas/Space"}}},"required":["spaceTypes","spaces"]}]}},"required":["data"]},"SpaceSingle":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Space"}},"required":["data"]}},"parameters":{}},"paths":{"/health":{"get":{"tags":["system"],"summary":"Liveness-Check","responses":{"200":{"description":"Service ist erreichbar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/locations":{"get":{"tags":["catalog"],"summary":"Standorte auflisten","parameters":[{"schema":{"type":"string","enum":["true","false"],"description":"Auch deaktivierte Standorte zurückgeben."},"required":false,"description":"Auch deaktivierte Standorte zurückgeben.","name":"include_inactive","in":"query"}],"responses":{"200":{"description":"Liste der Standorte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationList"}}}}}}},"/locations/{id}":{"get":{"tags":["catalog"],"summary":"Standort mit Spaces und Kategorien","parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"required":true,"description":"UUID v4 aus dem Core-Quellsystem.","name":"id","in":"path"}],"responses":{"200":{"description":"Standort mit eingebetteten Spaces und SpaceTypes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationDetail"}}}},"404":{"description":"Standort nicht gefunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/space-types":{"get":{"tags":["catalog"],"summary":"Kategorien (Space-Types) auflisten","parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"required":false,"description":"UUID v4 aus dem Core-Quellsystem.","name":"location_id","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"include_inactive","in":"query"}],"responses":{"200":{"description":"Liste der Kategorien","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceTypeList"}}}}}}},"/spaces":{"get":{"tags":["catalog"],"summary":"Spaces (buchbare Räume) auflisten","parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"required":false,"description":"UUID v4 aus dem Core-Quellsystem.","name":"location_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"required":false,"description":"UUID v4 aus dem Core-Quellsystem.","name":"space_type_id","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"include_inactive","in":"query"}],"responses":{"200":{"description":"Liste der Spaces mit Preisen und Features","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceList"}}}}}}},"/spaces/{id}":{"get":{"tags":["catalog"],"summary":"Einzelner Space mit Preisen, Features, Bildern","parameters":[{"schema":{"type":"string","format":"uuid","description":"UUID v4 aus dem Core-Quellsystem.","example":"e999af60-1b75-4225-abe9-3eefe27f2eed"},"required":true,"description":"UUID v4 aus dem Core-Quellsystem.","name":"id","in":"path"}],"responses":{"200":{"description":"Space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceSingle"}}}},"404":{"description":"Space nicht gefunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}