{"message":"MSG2BIM backend","endpoints":{"POST /jobs":"Create job and start pipeline","GET /jobs":"List recent jobs","GET /jobs/{job_id}":"Job metadata","GET /jobs/{job_id}/status":"Job status","GET /jobs/{job_id}/exports/trajectory":"Trajectory export","GET /jobs/{job_id}/artifacts/{path}":"Job artifacts","POST /plan-imports":"Import DXF and build floor candidates","GET /plan-imports/{import_id}":"Plan import metadata and detected floors","POST /plan-imports/{import_id}/select":"Create plan asset from selected floor/candidate","GET /plan-assets":"List saved plan assets","GET /plan-assets/{plan_asset_id}":"Plan asset metadata","GET /plan-assets/{plan_asset_id}/file":"Plan asset JSON file","GET /plan-assets/{plan_asset_id}/artifacts/{path}":"Plan asset artifacts","POST /pairs":"Create pair and match two jobs","GET /pairs":"List recent pairs","GET /pairs/{pair_id}":"Pair metadata","GET /pairs/{pair_id}/status":"Pair status","GET /pairs/{pair_id}/match":"Pair match payload","GET /pairs/{pair_id}/artifacts/{path}":"Pair artifacts","POST /demo/bootstrap/grani":"Create or refresh the ЖК Грани demo project","GET /demo/grani/state":"Inspect demo state, floors and walkthrough rows","POST /demo/grani/rebind-results":"Resync walkthrough rows from local job metadata","POST /demo/grani/run-seeded-job":"Run a seeded demo video job for a floor"}}