{"openapi":"3.1.0","info":{"title":"Idle Value API","version":"1.0.0","description":"Öffentliche REST-API der Idle-Value-Plattform. Authentifizierung per API-Schlüssel (Bearer). Der API-Zugang ist im Enterprise-Tarif enthalten.","contact":{"name":"Idle Value Support","url":"http://localhost:3000/entwickler"}},"servers":[{"url":"http://localhost:3000/api/v1","description":"Produktion"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Konto","description":"Informationen zum authentifizierten Konto"},{"name":"Slots","description":"Produktionskapazitäten (Slots)"},{"name":"Buchungen","description":"Buchungen von Slots"}],"paths":{"/me":{"get":{"tags":["Konto"],"summary":"Aktuelles Konto abrufen","operationId":"getMe","responses":{"200":{"description":"Kontodaten","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/slots":{"get":{"tags":["Slots"],"summary":"Slots auflisten","description":"Listet die Slots des authentifizierten Anbieters. Filterbar über Status und paginiert über limit/offset.","operationId":"listSlots","parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["available","booked","closed"]},"description":"Nach Status filtern"},{"name":"limit","in":"query","schema":{"type":"integer","default":25,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Liste von Slots","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Slot"}},"total":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/bookings":{"get":{"tags":["Buchungen"],"summary":"Buchungen auflisten","description":"Listet Buchungen, die zu den Slots des Anbieters gehören bzw. die der Nutzer selbst getätigt hat.","operationId":"listBookings","parameters":[{"name":"status","in":"query","schema":{"type":"string"},"description":"Nach Buchungsstatus filtern"},{"name":"limit","in":"query","schema":{"type":"integer","default":25,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Liste von Buchungen","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Booking"}},"total":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"iv_live_…","description":"API-Schlüssel aus den Einstellungen → Integrationen → API-Zugang."}},"responses":{"Unauthorized":{"description":"API-Schlüssel fehlt oder ist ungültig","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"Tarif erlaubt keinen API-Zugang oder fehlender Scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Account":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["company","customer"]},"companyName":{"type":"string","nullable":true},"plan":{"type":"string"}}},"Slot":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"category":{"type":"string"},"status":{"type":"string"},"capacity":{"type":"integer"},"availableCapacity":{"type":"integer"},"pricePerUnit":{"type":"number"},"currency":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"location":{"type":"string"}}},"Booking":{"type":"object","properties":{"id":{"type":"integer"},"slotId":{"type":"integer"},"quantity":{"type":"integer"},"totalPrice":{"type":"number","nullable":true},"currency":{"type":"string"},"status":{"type":"string"},"paid":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}}}}}