{"openapi":"3.1.0","info":{"title":"Kamai API","description":"HTTP API for third-party integrations and partner companies.","version":"0.1.0"},"paths":{"/v1/blueprints/upload":{"post":{"tags":["Blueprints / Actions"],"summary":"Upload Blueprint","description":"Upload a blueprint file directly in the request body.\n\nSuitable for smaller files. For large files, use the two-step\n`/upload/init` + `/upload/complete` flow instead.","operationId":"upload_blueprint_v1_blueprints_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Target project ID. When omitted, the user's Default Project is used or created.","title":"Project Id"},"description":"Target project ID. When omitted, the user's Default Project is used or created."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_blueprint_v1_blueprints_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadBlueprintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/blueprints/upload/init":{"post":{"tags":["Blueprints / Actions"],"summary":"Init Blueprint Upload","description":"Step 1 of the two-step upload: request a pre-signed URL for a blueprint.\n\nUpload the file with an HTTP PUT to the returned `signed_url`, sending exactly\nthe headers in `required_headers`, then call `/upload/complete` with the\nreturned `file_uuid`. Recommended for large files.","operationId":"init_blueprint_upload_v1_blueprints_upload_init_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/blueprints/upload/complete":{"post":{"tags":["Blueprints / Actions"],"summary":"Complete Blueprint Upload","description":"Step 2 of the two-step upload: finalize the uploaded file and start processing.","operationId":"complete_blueprint_upload_v1_blueprints_upload_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadBlueprintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/blueprints/{blueprint_id}":{"get":{"tags":["Blueprints"],"summary":"Get Blueprint","operationId":"get_blueprint_v1_blueprints__blueprint_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"blueprint_id","in":"path","required":true,"schema":{"type":"string","title":"Blueprint Id"}},{"name":"include_text","in":"query","required":false,"schema":{"type":"boolean","description":"Include the sheet's words in `text`. Off by default so an existing integration sees no change in payload; a sheet carries thousands of words against a few hundred features.","default":false,"title":"Include Text"},"description":"Include the sheet's words in `text`. Off by default so an existing integration sees no change in payload; a sheet carries thousands of words against a few hundred features."},{"name":"text_limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":1000,"title":"Text Limit"}},{"name":"text_offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Text Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlueprintDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Blueprints"],"summary":"Update Blueprint","operationId":"update_blueprint_v1_blueprints__blueprint_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"blueprint_id","in":"path","required":true,"schema":{"type":"string","title":"Blueprint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlueprintUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlueprintUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/projects":{"get":{"tags":["Projects"],"summary":"List Projects","operationId":"list_projects_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Projects"],"summary":"Create Project","operationId":"create_project_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/projects/{project_id}":{"get":{"tags":["Projects"],"summary":"Get Project","operationId":"get_project_v1_projects__project_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Projects"],"summary":"Update Project","operationId":"update_project_v1_projects__project_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Projects"],"summary":"Delete Project","operationId":"delete_project_v1_projects__project_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BlueprintDetailsResponse":{"properties":{"blueprint":{"$ref":"#/components/schemas/BlueprintPublic","description":"Blueprint details"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Additional information message"}},"type":"object","required":["blueprint"],"title":"BlueprintDetailsResponse","example":{"blueprint":{"created":"2026-08-04T09:12:44.318000Z","geojson":{"features":[{"id":"root","properties":{"id":"root","kind":"folder","class":"other","name":"Root Folder","visible":true,"is_user_drawn":false,"position":0.0,"relations":[],"measurements":{}},"type":"Feature"},{"geometry":{"coordinates":[[[200.0,200.0],[500.0,200.0],[500.0,620.0],[200.0,620.0],[200.0,200.0]]],"type":"Polygon"},"id":"room-1","properties":{"id":"room-1","kind":"area","class":"room","sub_class":"wet room","name":"Bathroom","color":{"a":255,"b":74,"g":194,"r":66},"visible":true,"is_user_drawn":false,"parent_id":"root","position":0.0,"relations":["wall-1","open-1"],"measurements":{"area_m2":8.324112384,"perimeter_m":11.70432}},"type":"Feature"},{"geometry":{"coordinates":[[[196.0,196.0],[504.0,196.0],[504.0,204.0],[196.0,204.0],[196.0,196.0]]],"type":"Polygon"},"id":"wall-1","properties":{"id":"wall-1","kind":"area","class":"wall","sub_class":"wet wall","name":"Wall","color":{"a":255,"b":128,"g":120,"r":120},"visible":true,"is_user_drawn":false,"parent_id":"root","position":1.0,"relations":["room-1","open-1"],"measurements":{"area_m2":0.162782642176,"perimeter_m":5.136896}},"type":"Feature"},{"geometry":{"coordinates":[[[300.0,194.0],[392.0,194.0],[392.0,206.0],[300.0,206.0],[300.0,194.0]]],"type":"Polygon"},"id":"open-1","properties":{"id":"open-1","kind":"object","class":"opening","sub_class":"single swing door","name":"Single swing door","color":{"a":255,"b":46,"g":148,"r":214},"visible":true,"is_user_drawn":false,"parent_id":"root","position":2.0,"opening_width_units":92.0,"tag":"D-01","relations":["room-1","wall-1"],"measurements":{"area_m2":0.072935079936,"opening_width_m":0.747776,"perimeter_m":1.690624}},"type":"Feature"}],"type":"FeatureCollection"},"id":"4b681ce0-ddbd-4931-b696-f6c9ca7999a4","name":"A-101 Floor Plan.pdf","scale":{"drawing":0.25,"label":"1/4\" = 1'-0\"","manual_scaling_needed":false,"real":12.0,"type":"architectural","units":"imperial"},"updated":"2026-08-10T18:05:52.902000Z","url_dpi":150.0,"url_height":3300.0,"url_width":5100.0},"message":"Blueprint details retrieved successfully"}},"BlueprintFeaturePropertiesPublic":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"$ref":"#/components/schemas/FeatureKind","description":"What the feature IS geometrically. Drives which measurements apply."},"class":{"$ref":"#/components/schemas/FeatureClass","description":"Coarse semantic class."},"sub_class":{"anyOf":[{"$ref":"#/components/schemas/FeatureSubClass"},{"type":"null"}],"description":"The specific type where known ('single swing door', 'sink'). `wet room`/`wet wall` are DERIVED from relations, never detected."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Display label."},"color":{"anyOf":[{"$ref":"#/components/schemas/FeatureColorPublic"},{"type":"null"}]},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Visible","description":"Visibility in this hierarchy."},"is_user_drawn":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is User Drawn","description":"True when a user drew it rather than the detector."},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"Parent feature id; `null` on the root folder. With `position`, this is the ONLY hierarchy source — there is no reverse index."},"position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Position","description":"Sort order among siblings. A float so an item can be inserted between two others without renumbering."},"folder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder","description":"The parent's NAME — the group this feature lives under, resolved so grouping needs no client-side join over `parent_id`. `null` on roots and features outside the hierarchy."},"opening_width_units":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opening Width Units","description":"Door/window clear width in BLUEPRINT units (the drawing's own coordinate space). See `measurements.opening_width_m` for metres."},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"The mark written on the drawing ('D-01'). Free text, and NOT an identifier — objects deliberately share a tag, so never join or de-duplicate on it."},"relations":{"items":{"type":"string"},"type":"array","title":"Relations","description":"Ids of features this one is spatially related to — an undirected edge set, so if A lists B then B lists A. Untyped by design: filter the ids by the neighbour's `class` for a typed view (a room's walls are the related ids whose class is `wall`/`wall_centerline`)."},"measurements":{"$ref":"#/components/schemas/FeatureMeasurementsPublic"}},"type":"object","required":["id","kind","class"],"title":"BlueprintFeaturePropertiesPublic","description":"One feature's properties in the coarse feature shape."},"BlueprintFeaturePublic":{"properties":{"type":{"type":"string","title":"Type","default":"Feature"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"GeoJSON geometry in blueprint coordinates. `null` for folders."},"properties":{"$ref":"#/components/schemas/BlueprintFeaturePropertiesPublic"}},"type":"object","required":["properties"],"title":"BlueprintFeaturePublic","description":"A GeoJSON Feature. `geometry` is `null` only for folders."},"BlueprintGeoJSONPublic":{"properties":{"type":{"type":"string","title":"Type"},"features":{"items":{"$ref":"#/components/schemas/BlueprintFeaturePublic"},"type":"array","title":"Features"}},"type":"object","required":["type"],"title":"BlueprintGeoJSONPublic"},"BlueprintPublic":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"scale":{"anyOf":[{"$ref":"#/components/schemas/BlueprintScalePublic"},{"type":"null"}]},"url_height":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Url Height"},"url_width":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Url Width"},"url_dpi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Url Dpi"},"geojson":{"anyOf":[{"$ref":"#/components/schemas/BlueprintGeoJSONPublic"},{"type":"null"}]},"text":{"items":{"$ref":"#/components/schemas/BlueprintTextPublic"},"type":"array","title":"Text","description":"The sheet's words. Read-only; ignored if sent on an update. Empty unless requested with `include_text`."},"text_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Text Total","description":"Total words on the sheet, which may exceed len(text) because the page is capped — page with text_limit/text_offset until you have seen this many. None when text was not requested."},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"}},"type":"object","required":["id","name","created","updated"],"title":"BlueprintPublic"},"BlueprintReadyRecord":{"properties":{"pdf_file":{"type":"boolean","title":"Pdf File","default":false},"main_tile":{"type":"boolean","title":"Main Tile","default":false},"all_tiles":{"type":"boolean","title":"All Tiles","default":false},"preview_image":{"type":"boolean","title":"Preview Image","default":false},"vector_image":{"type":"boolean","title":"Vector Image","default":false},"geojson":{"type":"boolean","title":"Geojson","default":false},"regions":{"type":"boolean","title":"Regions","default":false},"ocr_text":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ocr Text"},"ml_metadata":{"type":"boolean","title":"Ml Metadata","default":false},"ocr_connected":{"type":"boolean","title":"Ocr Connected","default":false},"autoclassify_polygons":{"type":"boolean","title":"Autoclassify Polygons","default":false}},"type":"object","title":"BlueprintReadyRecord"},"BlueprintRecordPublic":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"ready":{"$ref":"#/components/schemas/BlueprintReadyRecord","default":{"pdf_file":false,"main_tile":false,"all_tiles":false,"preview_image":false,"vector_image":false,"geojson":false,"regions":false,"ml_metadata":false,"ocr_connected":false,"autoclassify_polygons":false}}},"type":"object","required":["id","name","created","updated"],"title":"BlueprintRecordPublic"},"BlueprintScalePublic":{"properties":{"drawing":{"type":"number","exclusiveMinimum":0.0,"title":"Drawing"},"real":{"type":"number","exclusiveMinimum":0.0,"title":"Real"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"type":{"$ref":"#/components/schemas/ScaleType"},"units":{"$ref":"#/components/schemas/ScaleUnits"},"manual_scaling_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Scaling Needed"}},"type":"object","required":["drawing","real","type","units"],"title":"BlueprintScalePublic"},"BlueprintTextPublic":{"properties":{"id":{"type":"string","title":"Id","description":"Stable id for this word"},"text":{"type":"string","title":"Text","description":"The word itself"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence","description":"0..1. The OCR score for a recognised word; 1.0 for text read out of the PDF's own digital layer."},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"The word's box in blueprint coordinates, as GeoJSON. Follows the true (possibly rotated) glyph run, not an upright box."},"room_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Room Id","description":"The room this word is printed in, if any."},"wall_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wall Id","description":"The wall this word is printed on, if any."}},"type":"object","required":["id","text"],"title":"BlueprintTextPublic","description":"One word read off the sheet.\n\nSeparate from `features` on purpose: text is not part of the legend/folder\ntree — it has no folder, no position and no place in the hierarchy — and a\nsheet carries thousands of words against a few hundred real features."},"BlueprintUpdateRequest":{"properties":{"scale":{"anyOf":[{"$ref":"#/components/schemas/Scale"},{"type":"null"}],"description":"Scale information"},"geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geojson","description":"Replacement feature collection in the coarse feature shape (the same shape a read returns). Validated for structural integrity — duplicate ids, broken/cyclic hierarchies and geometry that disagrees with its kind are rejected — before it is written to the SQL store."}},"type":"object","title":"BlueprintUpdateRequest"},"BlueprintUploadResponse":{"properties":{"blueprint":{"anyOf":[{"$ref":"#/components/schemas/BlueprintPublic"},{"type":"null"}],"description":"Updated blueprint details"},"message":{"type":"string","title":"Message","description":"Update confirmation message"}},"type":"object","required":["message"],"title":"BlueprintUploadResponse"},"Body_upload_blueprint_v1_blueprints_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File","description":"Blueprint file to upload"}},"type":"object","required":["file"],"title":"Body_upload_blueprint_v1_blueprints_upload_post"},"CompleteUploadRequest":{"properties":{"file_uuid":{"type":"string","title":"File Uuid","description":"The file_uuid returned by /upload/init."}},"type":"object","required":["file_uuid"],"title":"CompleteUploadRequest"},"FeatureClass":{"type":"string","enum":["room","wall","wall_centerline","opening","footprint","other"],"title":"FeatureClass"},"FeatureColorPublic":{"properties":{"r":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"R"},"g":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"G"},"b":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"B"},"a":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"A"}},"type":"object","required":["r","g","b","a"],"title":"FeatureColorPublic","description":"Display colour, 0-255 per channel."},"FeatureKind":{"type":"string","enum":["area","line","object","text","folder"],"title":"FeatureKind"},"FeatureMeasurementsPublic":{"properties":{"area_m2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area M2","description":"Polygon area, m²."},"perimeter_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Perimeter M","description":"Polygon boundary length, m (holes included)."},"length_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Length M","description":"Line length, m."},"opening_width_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opening Width M","description":"Door/window clear width, m. Converted from `opening_width_units`."}},"type":"object","title":"FeatureMeasurementsPublic","description":"Server-derived real-world measurements, **SI**.\n\nEvery field carries its unit in its name, because the pre-2026 shape did not:\nit returned ``area`` in square feet and ``perimeter``/``length`` in feet.\n``null`` means *not applicable to this feature*, which is distinct from a\nmeasured zero — a line has no area, a folder has no geometry at all.\n\nPopulated from the GEOMETRY, not from ``kind``: an object drawn as a polygon\ndoes carry an ``area_m2``. Objects are counted, not measured, so do not sum\nthem into a room total."},"FeatureSubClass":{"type":"string","enum":["window","swing window","safe room window","single swing door","double swing door","sliding door","toilet","sink","bathtub","shower","cooktop","stairs","elevator","wet room","wet wall"],"title":"FeatureSubClass"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InitUploadRequest":{"properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Target project ID. When omitted, the user's Default Project is used or created."},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Desired filename. When omitted, a UTC-timestamped default is used. Sanitized server-side."},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type","description":"File MIME type. Defaults to application/pdf; only application/pdf is allowed for now."}},"type":"object","title":"InitUploadRequest"},"InitUploadResponse":{"properties":{"file_uuid":{"type":"string","title":"File Uuid","description":"Identifier for this pending upload; pass it to /upload/complete."},"user_id":{"type":"string","title":"User Id","description":"Authenticated user ID."},"project_id":{"type":"string","title":"Project Id","description":"Resolved project ID."},"signed_url":{"type":"string","title":"Signed Url","description":"Pre-signed URL. Upload the file here with an HTTP PUT."},"method":{"type":"string","title":"Method","description":"HTTP method to use against signed_url.","default":"PUT"},"expires_in":{"type":"integer","title":"Expires In","description":"Seconds until the signed URL expires."},"required_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Required Headers","description":"Exact headers the client MUST send on the PUT (the signature enforces them)."}},"type":"object","required":["file_uuid","user_id","project_id","signed_url","expires_in","required_headers"],"title":"InitUploadResponse"},"JobPublic":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"blueprint_id":{"type":"string","title":"Blueprint Id"},"filename":{"type":"string","title":"Filename"},"progress":{"type":"integer","title":"Progress","default":0}},"type":"object","required":["id","status","blueprint_id","filename"],"title":"JobPublic"},"ProjectCreateRequest":{"properties":{"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":2048,"title":"Description","default":""}},"type":"object","required":["name"],"title":"ProjectCreateRequest"},"ProjectCreateResponse":{"properties":{"project":{"$ref":"#/components/schemas/ProjectPublic"},"message":{"type":"string","title":"Message","default":"Project created successfully"}},"type":"object","required":["project"],"title":"ProjectCreateResponse"},"ProjectDeleteResponse":{"properties":{"project_id":{"type":"string","title":"Project Id"},"message":{"type":"string","title":"Message","default":"Project deleted successfully"}},"type":"object","required":["project_id"],"title":"ProjectDeleteResponse"},"ProjectDetailPublic":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"last_modified":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Modified","description":"Last modified timestamp in milliseconds"},"jobs":{"additionalProperties":{"$ref":"#/components/schemas/JobPublic"},"type":"object","title":"Jobs"},"blueprint_records":{"additionalProperties":{"$ref":"#/components/schemas/BlueprintRecordPublic"},"type":"object","title":"Blueprint Records"}},"type":"object","required":["id","name","description"],"title":"ProjectDetailPublic"},"ProjectDetailResponse":{"properties":{"project":{"$ref":"#/components/schemas/ProjectDetailPublic"},"message":{"type":"string","title":"Message","default":"Project fetched successfully"}},"type":"object","required":["project"],"title":"ProjectDetailResponse"},"ProjectListResponse":{"properties":{"projects":{"items":{"$ref":"#/components/schemas/ProjectPublic"},"type":"array","title":"Projects"},"message":{"type":"string","title":"Message","default":"Projects fetched successfully"}},"type":"object","required":["projects"],"title":"ProjectListResponse"},"ProjectPublic":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"last_modified":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Modified","description":"Last modified timestamp in milliseconds"}},"type":"object","required":["id","name","description"],"title":"ProjectPublic"},"ProjectUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":256,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Description"}},"type":"object","title":"ProjectUpdateRequest"},"ProjectUpdateResponse":{"properties":{"project":{"$ref":"#/components/schemas/ProjectPublic"},"message":{"type":"string","title":"Message","default":"Project updated successfully"}},"type":"object","required":["project"],"title":"ProjectUpdateResponse"},"Scale":{"properties":{"drawing":{"type":"number","exclusiveMinimum":0.0,"title":"Drawing","description":"The value for the scale on the drawing"},"real":{"type":"number","exclusiveMinimum":0.0,"title":"Real","description":"The value for the scale in the real world"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"type":{"$ref":"#/components/schemas/ScaleType","description":"The type of the scale"},"units":{"$ref":"#/components/schemas/ScaleUnits","description":"The unit type used for scale"},"manual_scaling_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Scaling Needed"}},"type":"object","required":["drawing","real","type","units"],"title":"Scale"},"ScaleType":{"type":"string","enum":["architectural","metric","civil","custom"],"title":"ScaleType"},"ScaleUnits":{"type":"string","enum":["si","imperial","inches"],"title":"ScaleUnits"},"UploadBlueprintResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id","description":"Unique identifier for the job"},"project_id":{"type":"string","title":"Project Id","description":"Project ID used for the upload"}},"type":"object","required":["job_id","project_id"],"title":"UploadBlueprintResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}