{"openapi":"3.0.3","info":{"title":"HouseInTime REST API","version":"1.0.0","description":"Versionierter Objektzugang f\u00FCr dedizierte Firmeninstanzen. Benannte API-Schl\u00FCssel werden in den HouseInTime-Einstellungen erstellt und von AppChamp der Instanz zugeordnet. Privat- und Sammelinstanzen sind ausgeschlossen. \u00C4nderungen und L\u00F6schungen von Objekten sind in v1 nicht enthalten."},"servers":[{"url":"/v1"}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":[{"name":"Objekte"},{"name":"Dateien"}],"paths":{"/objects":{"get":{"operationId":"listObjects","tags":["Objekte"],"summary":"Objekte der Firmeninstanz auflisten","responses":{"200":{"description":"Objekt\u00FCbersicht","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ObjectSummary"}}}}},"401":{"description":"Ung\u00FCltiger oder widerrufener API-Schl\u00FCssel"},"403":{"description":"F\u00FCr diese Instanz nicht freigegeben"},"404":{"description":"Route oder Ressource in dieser Instanz nicht gefunden"},"429":{"description":"Zu viele Anfragen"},"503":{"description":"Instanz vor\u00FCbergehend nicht bereit","headers":{"Retry-After":{"description":"Wartezeit in Sekunden, sofern vorhanden","schema":{"type":"integer"}}}}}},"post":{"operationId":"createObject","tags":["Objekte"],"summary":"Ein Objekt anlegen","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateObject"}}}},"responses":{"201":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectSnapshot"}}}},"400":{"description":"Ung\u00FCltiger Name oder Request"},"401":{"description":"Ung\u00FCltiger oder widerrufener API-Schl\u00FCssel"},"403":{"description":"F\u00FCr diese Instanz nicht freigegeben"},"404":{"description":"Route oder Ressource in dieser Instanz nicht gefunden"},"429":{"description":"Zu viele Anfragen"},"503":{"description":"Instanz vor\u00FCbergehend nicht bereit","headers":{"Retry-After":{"description":"Wartezeit in Sekunden, sofern vorhanden","schema":{"type":"integer"}}}}}}},"/objects/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Objektkennung aus document.id"}],"get":{"operationId":"getObject","tags":["Objekte"],"summary":"Objektsnapshot lesen","responses":{"200":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectSnapshot"}}}},"401":{"description":"Ung\u00FCltiger oder widerrufener API-Schl\u00FCssel"},"403":{"description":"F\u00FCr diese Instanz nicht freigegeben"},"404":{"description":"Route oder Ressource in dieser Instanz nicht gefunden"},"429":{"description":"Zu viele Anfragen"},"503":{"description":"Instanz vor\u00FCbergehend nicht bereit","headers":{"Retry-After":{"description":"Wartezeit in Sekunden, sofern vorhanden","schema":{"type":"integer"}}}}}}},"/objects/{id}/media":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Objektkennung aus document.id"}],"post":{"operationId":"uploadOriginalFile","tags":["Dateien"],"summary":"Originaldatei an ein Objekt anh\u00E4ngen","description":"Roher Datei-Body, kein Multipart. Content-Type der Datei verwenden.","parameters":[{"name":"fileName","in":"query","required":true,"schema":{"type":"string"},"example":"plan.pdf"}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"application/pdf":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Erfolgreich","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaAsset"}}}},"400":{"description":"Datei oder Dateiname ung\u00FCltig"},"413":{"description":"Uploadgrenze \u00FCberschritten"},"401":{"description":"Ung\u00FCltiger oder widerrufener API-Schl\u00FCssel"},"403":{"description":"F\u00FCr diese Instanz nicht freigegeben"},"404":{"description":"Route oder Ressource in dieser Instanz nicht gefunden"},"429":{"description":"Zu viele Anfragen"},"503":{"description":"Instanz vor\u00FCbergehend nicht bereit","headers":{"Retry-After":{"description":"Wartezeit in Sekunden, sofern vorhanden","schema":{"type":"integer"}}}}}}},"/objects/{id}/media/{mediaId}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Objektkennung aus document.id"},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"downloadOriginalFile","tags":["Dateien"],"summary":"Originaldatei herunterladen","parameters":[{"name":"Range","in":"header","required":false,"schema":{"type":"string"},"example":"bytes=0-1023"}],"responses":{"200":{"description":"Originaldatei mit urspr\u00FCnglichem Content-Type","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"Teilbereich der Originaldatei","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"416":{"description":"Ung\u00FCltiger Bytebereich"},"401":{"description":"Ung\u00FCltiger oder widerrufener API-Schl\u00FCssel"},"403":{"description":"F\u00FCr diese Instanz nicht freigegeben"},"404":{"description":"Route oder Ressource in dieser Instanz nicht gefunden"},"429":{"description":"Zu viele Anfragen"},"503":{"description":"Instanz vor\u00FCbergehend nicht bereit","headers":{"Retry-After":{"description":"Wartezeit in Sekunden, sofern vorhanden","schema":{"type":"integer"}}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"acapi_\u2026","description":"Vollst\u00E4ndiger benannter API-Schl\u00FCssel. Nicht mit X-Api-Key kombinieren."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Alternative zum Bearer-Header, genau einen Schl\u00FCsselheader senden."}},"schemas":{"CreateObject":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"example":"Geb\u00E4ude A"},"description":{"type":"string","nullable":true}},"additionalProperties":false},"ObjectSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"revision":{"type":"integer","format":"int64"},"updatedAt":{"type":"string","format":"date-time"},"archived":{"type":"boolean"}},"additionalProperties":true},"ObjectDocument":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true}},"additionalProperties":true},"MediaAsset":{"type":"object","properties":{"id":{"type":"string"},"relativePath":{"type":"string"},"originalName":{"type":"string"},"contentType":{"type":"string"},"length":{"type":"integer","format":"int64"},"sha256":{"type":"string"},"addedAt":{"type":"string","format":"date-time"}},"additionalProperties":true},"ObjectSnapshot":{"type":"object","properties":{"revision":{"type":"integer","format":"int64"},"document":{"$ref":"#/components/schemas/ObjectDocument"},"media":{"type":"array","items":{"$ref":"#/components/schemas/MediaAsset"}},"updatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true}}}}