{"api_version":"v1","product":"VibeCityTech Engine","product_version":"1.0.0-rc.1","build_stage":"alpha","active_api_profile":"live_console","recommended_api_profile":"tech_node","base_path":"/api/v1","service_to_service_auth":{"scheme":"bearer","required_for_processing_when_configured":false,"header":"Authorization: Bearer <token>","recommended_source_application_header":"X-VCT-Source-Application: tech-node","notes":["Keep the token on the Tech-node server/backend, not in browser JavaScript.","Health, desk metadata, form metadata and this contract are readable without a token."]},"cors":{"server_to_server_required":false,"direct_browser_testing_supported_when_origins_configured":false,"allowed_origins":[],"allowed_request_headers":["Authorization","Content-Type","X-VCT-Client-ID","X-VCT-Organisation-ID","X-VCT-Source-Application","X-VCT-Trace-ID"],"exposed_response_headers":["Content-Disposition","X-Request-ID","X-VibeCityTech-API-Version","X-VibeCityTech-Version","X-VibeCityTech-Build","X-VibeCityTech-Request-ID","X-VibeCityTech-Target-Desk","X-VibeCityTech-Scene-Format","X-VibeCityTech-Experimental","X-VibeCityTech-Warning-Count","X-VibeCityTech-Forced-Export"]},"privacy_boundary":["Tech-node owns users, projects, permissions, storage and Supabase records.","The Engine processes uploaded files and Show Model JSON for the current request only.","The Engine does not persist rider contents, uploaded files, filenames, emails or ownership.","Optional audit records are route-level operational signals only."],"workflow":[{"step":1,"action":"Check Engine status","method":"GET","path":"/api/v1/health","tech_node_responsibility":"Show a clean unavailable state if the Engine cannot be reached.","engine_responsibility":"Return version, edition, supported formats and schema metadata."},{"step":2,"action":"Load desk and form metadata","method":"GET","path":"/api/v1/desks and /api/v1/form-fields","tech_node_responsibility":"Build selectors and upload forms from Engine metadata.","engine_responsibility":"Declare supported desks, support levels and required fields."},{"step":3,"action":"Import a console scene","method":"POST","path":"/api/v1/scenes/import","tech_node_responsibility":"Send the uploaded file or signed-storage download through a trusted backend.","engine_responsibility":"Detect, parse and return neutral Show Model JSON plus warnings."},{"step":4,"action":"Check export compatibility","method":"POST","path":"/api/v1/compatibility/check","tech_node_responsibility":"Enable export only when can_export is true.","engine_responsibility":"Return blocking errors, warnings, confirmations and export formats."},{"step":5,"action":"Create export artifacts","method":"POST","path":"/api/v1/scenes/export or /api/v1/export/*","tech_node_responsibility":"Store returned files in Tech-node/Supabase storage if needed.","engine_responsibility":"Render the requested file without retaining rider or scene contents."}],"routes":[{"route_id":"health","method":"GET","path":"/api/v1/health","purpose":"Versioned health, edition and schema metadata.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"desks","method":"GET","path":"/api/v1/desks","purpose":"Desk selector metadata and support levels.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"form-fields","method":"GET","path":"/api/v1/form-fields","purpose":"Field contract for the first import/compatibility/export flow.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"tech-node-contract","method":"GET","path":"/api/v1/integration/tech-node","purpose":"This integration contract for Tech-node plumbing.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"scenes-import","method":"POST","path":"/api/v1/scenes/import","purpose":"Import a scene/show file into neutral Show Model JSON.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"validate","method":"POST","path":"/api/v1/validate","purpose":"Detailed compatibility validation without export gating.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"compatibility","method":"POST","path":"/api/v1/compatibility/check","purpose":"Primary Tech-node export gate; use can_export to enable/disable export.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"export-json","method":"POST","path":"/api/v1/export/json","purpose":"Return neutral Show Model JSON.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"export-markdown","method":"POST","path":"/api/v1/export/markdown","purpose":"Return Markdown rider output.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"export-pdf-full","method":"POST","path":"/api/v1/export/pdf/full","purpose":"Return the full technical rider PDF.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"export-pdf-simple","method":"POST","path":"/api/v1/export/pdf/simple","purpose":"Return the simple show-details/input-list PDF.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"export-pdf-p16","method":"POST","path":"/api/v1/export/pdf/p16","purpose":"Return the simple P16 channel list PDF.","enabled_for_current_profile":true,"auth_required_when_token_configured":false},{"route_id":"scenes-export","method":"POST","path":"/api/v1/scenes/export","purpose":"Return a native console scene/snapshot when compatibility allows it.","enabled_for_current_profile":true,"auth_required_when_token_configured":false}]}