{"openapi":"3.1.0","info":{"title":"PCB Stackup Generator API","description":"API for generating and managing PCB stackups","version":"3.1.1"},"paths":{"/":{"get":{"tags":["health"],"summary":"Root","description":"Root endpoint - API welcome message","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/favicon.ico":{"get":{"tags":["health"],"summary":"Favicon","description":"Favicon endpoint","operationId":"favicon_favicon_ico_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["health"],"summary":"Health Check","description":"Comprehensive health check endpoint for FastAPI application.\n\nReturns:\n    Health status with service information, dependencies, and system status","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/live":{"get":{"tags":["health"],"summary":"Liveness Check","description":"Kubernetes/Docker liveness probe endpoint.\nReturns 200 if the service is alive and can respond.","operationId":"liveness_check_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Readiness Check","description":"Readiness probe: 200 only when the component catalog is actually usable.\n\n⚡ This endpoint is a BARRIER, not a poll. `main.py` preloads the catalog in\na background task *after* the server starts serving, so there is a window\nwhere the port answers and no part can be found. `get_database_stats()`\ncalls `_ensure_loaded()`, which blocks under a lock until that load\nfinishes — so ONE request here waits out startup instead of sampling it.\nThat is what makes it usable as a start-up gate for an automated run\n(frontend/playwright.config.ts waits on this URL).\n\n⛔ Two distinct not-ready states, deliberately not collapsed: the call\nRAISED (service broken), or it returned an EMPTY catalog. The second is the\none that used to report ready — see the comment in `health_check` above.","operationId":"readiness_check_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/models":{"get":{"tags":["health"],"summary":"Get Models","description":"Get available AI models","operationId":"get_models_api_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/kicad/health":{"get":{"tags":["health"],"summary":"Kicad Health Check","description":"Health check endpoint for KiCad CLI availability (used by Gerber, IPC-2581 exports)","operationId":"kicad_health_check_api_kicad_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/digikey/health":{"get":{"tags":["health"],"summary":"Digikey Health Check","description":"Health check endpoint for DigiKey API integration","operationId":"digikey_health_check_api_digikey_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/nexar/health":{"get":{"tags":["health"],"summary":"Nexar Health Check","description":"Health check endpoint for Nexar API integration","operationId":"nexar_health_check_api_nexar_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/supabase/health":{"get":{"tags":["health"],"summary":"Supabase Health Check","description":"Operator health check for the Supabase integration.\n\nReturns 503 when Supabase is configured but unreachable. The previous\nversion returned 200 + \"Supabase integration healthy\" purely on the\npresence of config strings, so a month-long free-tier pause (found\n2026-08-31) never surfaced here. A check that cannot go red is not a check.","operationId":"supabase_health_check_api_supabase_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/reports/pptx/test":{"post":{"tags":["reports"],"summary":"Test Pptx Generation","description":"Test endpoint for PPTX generation.\nGenerates a simple PPTX with just the cover page for testing.\n\nRequest body:\n{\n    \"reportData\": {\n        \"metadata\": {\n            \"projectName\": \"Test Project\",\n            \"companyName\": \"Test Company\",\n            \"reportTitle\": \"RF Module Design Report\"\n        },\n        \"requirements\": {\n            \"transmitterParams\": {\n                \"frequency\": 2.4,\n                \"targetOutputPower\": 30.0,\n                \"application\": \"Wireless Communication\"\n            }\n        }\n    },\n    \"options\": {\n        \"slideConfig\": {\n            \"coverPage\": true,\n            \"tableOfContents\": false\n        },\n        \"metadata\": {\n            \"projectName\": \"Test Project\",\n            \"companyName\": \"Test Company\"\n        }\n    }\n}","operationId":"test_pptx_generation_api_reports_pptx_test_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/pptx":{"post":{"tags":["reports"],"summary":"Generate Pptx Report","description":"Generate full PPTX report from report data.\n\nRequest body:\n{\n    \"reportData\": { ... },\n    \"options\": {\n        \"slideConfig\": { ... },\n        \"metadata\": { ... },\n        \"diagramImageDataUrl\": \"...\",\n        ...\n    }\n}","operationId":"generate_pptx_report_api_reports_pptx_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportDataRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/materials/scan":{"post":{"tags":["materials"],"summary":"Scan Materials","description":"Scan the database directory for PDF files and extract material properties.","operationId":"scan_materials_api_materials_scan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/materials/upload":{"post":{"tags":["materials"],"summary":"Upload Material","description":"Upload a PDF file and extract material properties.","operationId":"upload_material_api_materials_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_material_api_materials_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/materials/csv/{material_name}":{"get":{"tags":["materials"],"summary":"Get Material Csv","description":"Serve a material CSV file from the shared data/csv/ directory.","operationId":"get_material_csv_api_materials_csv__material_name__get","parameters":[{"name":"material_name","in":"path","required":true,"schema":{"type":"string","title":"Material Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/materials/justify":{"post":{"tags":["materials"],"summary":"Justify Material Selection","description":"Generate a natural-language justification for why a material was selected.\n\nUses Gemini to narrate the scoring data from the material selection agent.\nFalls back to a deterministic justification if Gemini is unavailable.","operationId":"justify_material_selection_api_materials_justify_post","parameters":[{"name":"material_name","in":"query","required":true,"schema":{"type":"string","description":"Material name (e.g. FR408HR, RO4350B)","title":"Material Name"},"description":"Material name (e.g. FR408HR, RO4350B)"},{"name":"frequency","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Operating frequency in GHz","title":"Frequency"},"description":"Operating frequency in GHz"},{"name":"application","in":"query","required":false,"schema":{"type":"string","description":"Application type","default":"high_speed_digital","title":"Application"},"description":"Application type"},{"name":"power_dbm","in":"query","required":false,"schema":{"type":"number","description":"Output power in dBm","default":0,"title":"Power Dbm"},"description":"Output power in dBm"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fingerprint":{"post":{"tags":["stackups"],"summary":"Create Fingerprint","description":"Deterministic hash for a stackup configuration (cache/dedupe key).","operationId":"create_fingerprint_api_fingerprint_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FingerprintRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Fingerprint Api Fingerprint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackup":{"post":{"tags":["stackups"],"summary":"Create Stackup","description":"Persist a new stackup (FastAPI validates the body before this runs).","operationId":"create_stackup_api_stackup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StackupInput-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StackupInput-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/stackup/{stackup_id}":{"get":{"tags":["stackups"],"summary":"Get Stackup","description":"Fetch a previously saved stackup by ID (only the creating user may read it).","operationId":"get_stackup_api_stackup__stackup_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StackupInput-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackup/{stackup_id}/export/ads":{"post":{"tags":["stackups"],"summary":"Export Ads","description":"Generate Keysight ADS substrate files for EM simulation.","operationId":"export_ads_api_stackup__stackup_id__export_ads_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Ads Api Stackup  Stackup Id  Export Ads Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackup/{stackup_id}/export/kicad":{"post":{"tags":["stackups"],"summary":"Export Kicad","description":"Generate KiCad project and PCB files from a stackup.","operationId":"export_kicad_api_stackup__stackup_id__export_kicad_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Kicad Api Stackup  Stackup Id  Export Kicad Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackups/{stackup_id}/thermal-analysis":{"post":{"tags":["stackups"],"summary":"Run Thermal Analysis","description":"Run full thermal analysis for a saved stackup.","operationId":"run_thermal_analysis_api_stackups__stackup_id__thermal_analysis_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThermalAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThermalAnalysisSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackups/thermal-analysis/preview":{"post":{"tags":["stackups"],"summary":"Thermal Analysis Preview","description":"Run thermal analysis preview without persisting a stackup.","operationId":"thermal_analysis_preview_api_stackups_thermal_analysis_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThermalAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThermalAnalysisSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackups/{stackup_id}/crosstalk":{"post":{"tags":["stackups"],"summary":"Calculate Crosstalk","description":"Calculate NEXT/FEXT crosstalk for a single trace pair.","operationId":"calculate_crosstalk_api_stackups__stackup_id__crosstalk_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosstalkConfig"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosstalkResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackups/{stackup_id}/crosstalk/budget":{"post":{"tags":["stackups"],"summary":"Calculate Crosstalk Budget Endpoint","description":"Calculate crosstalk budget across multiple aggressors.","operationId":"calculate_crosstalk_budget_endpoint_api_stackups__stackup_id__crosstalk_budget_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosstalkBudgetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosstalkBudgetResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackups/{stackup_id}/crosstalk/spacing":{"post":{"tags":["stackups"],"summary":"Calculate Crosstalk Spacing","description":"Find minimum trace spacing for a target isolation target.","operationId":"calculate_crosstalk_spacing_api_stackups__stackup_id__crosstalk_spacing_post","parameters":[{"name":"stackup_id","in":"path","required":true,"schema":{"type":"string","title":"Stackup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosstalkSpacingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpacingResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kicad-export":{"post":{"tags":["exports"],"summary":"Kicad Export Direct","description":"Direct KiCAD export endpoint (frontend compatible).","operationId":"kicad_export_direct_api_kicad_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/odb-export":{"post":{"tags":["exports"],"summary":"Odb Export Direct","description":"Direct ODB++ export endpoint (frontend compatible).","operationId":"odb_export_direct_api_odb_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/gerber-export":{"post":{"tags":["exports"],"summary":"Gerber Export","description":"Gerber export endpoint using KiCad CLI.","operationId":"gerber_export_api_gerber_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/ipc2581-export":{"post":{"tags":["exports"],"summary":"Ipc2581 Export","description":"IPC-2581 export endpoint using KiCad CLI.","operationId":"ipc2581_export_api_ipc2581_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/magicon-internal-export":{"post":{"tags":["exports"],"summary":"Magicon Internal Export","description":"MagicON Internal JSON export endpoint.","operationId":"magicon_internal_export_api_magicon_internal_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/hfss-export":{"post":{"tags":["exports"],"summary":"Hfss Export","description":"HFSS PyAEDT script export endpoint.","operationId":"hfss_export_api_hfss_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/export/bom":{"post":{"tags":["exports"],"summary":"Bom Export","description":"Serialize a caller-provided canonical BOM to a file (csv | excel | json).\n\nBacks the agent ``BomPreviewCard`` \"Download BOM\" affordance. Serializes the BOM in\nthe request body via the single-source ``bom_export_service`` — no re-assembly, and\n(like the sibling export routes) no per-user ownership check, since it only formats\ndata the caller already holds.","operationId":"bom_export_api_export_bom_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ads-export":{"post":{"tags":["exports"],"summary":"Ads Export","description":"ADS substrate file export endpoint.","operationId":"ads_export_api_ads_export_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","description":"Accept user feedback from stackup generator (micro-prompt or widget).\nPersists to backend/data/feedback/ as JSONL; one file per day.","operationId":"submit_feedback_api_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fab-outcomes":{"post":{"tags":["fab-outcomes"],"summary":"Submit Fab Outcome","description":"Accept and persist a fab-and-test outcome submission.","operationId":"submit_fab_outcome_api_fab_outcomes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FabOutcomePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fab-outcomes/touchstone":{"post":{"tags":["fab-outcomes"],"summary":"Upload Touchstone","description":"Parse a Touchstone upload and return S-params at the target frequency.","operationId":"upload_touchstone_api_fab_outcomes_touchstone_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_touchstone_api_fab_outcomes_touchstone_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fab-outcomes/aggregate/{fingerprint}":{"get":{"tags":["fab-outcomes"],"summary":"Get Fab Outcome Aggregate","description":"Return aggregate stats for a fingerprint, or 404 if N<5 or unknown.","operationId":"get_fab_outcome_aggregate_api_fab_outcomes_aggregate__fingerprint__get","parameters":[{"name":"fingerprint","in":"path","required":true,"schema":{"type":"string","title":"Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/components/search":{"post":{"tags":["components"],"summary":"Search Rf Components","description":"Search for RF components using Nexar API with validated DB fallback.\n\nWhen authenticated, private library components are merged into results.","operationId":"search_rf_components_api_components_search_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Search Rf Components Api Components Search Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/components/categories":{"get":{"tags":["components"],"summary":"Get Component Categories","description":"Get the component category index with metadata.\n\nDerived dynamically from the directory structure (the source of truth) rather\nthan the static category_index.json, which historically drifted out of sync\n(stale counts, missing categories like frequency_multipliers).","operationId":"get_component_categories_api_components_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/components/{category}":{"get":{"tags":["components"],"summary":"Get Components By Category","description":"Get all components for a category, optionally filtered by frequency band.","operationId":"get_components_by_category_api_components__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"frequency_band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by frequency band (sub_1ghz, 1_6ghz, 6_18ghz, 18_40ghz, above_40ghz)","title":"Frequency Band"},"description":"Filter by frequency band (sub_1ghz, 1_6ghz, 6_18ghz, 18_40ghz, above_40ghz)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/components/availability":{"post":{"tags":["components"],"summary":"Check Component Availability","description":"Check real-time availability and pricing for specific part numbers.","operationId":"check_component_availability_api_components_availability_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Check Component Availability Api Components Availability Post"}}}}}}},"/api/graphql/octopart":{"post":{"tags":["graphql"],"summary":"Proxy Octopart Graphql","description":"Proxy GraphQL requests to Nexar API (Octopart data)\nHandles automatic token management and component availability requests","operationId":"proxy_octopart_graphql_api_graphql_octopart_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphQLRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/graphql/health":{"get":{"tags":["graphql"],"summary":"Graphql Health Check","description":"Health check endpoint for GraphQL functionality","operationId":"graphql_health_check_api_graphql_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/generate-rf-project":{"post":{"tags":["rf-project"],"summary":"Generate Rf Project","description":"Generate complete KiCad project from RF component chain with connection completion.\n\nArgs:\n    request_data: Request body with RF chain and project configuration\n    kicad_exporter: Injected KiCad exporter dependency\n\nReturns:\n    Dict with generated project files and statistics","operationId":"generate_rf_project_api_generate_rf_project_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/layout/create":{"post":{"tags":["layout"],"summary":"Create Layout","description":"Create PCB layout from RF chain.\n\nRequest body:\n    rfChain: RF chain data (camelCase or snake_case keys)\n    boardWidthMm: Board width in mm (default 100)\n    boardHeightMm: Board height in mm (default 100)\n\nReturns:\n    placements: List of ComponentPlacement objects","operationId":"create_layout_api_layout_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Layout Api Layout Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/select/{component_type}":{"post":{"tags":["agents"],"summary":"Agent Select Component","description":"Generic Agent Selection Endpoint.\n\nRoutes to appropriate agent based on component_type.\nSupports: vco, pa, driver, filter, connector, substrate","operationId":"agent_select_component_api_agent_select__component_type__post","parameters":[{"name":"component_type","in":"path","required":true,"schema":{"type":"string","title":"Component Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/select-batch":{"post":{"tags":["agents"],"summary":"Agent Select Batch","description":"Batch Agent Selection Endpoint.\n\nBody: { \"selections\": [ { \"component_type\": \"vco\", ... }, ... ] }\nResponse: { \"results\": { \"vco\": {...}, \"pa\": {...}, ... } }","operationId":"agent_select_batch_api_agent_select_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rf-chain/design":{"post":{"tags":["rf-chain"],"summary":"Design Rf Chain Endpoint","description":"Run complete RF chain design with SSE progress streaming.\n\nSingle endpoint that replaces 50-135 sequential frontend API calls.\nReturns an SSE stream with progress events followed by the final result.","operationId":"design_rf_chain_endpoint_api_rf_chain_design_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfChainDesignRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rf-chain/design-sync":{"post":{"tags":["rf-chain"],"summary":"Design Rf Chain Sync Endpoint","description":"Run complete RF chain design (non-streaming, JSON response).\n\nAlternative to the SSE endpoint for clients that don't support streaming.\nAccepts camelCase or snake_case param keys (normalized to snake_case\nbefore orchestration, matching /api/rf-chain/design-multi behavior).","operationId":"design_rf_chain_sync_endpoint_api_rf_chain_design_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/rf-chain/design-multi":{"post":{"tags":["rf-chain"],"summary":"Design Multi Chain Endpoint","description":"Run multi-objective RF chain optimization.\n\n1. Runs the existing single-chain orchestrator to get a primary chain.\n2. Generates variant chains by swapping components from alternatives.\n3. Scores all chains on cost, size, and performance.\n4. Returns ranked chains with Pareto frontier.","operationId":"design_multi_chain_endpoint_api_rf_chain_design_multi_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiChainDesignRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiChainDesignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rf-chain/bom":{"post":{"tags":["rf-chain"],"summary":"Assemble Chain Bom Endpoint","description":"Assemble the canonical BOM for a chain the caller already has.\n\nThe on-demand counterpart to the BOM `/design` attaches inline. It exists so\nthe frontend never needs a BOM assembler of its own: `_design_payload`'s\nattach is best-effort (a converter-catalog failure degrades to no `bom`), and\na project persisted before the attach shipped carries none either — in both\ncases Phase-5 and the report generator ask here instead of falling back to a\nsecond, divergent implementation.\n\nAccepts EITHER chain vocabulary: a browser-shaped `RfTransmitterChain` is\nre-keyed through `to_backend_chain` (which also recovers the snake_case\ncatalog record the power tree and price resolver need), an agent-shaped chain\npasses through untouched. Same `{lines, summary}` shape `/design` attaches.","operationId":"assemble_chain_bom_endpoint_api_rf_chain_bom_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/chat/gemini/upload":{"post":{"tags":["chat_gemini"],"summary":"Upload Pdf","description":"Upload a PDF and extract specifications using Gemini.","operationId":"upload_pdf_api_chat_gemini_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_pdf_api_chat_gemini_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/gemini/message":{"post":{"tags":["chat_gemini"],"summary":"Chat Gemini","description":"Send a message to Google Gemini with tool calling and knowledge context.","operationId":"chat_gemini_api_chat_gemini_message_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/gemini/stream":{"post":{"tags":["chat_gemini"],"summary":"Chat Gemini Stream","description":"Stream agent-loop events as SSE. Gated by FF_AGENT_LOOP.\n\n§3.11 tenancy boundary: `context.user_id` is overwritten with the\nJWT-verified subject (`user[\"sub\"]`). The body's claimed user_id is\nignored — this is the point where the model (or a malicious client)\ncannot forge tenancy. Tools downstream rely on `context.user_id` being\ntrustworthy when running ownership checks.","operationId":"chat_gemini_stream_api_chat_gemini_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/conversations/by-project/{project_id}":{"get":{"tags":["conversations"],"summary":"Get Conversation By Project","description":"Idempotently fetch + hydrate the conversation for (project_id, user).","operationId":"get_conversation_by_project_api_conversations_by_project__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/HydrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/conversations/{conversation_id}":{"delete":{"tags":["conversations"],"summary":"Delete Conversation","description":"Soft-delete a conversation so the next hydration mints a fresh one.","operationId":"delete_conversation_api_conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/demo/agent/scenarios":{"get":{"tags":["demo"],"summary":"Demo Scenarios","description":"List the curated demo scenarios (id, title, prompt) for present fixtures.","operationId":"demo_scenarios_api_demo_agent_scenarios_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Scenarios Api Demo Agent Scenarios Get"}}}}}}},"/api/demo/agent/stream":{"post":{"tags":["demo"],"summary":"Demo Stream","description":"Replay a recorded agent transcript as SSE (no model call, no tool dispatch).","operationId":"demo_stream_api_demo_agent_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoStreamRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stress-analysis":{"post":{"tags":["stress-analysis"],"summary":"Analyze Stress","description":"Analyze voltage, current, and power stress for BOM components.","operationId":"analyze_stress_api_stress_analysis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StressAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StressAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stress-analysis/health":{"get":{"tags":["stress-analysis"],"summary":"Stress Analysis Health","description":"Health check for stress analysis service.","operationId":"stress_analysis_health_api_stress_analysis_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stress-analysis/components":{"get":{"tags":["stress-analysis"],"summary":"Get Available Components","description":"List components available for stress analysis.","operationId":"get_available_components_api_stress_analysis_components_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/solver/solve":{"post":{"tags":["solver"],"summary":"Solve","description":"Find optimal PCB stackup configurations for the given constraints.\n\nEnumerates material/thickness/copper combinations, applies hard constraints\n(impedance feasibility, total thickness, DFM limits), scores on soft\nobjectives (cost, insertion loss, manufacturability), and returns ranked\nsolutions.  Progressively relaxes constraints if no solution is found.","operationId":"solve_api_solver_solve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolverInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolverResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/auth":{"post":{"tags":["webhooks"],"summary":"Supabase Auth Webhook","description":"Webhook endpoint for Supabase authentication events (INSERT/UPDATE/DELETE on users).","operationId":"supabase_auth_webhook_api_webhooks_auth_post","parameters":[{"name":"x-supabase-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Supabase-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/auth/events":{"post":{"tags":["webhooks"],"summary":"Supabase Auth Events Webhook","description":"Alternative webhook endpoint for Supabase Auth events (Edge Functions).","operationId":"supabase_auth_events_webhook_api_webhooks_auth_events_post","parameters":[{"name":"x-supabase-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Supabase-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/":{"get":{"tags":["projects"],"summary":"List Projects","description":"List all projects for the authenticated user (metadata only).","operationId":"list_projects_api_projects__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectResponse"},"type":"array","title":"Response List Projects Api Projects  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["projects"],"summary":"Create Project","description":"Create a new project (or upsert if ID already exists).","operationId":"create_project_api_projects__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project","description":"Get a specific project by ID (includes phase_data).","operationId":"get_project_api_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/ProjectFullResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["projects"],"summary":"Update Project","description":"Update an existing project.","operationId":"update_project_api_projects__project_id__put","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/ProjectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Project","description":"Delete a project. Idempotent — returns success even if project doesn't exist.","operationId":"delete_project_api_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/sync":{"post":{"tags":["projects"],"summary":"Sync Projects","description":"Sync multiple projects at once (bulk upsert).","operationId":"sync_projects_api_projects_sync_post","requestBody":{"content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Projects","description":"List of projects to sync"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/projects/{project_id}/versions":{"get":{"tags":["projects"],"summary":"List Versions","description":"List all versions for a project, newest first.","operationId":"list_versions_api_projects__project_id__versions_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":{"type":"array","items":{"$ref":"#/components/schemas/VersionResponse"},"title":"Response List Versions Api Projects  Project Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects"],"summary":"Create Version","description":"Create a new design version snapshot.","operationId":"create_version_api_projects__project_id__versions_post","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/VersionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/versions/{version_id}":{"get":{"tags":["projects"],"summary":"Get Version","description":"Get a specific version including snapshot.","operationId":"get_version_api_projects__project_id__versions__version_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionFullResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/versions/restore":{"post":{"tags":["projects"],"summary":"Restore Version","description":"Restore a previous version (creates a new version and updates project).","operationId":"restore_version_api_projects__project_id__versions_restore_post","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/VersionRestore"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/email/reengagement/unsubscribe":{"get":{"tags":["reengagement"],"summary":"Unsubscribe Get","operationId":"unsubscribe_get_api_email_reengagement_unsubscribe_get","parameters":[{"name":"u","in":"query","required":true,"schema":{"type":"string","title":"U"}},{"name":"sig","in":"query","required":true,"schema":{"type":"string","title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reengagement"],"summary":"Unsubscribe Post","operationId":"unsubscribe_post_api_email_reengagement_unsubscribe_post","parameters":[{"name":"u","in":"query","required":true,"schema":{"type":"string","title":"U"}},{"name":"sig","in":"query","required":true,"schema":{"type":"string","title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/reengagement":{"post":{"tags":["reengagement"],"summary":"Run Job","operationId":"run_job_api_jobs_reengagement_post","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"X-Job-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Job-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Job Api Jobs Reengagement Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/models":{"get":{"tags":["surrogate"],"summary":"List Models","description":"List all available surrogate models.","operationId":"list_models_api_surrogate_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/surrogate/models/{model_id}/schema":{"get":{"tags":["surrogate"],"summary":"Get Model Schema","description":"Get full input/output schema for a model.","operationId":"get_model_schema_api_surrogate_models__model_id__schema_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/recommend":{"post":{"tags":["surrogate"],"summary":"Recommend Model","description":"Auto-select the best surrogate model for a given design context.","operationId":"recommend_model_api_surrogate_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/routes__surrogate__RecommendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/{model_id}/predict":{"post":{"tags":["surrogate"],"summary":"Predict","description":"Single-point surrogate inference.","operationId":"predict_api_surrogate__model_id__predict_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurrogateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/{model_id}/predict-batch":{"post":{"tags":["surrogate"],"summary":"Predict Batch","description":"Batch surrogate inference.","operationId":"predict_batch_api_surrogate__model_id__predict_batch_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurrogateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/{model_id}/sensitivity":{"post":{"tags":["surrogate"],"summary":"Sensitivity","description":"Compute sensitivity of outputs w.r.t. each input via finite differences.","operationId":"sensitivity_api_surrogate__model_id__sensitivity_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SensitivityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurrogateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/{model_id}/monte-carlo":{"post":{"tags":["surrogate"],"summary":"Monte Carlo","description":"Run Monte Carlo sampling for design space exploration.","operationId":"monte_carlo_api_surrogate__model_id__monte_carlo_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonteCarloRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurrogateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/{model_id}/optimize":{"post":{"tags":["surrogate"],"summary":"Optimize","description":"Global optimization of a surrogate output using differential evolution.","operationId":"optimize_api_surrogate__model_id__optimize_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurrogateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/surrogate/cache/stats":{"get":{"tags":["surrogate"],"summary":"Cache Stats","description":"Return inference cache statistics.","operationId":"cache_stats_api_surrogate_cache_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/surrogate/cache":{"delete":{"tags":["surrogate"],"summary":"Clear Cache","description":"Clear inference cache (all models or specific model).","operationId":"clear_cache_api_surrogate_cache_delete","parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/design-intelligence":{"post":{"tags":["design-intelligence"],"summary":"Design Intelligence","description":"Run design-time intelligence analysis on a stackup configuration.","operationId":"design_intelligence_api_design_intelligence_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_EndpointRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignIntelligenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/design/import":{"post":{"tags":["design-import"],"summary":"Design Import","description":"Import a design file (magicon-internal JSON or ODB++ archive).","operationId":"design_import_api_design_import_post","parameters":[{"name":"include_full","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Full"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/design/re-optimize":{"post":{"tags":["design-import"],"summary":"Design Re Optimize","description":"Re-optimize, clone, or what-if a design with optional overrides.","operationId":"design_re_optimize_api_design_re_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReOptimizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReOptimizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stackup-pdf-export":{"post":{"summary":"Export Stackup Pdf","description":"Generate and return a standalone stackup specification PDF.","operationId":"export_stackup_pdf_api_stackup_pdf_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StackupPdfRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compliance/check":{"post":{"tags":["compliance"],"summary":"Compliance Check","description":"Run compliance checks on a stackup against the requested standards.","operationId":"compliance_check_api_compliance_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ComplianceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compliance/standards":{"get":{"tags":["compliance"],"summary":"List Standards","description":"Return all supported compliance standards with metadata.","operationId":"list_standards_api_compliance_standards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Standards Api Compliance Standards Get"}}}}}}},"/api/compliance/rules/{standard}":{"get":{"tags":["compliance"],"summary":"List Rules","description":"Return rule definitions for a given compliance standard.","operationId":"list_rules_api_compliance_rules__standard__get","parameters":[{"name":"standard","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ComplianceStandard"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ComplianceRuleDefinition"},"title":"Response List Rules Api Compliance Rules  Standard  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compliance/report":{"post":{"tags":["compliance"],"summary":"Compliance Report Pdf","description":"Run compliance checks and return the results as a downloadable PDF report.","operationId":"compliance_report_pdf_api_compliance_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ComplianceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pdn/analyze":{"post":{"tags":["pdn"],"summary":"Analyze Pdn","description":"Run full PDN impedance analysis with plane pairs, decoupling caps, and target impedance.","operationId":"analyze_pdn_api_pdn_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PDNAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PDNAnalysisResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pdn/apply":{"post":{"tags":["pdn"],"summary":"Apply Pdn Decoupling","description":"Place the recommended (MLCC) decoupling caps and re-verify — the Guided twin\nof the agent's apply_pdn_decoupling tool. Same shared engine\n(`solve_with_auto_decoupling`) + same merge (`merge_pdn_caps_into_lines`), so\nboth surfaces place identical caps. Returns the post-placement PDN result plus\nthe placed caps as BOM line dicts for the panel to append to the Phase II BOM\n(the bulk is already sized there; a GHz-band rec is a stackup action, not a cap).","operationId":"apply_pdn_decoupling_api_pdn_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PDNAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PDNApplyResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pdn/presets":{"get":{"tags":["pdn"],"summary":"Get Presets","description":"Return available PDN target impedance presets.","operationId":"get_presets_api_pdn_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Presets Api Pdn Presets Get"}}}}}}},"/api/pdn/interplanar-capacitance":{"post":{"tags":["pdn"],"summary":"Get Interplanar Capacitance","description":"Calculate interplanar capacitance for a single plane pair.","operationId":"get_interplanar_capacitance_api_pdn_interplanar_capacitance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanePairConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/link-budget/compute":{"post":{"tags":["link-budget"],"summary":"Compute Link Budget","description":"Cascaded link budget for an ordered stage list ({stages, inputPowerDbm}).","operationId":"compute_link_budget_api_link_budget_compute_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Link Budget Api Link Budget Compute Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/planar-filter/compute":{"post":{"tags":["planar-filter"],"summary":"Compute Planar Filter","description":"Synthesize a planar filter from an analytical request (delegates to the engine).","operationId":"compute_planar_filter_api_planar_filter_compute_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Planar Filter Api Planar Filter Compute Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/test-coupon":{"post":{"tags":["test-coupon"],"summary":"Generate Coupon","operationId":"generate_coupon_api_test_coupon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCouponConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/test-coupon/csv":{"post":{"tags":["test-coupon"],"summary":"Generate Coupon Csv","operationId":"generate_coupon_csv_api_test_coupon_csv_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCouponConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/test-coupon/pdf":{"post":{"tags":["test-coupon"],"summary":"Generate Coupon Pdf Endpoint","operationId":"generate_coupon_pdf_endpoint_api_test_coupon_pdf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCouponConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/glass-weave/styles":{"get":{"tags":["glass-weave"],"summary":"List Glass Styles","description":"Return all available glass styles.","operationId":"list_glass_styles_api_glass_weave_styles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GlassStyleProperties"},"type":"array","title":"Response List Glass Styles Api Glass Weave Styles Get"}}}}}}},"/api/glass-weave/impact":{"post":{"tags":["glass-weave"],"summary":"Compute Impact","description":"Compute fiber weave impact for a given glass style and trace geometry.","operationId":"compute_impact_api_glass_weave_impact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FiberWeaveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlassWeaveImpact"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/glass-weave/recommend":{"post":{"tags":["glass-weave"],"summary":"Recommend","description":"Recommend glass styles for given frequency and tolerance.","operationId":"recommend_api_glass_weave_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/routes__glass_weave__RecommendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GlassRecommendation"},"type":"array","title":"Response Recommend Api Glass Weave Recommend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/glass-weave/orthotropic-dk":{"post":{"tags":["glass-weave"],"summary":"Orthotropic Dk","description":"Calculate orthotropic Dk for a glass style, optionally at a routing angle.","operationId":"orthotropic_dk_api_glass_weave_orthotropic_dk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrthotropicDkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Orthotropic Dk Api Glass Weave Orthotropic Dk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/private-components/":{"post":{"tags":["Private Components"],"summary":"Create Component","description":"Create a private component.","operationId":"create_component_api_private_components__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"owner_type","in":"query","required":false,"schema":{"type":"string","default":"user","title":"Owner Type"}},{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Private Components"],"summary":"List Components","description":"List private components with optional filters.","operationId":"list_components_api_private_components__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"owner_type","in":"query","required":false,"schema":{"type":"string","default":"user","title":"Owner Type"}},{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"}},{"name":"function","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},{"name":"frequency_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Min"}},{"name":"frequency_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Max"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrivateComponentResponse"},"title":"Response List Components Api Private Components  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/private-components/import":{"post":{"tags":["Private Components"],"summary":"Import Csv","description":"Import components from a CSV file.","operationId":"import_csv_api_private_components_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"owner_type","in":"query","required":false,"schema":{"type":"string","default":"user","title":"Owner Type"}},{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_csv_api_private_components_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/private-components/export":{"get":{"tags":["Private Components"],"summary":"Export Csv","description":"Export components as CSV.","operationId":"export_csv_api_private_components_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"owner_type","in":"query","required":false,"schema":{"type":"string","default":"user","title":"Owner Type"}},{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/private-components/search":{"post":{"tags":["Private Components"],"summary":"Search For Selection","description":"Search private components for the selection pipeline.","operationId":"search_for_selection_api_private_components_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentSearchParams"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Search For Selection Api Private Components Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/private-components/{component_id}":{"get":{"tags":["Private Components"],"summary":"Get Component","description":"Get a single private component.","operationId":"get_component_api_private_components__component_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"component_id","in":"path","required":true,"schema":{"type":"string","title":"Component Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Private Components"],"summary":"Update Component","description":"Update a private component.","operationId":"update_component_api_private_components__component_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"component_id","in":"path","required":true,"schema":{"type":"string","title":"Component Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateComponentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Private Components"],"summary":"Delete Component","description":"Delete a private component.","operationId":"delete_component_api_private_components__component_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"component_id","in":"path","required":true,"schema":{"type":"string","title":"Component Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizations/":{"get":{"tags":["Organizations"],"summary":"List Organizations","description":"List organizations the user belongs to.","operationId":"list_organizations_api_organizations__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrganizationResponse"},"type":"array","title":"Response List Organizations Api Organizations  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Organizations"],"summary":"Create Organization","description":"Create a new organization.","operationId":"create_organization_api_organizations__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/organizations/{org_id}/members":{"get":{"tags":["Organizations"],"summary":"List Members","description":"List members of an organization.","operationId":"list_members_api_organizations__org_id__members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgMemberResponse"},"title":"Response List Members Api Organizations  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Organizations"],"summary":"Add Member","description":"Add a member to an organization (admin/owner only).","operationId":"add_member_api_organizations__org_id__members_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"target_user_id","in":"query","required":true,"schema":{"type":"string","title":"Target User Id"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","default":"member","title":"Role"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizations/{org_id}/members/{target_user_id}":{"delete":{"tags":["Organizations"],"summary":"Remove Member","description":"Remove a member from an organization (admin/owner only).","operationId":"remove_member_api_organizations__org_id__members__target_user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Organizations"],"summary":"Update Member Role","description":"Update a member's role (owner only).","operationId":"update_member_role_api_organizations__org_id__members__target_user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}},{"name":"role","in":"query","required":true,"schema":{"type":"string","title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/antenna/patch/design":{"post":{"tags":["antenna"],"summary":"Design Antenna","description":"Synthesize a rectangular patch (and, when `array` is set, a uniform\nplanar array of it) for the given frequency + substrate.","operationId":"design_antenna_api_antenna_patch_design_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchAntennaInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchAntennaResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/radar/performance":{"post":{"tags":["radar"],"summary":"Compute Radar Performance","description":"Radar range equation + pulsed-waveform relations for a single request.","operationId":"compute_radar_performance_api_radar_performance_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Radar Performance Api Radar Performance Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ota-link/compute":{"post":{"tags":["ota-link"],"summary":"Compute Ota Link","description":"One-way Friis/FSPL link budget for a single request.","operationId":"compute_ota_link_api_ota_link_compute_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Ota Link Api Ota Link Compute Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pll/loop-filter":{"post":{"tags":["pll"],"summary":"Compute Pll Loop Filter","description":"Passive PLL loop-filter synthesis + performance for a single request.","operationId":"compute_pll_loop_filter_api_pll_loop_filter_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Pll Loop Filter Api Pll Loop Filter Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/receiver":{"post":{"tags":["receiver"],"summary":"Compute Receiver Design","description":"Superheterodyne receiver design/analysis for a single request.","operationId":"compute_receiver_design_api_receiver_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Receiver Design Api Receiver Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/receiver/design":{"post":{"tags":["receiver"],"summary":"Design Receiver From Intent","description":"Select catalog parts for a design intent, then compute through the engine.\n\nThe sibling of the route above, not a widening of it. `POST /api/receiver`\nis the pure-engine path and 422s without explicit stages — a contract its\ntests pin. A caller that only knows \"X-band, 10 MHz, 12 dB SNR\" has no\nstages to give, which is exactly the standalone designer's case.\n\nSelection reuses `assemble_receiver`, the SAME function the `design_rf_receiver`\nagent tool calls, so the page and the assistant can never disagree about\nwhich part fills a slot. Slots no catalog part covers come back in\n`needsPartFlags` rather than filled with an assumed component.\n\nRate-limited harder than the pure-engine route (30/min vs 60): this one hits\nthe component database and runs the per-slot scoring agents.","operationId":"design_receiver_from_intent_api_receiver_design_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Design Receiver From Intent Api Receiver Design Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/phase-noise/budget":{"post":{"tags":["phase-noise"],"summary":"Compute Phase Noise Budget","description":"Phase-noise -> Doppler budget (closed-loop shaping + RMS jitter + MTI limit) for one request.","operationId":"compute_phase_noise_budget_api_phase_noise_budget_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Phase Noise Budget Api Phase Noise Budget Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tr-module":{"post":{"tags":["tr-module"],"summary":"Compute Tr Module","description":"T/R isolation, blanking, leakage and stress budgets for one front end.","operationId":"compute_tr_module_api_tr_module_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Tr Module Api Tr Module Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tr-module/design":{"post":{"tags":["tr-module"],"summary":"Design Tr Module From Intent","description":"Design both chains and the shared front end, then compute the budgets.\n\nThe sibling of the route above, not a widening of it. `POST /api/tr-module`\nis the pure-engine path and needs an isolation figure and a limiter the\ncaller has already chosen; a caller who only knows \"9.4 GHz, 20 W\" has\nneither, which is exactly the design intent this route serves.\n\nSelection and orchestration reuse `assemble_tr_module`, the SAME function the\n`design_tr_module` agent tool calls, so the assistant and any UI can never\ndisagree about which part fills a slot.\n\nRate-limited harder than either sibling (15/min vs 60): this one runs the\nfull transmit convergence loop, the receive assembler and the per-slot\nscoring agents against the component database.","operationId":"design_tr_module_from_intent_api_tr_module_design_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Design Tr Module From Intent Api Tr Module Design Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AgentConfig":{"properties":{"paEnabled":{"type":"boolean","title":"Paenabled","default":true},"vcoEnabled":{"type":"boolean","title":"Vcoenabled","default":true},"driverEnabled":{"type":"boolean","title":"Driverenabled","default":true},"filterEnabled":{"type":"boolean","title":"Filterenabled","default":true},"connectorEnabled":{"type":"boolean","title":"Connectorenabled","default":true},"substrateEnabled":{"type":"boolean","title":"Substrateenabled","default":true},"useCustomWeights":{"type":"boolean","title":"Usecustomweights","default":false},"paCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Pacustomweights"},"vcoCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Vcocustomweights"},"driverCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Drivercustomweights"},"filterCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Filtercustomweights"},"connectorCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Connectorcustomweights"},"substrateCustomWeights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Substratecustomweights"}},"type":"object","title":"AgentConfig","description":"Agent configuration for backend orchestrator."},"AntennaSubstrate":{"properties":{"dk":{"type":"number","minimum":1.0,"title":"Dk","description":"Dielectric constant (relative permittivity) at f0"},"df":{"type":"number","exclusiveMinimum":0.0,"title":"Df","description":"Loss tangent (dissipation factor) at f0; >0 to avoid a Qd=1/df divide-by-zero"},"h_mm":{"type":"number","exclusiveMinimum":0.0,"title":"H Mm","description":"Substrate height (mm)"},"source":{"type":"string","enum":["stackup","manual"],"title":"Source","description":"Provenance of dk/df/h_mm"},"layer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer Name","description":"Stackup layer name, when source='stackup'"},"material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material","description":"Material catalog name, when source='stackup'"}},"type":"object","required":["dk","df","h_mm","source"],"title":"AntennaSubstrate","description":"Dielectric under the patch's top copper (the antenna's radiating substrate)."},"ArrayConfig":{"properties":{"nx":{"type":"integer","minimum":1.0,"title":"Nx","description":"Elements along the x (width/W) axis"},"ny":{"type":"integer","minimum":1.0,"title":"Ny","description":"Elements along the y (length/L) axis"},"spacing_x_mm":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Spacing X Mm","description":"Explicit x-axis element spacing (mm); wins over spacing_lambda"},"spacing_y_mm":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Spacing Y Mm","description":"Explicit y-axis element spacing (mm); wins over spacing_lambda"},"spacing_lambda":{"type":"number","exclusiveMinimum":0.0,"title":"Spacing Lambda","description":"Fallback spacing as a fraction of free-space wavelength lambda0","default":0.5},"steer_theta_deg":{"type":"number","exclusiveMaximum":90.0,"exclusiveMinimum":-90.0,"title":"Steer Theta Deg","description":"Beam-steer elevation angle (deg)","default":0.0},"steer_phi_deg":{"type":"number","title":"Steer Phi Deg","description":"Beam-steer azimuth angle (deg)","default":0.0}},"type":"object","required":["nx","ny"],"title":"ArrayConfig","description":"Uniform rectangular Nx x Ny planar array configuration (input)."},"ArrayResult":{"properties":{"nx":{"type":"integer","title":"Nx"},"ny":{"type":"integer","title":"Ny"},"spacing_x_mm":{"type":"number","title":"Spacing X Mm"},"spacing_y_mm":{"type":"number","title":"Spacing Y Mm"},"spacing_x_lambda":{"type":"number","title":"Spacing X Lambda","description":"spacing_x_mm expressed as a fraction of lambda0"},"spacing_y_lambda":{"type":"number","title":"Spacing Y Lambda","description":"spacing_y_mm expressed as a fraction of lambda0"},"array_gain_dbi":{"type":"number","title":"Array Gain Dbi","description":"Element gain_dbi + 10*log10(nx*ny); idealized, uniform excitation"},"directivity_dbi":{"type":"number","title":"Directivity Dbi","description":"Element directivity_dbi + 10*log10(nx*ny)"},"beamwidth_e_deg":{"type":"number","title":"Beamwidth E Deg","description":"Array-factor half-power beamwidth, E-plane cut"},"beamwidth_h_deg":{"type":"number","title":"Beamwidth H Deg","description":"Array-factor half-power beamwidth, H-plane cut"},"steer_theta_deg":{"type":"number","title":"Steer Theta Deg"},"steer_phi_deg":{"type":"number","title":"Steer Phi Deg"},"grating_lobe_free":{"type":"boolean","title":"Grating Lobe Free","description":"d/lambda <= 1/(1+|sin(steer_theta_deg)|) on both axes"},"aperture_width_mm":{"type":"number","title":"Aperture Width Mm","description":"(nx-1)*spacing_x_mm + patch_width_mm"},"aperture_length_mm":{"type":"number","title":"Aperture Length Mm","description":"(ny-1)*spacing_y_mm + patch_length_mm"},"aperture_width_lambda":{"type":"number","title":"Aperture Width Lambda","description":"aperture_width_mm expressed as a fraction of lambda0"},"aperture_length_lambda":{"type":"number","title":"Aperture Length Lambda","description":"aperture_length_mm expressed as a fraction of lambda0"},"aperture_area_cm2":{"type":"number","title":"Aperture Area Cm2","description":"aperture_width_mm * aperture_length_mm, in cm^2 (board footprint)"},"pattern_cut_e":{"items":{"$ref":"#/components/schemas/PatternPoint"},"type":"array","title":"Pattern Cut E","description":"181 samples, theta in [-90, +90] deg, 1 deg step"},"pattern_cut_h":{"items":{"$ref":"#/components/schemas/PatternPoint"},"type":"array","title":"Pattern Cut H","description":"181 samples, theta in [-90, +90] deg, 1 deg step"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Always includes the mutual-coupling-neglected disclosure"}},"type":"object","required":["nx","ny","spacing_x_mm","spacing_y_mm","spacing_x_lambda","spacing_y_lambda","array_gain_dbi","directivity_dbi","beamwidth_e_deg","beamwidth_h_deg","steer_theta_deg","steer_phi_deg","grating_lobe_free","aperture_width_mm","aperture_length_mm","aperture_width_lambda","aperture_length_lambda","aperture_area_cm2","pattern_cut_e","pattern_cut_h"],"title":"ArrayResult","description":"Uniform planar array design result (nested under PatchAntennaResult.array)."},"Body_import_csv_api_private_components_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_csv_api_private_components_import_post"},"Body_upload_material_api_materials_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_material_api_materials_upload_post"},"Body_upload_pdf_api_chat_gemini_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_pdf_api_chat_gemini_upload_post"},"Body_upload_touchstone_api_fab_outcomes_touchstone_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"target_freq_ghz":{"type":"number","title":"Target Freq Ghz"}},"type":"object","required":["file","target_freq_ghz"],"title":"Body_upload_touchstone_api_fab_outcomes_touchstone_post"},"ChainScores":{"properties":{"cost":{"type":"number","title":"Cost","default":0.0},"size":{"type":"number","title":"Size","default":0.0},"performance":{"type":"number","title":"Performance","default":0.0},"composite":{"type":"number","title":"Composite","default":0.0}},"type":"object","title":"ChainScores","description":"Individual objective scores (0-1, higher is better)."},"ChatMessage":{"properties":{"role":{"type":"string","enum":["user","model"],"title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"history":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"History","default":[]},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["message"],"title":"ChatRequest"},"ChatResponse":{"properties":{"reply":{"type":"string","title":"Reply"},"tool_calls":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolCallResponse"},"type":"array"},{"type":"null"}],"title":"Tool Calls"}},"type":"object","required":["reply"],"title":"ChatResponse"},"ComplianceCheckResult":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"standard":{"$ref":"#/components/schemas/ComplianceStandard"},"clause":{"type":"string","title":"Clause"},"passed":{"type":"boolean","title":"Passed"},"severity":{"$ref":"#/components/schemas/ComplianceSeverity"},"message":{"type":"string","title":"Message"},"actual_value":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Actual Value"},"required_value":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Required Value"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"applicable":{"type":"boolean","title":"Applicable","default":true}},"additionalProperties":false,"type":"object","required":["rule_id","standard","clause","passed","severity","message"],"title":"ComplianceCheckResult"},"ComplianceReport":{"properties":{"report_id":{"type":"string","title":"Report Id"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"standards_checked":{"items":{"$ref":"#/components/schemas/ComplianceStandard"},"type":"array","title":"Standards Checked"},"stackup_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stackup Fingerprint"},"total_checks":{"type":"integer","title":"Total Checks"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"warnings":{"type":"integer","title":"Warnings"},"not_applicable":{"type":"integer","title":"Not Applicable","default":0},"results":{"items":{"$ref":"#/components/schemas/ComplianceCheckResult"},"type":"array","title":"Results"},"summary":{"type":"string","title":"Summary"}},"additionalProperties":false,"type":"object","required":["report_id","generated_at","standards_checked","total_checks","passed","failed","warnings","results","summary"],"title":"ComplianceReport"},"ComplianceRuleDefinition":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"standard":{"$ref":"#/components/schemas/ComplianceStandard"},"clause":{"type":"string","title":"Clause"},"description":{"type":"string","title":"Description"},"category":{"type":"string","pattern":"^(trace_width|spacing|via|material|layer_stack|copper_weight|surface_finish|thermal|plating|registration|moisture|flammability|substance_restriction|environmental|rf_power)$","title":"Category"},"check_fn_name":{"type":"string","title":"Check Fn Name"},"parameters":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},"type":"object","title":"Parameters"}},"additionalProperties":false,"type":"object","required":["rule_id","standard","clause","description","category","check_fn_name","parameters"],"title":"ComplianceRuleDefinition"},"ComplianceSeverity":{"type":"string","enum":["ERROR","WARNING","INFO"],"title":"ComplianceSeverity"},"ComplianceStandard":{"type":"string","enum":["IPC_2221","IPC_2222","IPC_4101","IPC_6012_CLASS2","IPC_6012_CLASS3","IPC_A_610","MIL_STD_883","MIL_PRF_31032","UL_94","ROHS_3","REACH","FCC_PART_15_247","FCC_PART_80","ETSI_EN_300_328","ETSI_EN_301_893"],"title":"ComplianceStandard"},"CopperFoilProfileType":{"type":"string","enum":["standard_ED","RTF","VLP","HVLP","custom"],"title":"CopperFoilProfileType"},"CopperPourSpreadingResult":{"properties":{"spreading_rth":{"type":"number","title":"Spreading Rth"},"effective_area_mm2":{"type":"number","title":"Effective Area Mm2"},"tau":{"type":"number","title":"Tau"}},"type":"object","required":["spreading_rth","effective_area_mm2","tau"],"title":"CopperPourSpreadingResult","description":"Result of copper pour spreading resistance calculation."},"CostPriority":{"type":"string","enum":["low","balanced","performance"],"title":"CostPriority"},"CrosstalkBudgetEntry":{"properties":{"aggressor_id":{"type":"string","title":"Aggressor Id"},"NEXT_dB":{"type":"number","title":"Next Db"},"FEXT_dB":{"type":"number","title":"Fext Db"},"NEXT_voltage_mV":{"type":"number","title":"Next Voltage Mv"},"FEXT_voltage_mV":{"type":"number","title":"Fext Voltage Mv"}},"type":"object","required":["aggressor_id","NEXT_dB","FEXT_dB","NEXT_voltage_mV","FEXT_voltage_mV"],"title":"CrosstalkBudgetEntry","description":"One aggressor's contribution to a crosstalk budget."},"CrosstalkBudgetRequest":{"properties":{"victim":{"$ref":"#/components/schemas/CrosstalkConfig"},"aggressors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Aggressors"}},"type":"object","required":["victim","aggressors"],"title":"CrosstalkBudgetRequest"},"CrosstalkBudgetResult":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/CrosstalkBudgetEntry"},"type":"array","title":"Entries"},"total_NEXT_dB":{"type":"number","title":"Total Next Db"},"total_FEXT_dB":{"type":"number","title":"Total Fext Db"},"total_NEXT_voltage_mV":{"type":"number","title":"Total Next Voltage Mv"},"total_FEXT_voltage_mV":{"type":"number","title":"Total Fext Voltage Mv"},"worst_aggressor_id":{"type":"string","title":"Worst Aggressor Id"}},"type":"object","required":["entries","total_NEXT_dB","total_FEXT_dB","total_NEXT_voltage_mV","total_FEXT_voltage_mV","worst_aggressor_id"],"title":"CrosstalkBudgetResult","description":"Aggregated crosstalk budget across multiple aggressors."},"CrosstalkConfig":{"properties":{"aggressor_layer":{"type":"integer","title":"Aggressor Layer"},"victim_layer":{"type":"integer","title":"Victim Layer"},"trace_width_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Trace Width Mm"},"trace_separation_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Trace Separation Mm"},"dielectric_height_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Dielectric Height Mm"},"dk":{"type":"number","exclusiveMinimum":0.0,"title":"Dk"},"df":{"type":"number","minimum":0.0,"title":"Df"},"copper_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Copper Thickness Mm"},"coupling_length_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Coupling Length Mm"},"rise_time_ns":{"type":"number","exclusiveMinimum":0.0,"title":"Rise Time Ns"},"aggressor_voltage_v":{"type":"number","exclusiveMinimum":0.0,"title":"Aggressor Voltage V"},"trace_type":{"type":"string","enum":["microstrip","stripline","asymmetric_stripline"],"title":"Trace Type"}},"type":"object","required":["aggressor_layer","victim_layer","trace_width_mm","trace_separation_mm","dielectric_height_mm","dk","df","copper_thickness_mm","coupling_length_mm","rise_time_ns","aggressor_voltage_v","trace_type"],"title":"CrosstalkConfig","description":"Input configuration for a crosstalk analysis run."},"CrosstalkResult":{"properties":{"NEXT_dB":{"type":"number","title":"Next Db"},"FEXT_dB":{"type":"number","title":"Fext Db"},"NEXT_voltage_mV":{"type":"number","title":"Next Voltage Mv"},"FEXT_voltage_mV":{"type":"number","title":"Fext Voltage Mv"},"coupling_coefficient_backward":{"type":"number","title":"Coupling Coefficient Backward"},"coupling_coefficient_forward":{"type":"number","title":"Coupling Coefficient Forward"},"isolation_margin_dB":{"type":"number","title":"Isolation Margin Db"},"saturated":{"type":"boolean","title":"Saturated"}},"type":"object","required":["NEXT_dB","FEXT_dB","NEXT_voltage_mV","FEXT_voltage_mV","coupling_coefficient_backward","coupling_coefficient_forward","isolation_margin_dB","saturated"],"title":"CrosstalkResult","description":"Result of a single-pair crosstalk calculation."},"CrosstalkSpacingRequest":{"properties":{"config":{"$ref":"#/components/schemas/CrosstalkConfig"},"target_isolation_dB":{"type":"number","title":"Target Isolation Db"}},"type":"object","required":["config","target_isolation_dB"],"title":"CrosstalkSpacingRequest"},"DecouplingCapacitor":{"properties":{"type":{"type":"string","enum":["MLCC","interplanar","bulk"],"title":"Type"},"capacitance_f":{"type":"number","title":"Capacitance F"},"esr_ohm":{"type":"number","title":"Esr Ohm"},"esl_h":{"type":"number","title":"Esl H"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"},"label":{"type":"string","title":"Label"}},"type":"object","required":["type","capacitance_f","esr_ohm","esl_h","quantity","label"],"title":"DecouplingCapacitor"},"DemoStreamRequest":{"properties":{"scenario_id":{"type":"string","title":"Scenario Id"}},"type":"object","required":["scenario_id"],"title":"DemoStreamRequest"},"DesignImportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"import_type":{"type":"string","enum":["magicon_internal","odb_plus_plus"],"title":"Import Type"},"project_name":{"type":"string","title":"Project Name"},"schema_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Version"},"eda_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eda Source"},"layer_count":{"type":"integer","title":"Layer Count"},"component_count":{"type":"integer","title":"Component Count"},"has_rf_chain":{"type":"boolean","title":"Has Rf Chain"},"has_ai_reasoning":{"type":"boolean","title":"Has Ai Reasoning"},"has_embedded_sidecar":{"type":"boolean","title":"Has Embedded Sidecar","default":false},"design_intelligence":{"anyOf":[{"$ref":"#/components/schemas/DesignIntelligenceResult"},{"type":"null"}]},"full_design":{"anyOf":[{"$ref":"#/components/schemas/FullDesignPayload"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]}},"additionalProperties":false,"type":"object","required":["success","import_type","project_name","layer_count","component_count","has_rf_chain","has_ai_reasoning"],"title":"DesignImportResponse","description":"HTTP response body for ``POST /api/design/import``."},"DesignIntelligenceResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"insights":{"anyOf":[{"$ref":"#/components/schemas/DesignIntelligenceResult"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"additionalProperties":false,"type":"object","required":["success"],"title":"DesignIntelligenceResponse"},"DesignIntelligenceResult":{"properties":{"material_insights":{"items":{"$ref":"#/components/schemas/MaterialInsight"},"type":"array","title":"Material Insights"},"impedance_checks":{"items":{"$ref":"#/components/schemas/ImpedanceFeasibility"},"type":"array","title":"Impedance Checks"},"suggestions":{"items":{"$ref":"#/components/schemas/DesignSuggestion"},"type":"array","title":"Suggestions"},"yield_data":{"anyOf":[{"$ref":"#/components/schemas/YieldSummary"},{"type":"null"}]},"fingerprint":{"type":"string","title":"Fingerprint"}},"additionalProperties":false,"type":"object","required":["material_insights","impedance_checks","suggestions","fingerprint"],"title":"DesignIntelligenceResult"},"DesignSuggestion":{"properties":{"category":{"type":"string","title":"Category"},"message":{"type":"string","title":"Message"},"priority":{"type":"string","enum":["low","medium","high"],"title":"Priority"}},"additionalProperties":false,"type":"object","required":["category","message","priority"],"title":"DesignSuggestion"},"EnvironmentalComplianceConfig":{"properties":{"target_markets":{"items":{"type":"string"},"type":"array","title":"Target Markets"},"product_category":{"type":"string","title":"Product Category","default":"general"},"flame_retardant_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flame Retardant Type"},"surface_finish":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface Finish"},"solder_alloy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Solder Alloy"}},"additionalProperties":false,"type":"object","required":["target_markets"],"title":"EnvironmentalComplianceConfig"},"ExportRequest":{"properties":{"stackup_data":{"additionalProperties":true,"type":"object","title":"Stackup Data"},"project_name":{"type":"string","title":"Project Name","default":"pcb_stackup"},"include_sidecar":{"type":"boolean","title":"Include Sidecar","default":false}},"type":"object","required":["stackup_data"],"title":"ExportRequest"},"FabOutcomePayload":{"properties":{"stackup_fingerprint":{"type":"string","maxLength":16,"minLength":16,"title":"Stackup Fingerprint"},"design_id":{"type":"string","maxLength":128,"minLength":1,"title":"Design Id"},"layer_count":{"type":"integer","maximum":64.0,"minimum":1.0,"title":"Layer Count"},"met_spec":{"type":"boolean","title":"Met Spec"},"consent_to_aggregate":{"type":"boolean","title":"Consent To Aggregate"},"fab_name":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Fab Name"},"fab_date":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Fab Date"},"panel_quantity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Panel Quantity"},"boards_built":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Boards Built"},"boards_passed_visual":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Boards Passed Visual"},"boards_passed_electrical":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Boards Passed Electrical"},"target_impedance_ohms":{"anyOf":[{"type":"number","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Target Impedance Ohms"},"target_frequency_ghz":{"anyOf":[{"type":"number","maximum":110.0,"minimum":0.0},{"type":"null"}],"title":"Target Frequency Ghz"},"measured_impedance_ohms":{"anyOf":[{"type":"number","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Measured Impedance Ohms"},"measured_at_frequency_ghz":{"anyOf":[{"type":"number","maximum":110.0,"minimum":0.0},{"type":"null"}],"title":"Measured At Frequency Ghz"},"return_loss_db":{"anyOf":[{"type":"number","maximum":0.0,"minimum":-100.0},{"type":"null"}],"title":"Return Loss Db"},"insertion_loss_db":{"anyOf":[{"type":"number","maximum":0.0,"minimum":-100.0},{"type":"null"}],"title":"Insertion Loss Db"},"failure_mode":{"anyOf":[{"$ref":"#/components/schemas/FailureMode"},{"type":"null"}]},"free_text_note":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Free Text Note"}},"additionalProperties":false,"type":"object","required":["stackup_fingerprint","design_id","layer_count","met_spec","consent_to_aggregate"],"title":"FabOutcomePayload","description":"Request body for POST /api/fab-outcomes."},"FailureMode":{"type":"string","enum":["delamination","impedance_drift","soldering","rf_perf","warpage","open_short","other"],"title":"FailureMode"},"FeedbackPayload":{"properties":{"source":{"type":"string","maxLength":64,"minLength":1,"title":"Source"},"trigger":{"type":"string","maxLength":32,"minLength":1,"title":"Trigger"},"rating":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"additionalProperties":false,"type":"object","required":["source","trigger"],"title":"FeedbackPayload","description":"Request body for POST /api/feedback."},"FiberWeaveRequest":{"properties":{"glass_style_id":{"type":"string","title":"Glass Style Id"},"trace_width_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Trace Width Mm"},"trace_angle_deg":{"type":"number","maximum":360.0,"minimum":0.0,"title":"Trace Angle Deg"},"nominal_dk":{"type":"number","exclusiveMinimum":0.0,"title":"Nominal Dk"},"dielectric_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Dielectric Thickness Mm"}},"type":"object","required":["glass_style_id","trace_width_mm","trace_angle_deg","nominal_dk","dielectric_thickness_mm"],"title":"FiberWeaveRequest"},"FingerprintRequest":{"properties":{"layer_count":{"type":"integer","title":"Layer Count"},"materials":{"items":{"$ref":"#/components/schemas/MaterialInput"},"type":"array","title":"Materials"},"copper_weights":{"items":{"type":"string"},"type":"array","title":"Copper Weights"},"build_type":{"type":"string","title":"Build Type"}},"type":"object","required":["layer_count","materials","copper_weights","build_type"],"title":"FingerprintRequest"},"FoilRecommendation":{"properties":{"recommended":{"$ref":"#/components/schemas/CopperFoilProfileType","description":"Lowest-roughness foil profile the material's frequency capability calls for"},"compatible":{"items":{"$ref":"#/components/schemas/CopperFoilProfileType"},"type":"array","title":"Compatible","description":"All foil profiles acceptable for this material (recommended included)"}},"type":"object","required":["recommended","compatible"],"title":"FoilRecommendation","description":"Recommended + compatible copper-foil profiles for one dielectric.\n\nThe recommended profile is the lowest-roughness foil the material's\nfrequency capability calls for; ``compatible`` lists every profile that is\nacceptable (a smoother foil than recommended is always allowed)."},"FullDesignPayload":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/ImportedLayer"},"type":"array","title":"Layers"},"impedance_targets":{"items":{"$ref":"#/components/schemas/ImportedImpedanceTarget"},"type":"array","title":"Impedance Targets","default":[]},"design_rules":{"anyOf":[{"$ref":"#/components/schemas/ImportedDesignRules"},{"type":"null"}]},"manufacturing":{"anyOf":[{"$ref":"#/components/schemas/ImportedManufacturing"},{"type":"null"}]},"frequency_hz":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Hz"},"rf_chain":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Rf Chain"},"chain_reasoning":{"anyOf":[{"$ref":"#/components/schemas/MagiconChainReasoning"},{"type":"null"}]},"stackup_rationale":{"anyOf":[{"$ref":"#/components/schemas/MagiconStackupRationale"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["layers"],"title":"FullDesignPayload","description":"Complete design data returned when ``include_full=true``."},"GlassRecommendation":{"properties":{"style_id":{"type":"string","title":"Style Id"},"is_preferred":{"type":"boolean","title":"Is Preferred"},"cost_multiplier":{"type":"number","title":"Cost Multiplier"},"reasoning":{"type":"string","title":"Reasoning"},"impedance_variation_pct":{"type":"number","title":"Impedance Variation Pct"}},"type":"object","required":["style_id","is_preferred","cost_multiplier","reasoning","impedance_variation_pct"],"title":"GlassRecommendation","description":"A single glass style recommendation."},"GlassStyleProperties":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"nominal_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Nominal Thickness Mm"},"is_spread":{"type":"boolean","title":"Is Spread"},"dk_variation_pct":{"type":"number","minimum":0.0,"title":"Dk Variation Pct"},"fiber_pitch_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Fiber Pitch Mm"},"resin_content_pct":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Resin Content Pct"},"recommended_max_frequency_ghz":{"type":"number","exclusiveMinimum":0.0,"title":"Recommended Max Frequency Ghz"}},"type":"object","required":["id","label","nominal_thickness_mm","is_spread","dk_variation_pct","fiber_pitch_mm","resin_content_pct","recommended_max_frequency_ghz"],"title":"GlassStyleProperties","description":"Properties of a single glass style entry."},"GlassWeaveImpact":{"properties":{"impedance_variation_pct":{"type":"number","title":"Impedance Variation Pct"},"skew_ps_per_mm":{"type":"number","title":"Skew Ps Per Mm"},"effective_dk_range_min":{"type":"number","title":"Effective Dk Range Min"},"effective_dk_range_max":{"type":"number","title":"Effective Dk Range Max"}},"type":"object","required":["impedance_variation_pct","skew_ps_per_mm","effective_dk_range_min","effective_dk_range_max"],"title":"GlassWeaveImpact","description":"Fiber weave impact on signal integrity."},"GraphQLRequest":{"properties":{"query":{"type":"string","maxLength":2000,"title":"Query"},"variables":{"additionalProperties":true,"type":"object","title":"Variables"}},"type":"object","required":["query"],"title":"GraphQLRequest","description":"Schema for Nexar GraphQL queries with security validation.\n\nBlocks introspection, mutations, and excessively nested/large queries."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HydrationCard":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"result":{"title":"Result"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","result"],"title":"HydrationCard"},"HydrationMessage":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"grounding":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Grounding"}},"type":"object","required":["id","role","content"],"title":"HydrationMessage"},"HydrationResponse":{"properties":{"conversation_id":{"type":"string","title":"Conversation Id"},"messages":{"items":{"$ref":"#/components/schemas/HydrationMessage"},"type":"array","title":"Messages"},"cards":{"items":{"$ref":"#/components/schemas/HydrationCard"},"type":"array","title":"Cards","default":[]}},"type":"object","required":["conversation_id","messages"],"title":"HydrationResponse"},"ImpedanceFeasibility":{"properties":{"target_type":{"type":"string","title":"Target Type"},"target_ohm":{"type":"number","title":"Target Ohm"},"feasible":{"type":"boolean","title":"Feasible"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["target_type","target_ohm","feasible","message"],"title":"ImpedanceFeasibility"},"ImpedanceTarget":{"properties":{"value":{"type":"number","title":"Value","description":"Target impedance in Ω","default":50.0},"topology":{"$ref":"#/components/schemas/Topology","description":"Transmission-line topology","default":"microstrip"},"differential":{"type":"boolean","title":"Differential","description":"Treat `value` as a differential-pair impedance (Z_diff) solved with the edge-coupled inverse solver instead of single-ended Z0","default":false},"spacing_mm":{"anyOf":[{"type":"number","maximum":2.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Spacing Mm","description":"Edge-to-edge pair gap for differential targets (mm); defaults to 0.15 mm. Ignored for single-ended targets."}},"type":"object","title":"ImpedanceTarget","description":"A single impedance target the solver must satisfy."},"ImportResult":{"properties":{"imported":{"type":"integer","title":"Imported","default":0},"skipped":{"type":"integer","title":"Skipped","default":0},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"}},"type":"object","title":"ImportResult","description":"Result of a CSV import operation."},"ImportedDesignRules":{"properties":{"min_trace_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Trace Width Mm"},"min_spacing_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Spacing Mm"},"min_via_drill_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Via Drill Mm"},"min_via_pad_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Via Pad Mm"},"min_annular_ring_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Annular Ring Mm"}},"additionalProperties":false,"type":"object","title":"ImportedDesignRules","description":"Design rules from an imported design file."},"ImportedImpedanceTarget":{"properties":{"type":{"type":"string","title":"Type"},"signal_layer":{"type":"string","title":"Signal Layer"},"reference_layer":{"type":"string","title":"Reference Layer"},"target_ohm":{"type":"number","title":"Target Ohm"},"trace_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trace Width Mm"}},"additionalProperties":false,"type":"object","required":["type","signal_layer","reference_layer","target_ohm"],"title":"ImportedImpedanceTarget","description":"An impedance target from an imported design file."},"ImportedLayer":{"properties":{"position":{"type":"integer","title":"Position"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material"},"thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Thickness Mm"},"dk":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dk"},"df":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Df"},"copper_weight_oz":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Copper Weight Oz"}},"additionalProperties":false,"type":"object","required":["position","name","type"],"title":"ImportedLayer","description":"A single layer from an imported design file."},"ImportedManufacturing":{"properties":{"build_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Type"},"surface_finish":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface Finish"},"solder_mask":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Solder Mask"},"via_technology":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Technology"},"copper_weight_oz":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Copper Weight Oz"},"tg_celsius":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tg Celsius"},"cte_ppm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cte Ppm"}},"additionalProperties":false,"type":"object","title":"ImportedManufacturing","description":"Manufacturing parameters from an imported design file."},"InnerLayerSpreadingResult":{"properties":{"name":{"type":"string","title":"Name"},"pour_area_mm2":{"type":"number","title":"Pour Area Mm2"},"spreading_rth":{"type":"number","title":"Spreading Rth"}},"type":"object","required":["name","pour_area_mm2","spreading_rth"],"title":"InnerLayerSpreadingResult","description":"Per-inner-copper-layer Kennedy spreading contribution (2-D coupling)."},"InterplanarCapacitance":{"properties":{"capacitance_pf":{"type":"number","title":"Capacitance Pf"},"esr_ohm":{"type":"number","title":"Esr Ohm"},"esl_nh":{"type":"number","title":"Esl Nh"},"resonant_frequency_mhz":{"type":"number","title":"Resonant Frequency Mhz"},"capacitance_per_sq_inch_pf":{"type":"number","title":"Capacitance Per Sq Inch Pf"}},"type":"object","required":["capacitance_pf","esr_ohm","esl_nh","resonant_frequency_mhz","capacitance_per_sq_inch_pf"],"title":"InterplanarCapacitance"},"LayerType":{"type":"string","enum":["signal","ground","power"],"title":"LayerType"},"LayoutRequest":{"properties":{"rfChain":{"additionalProperties":true,"type":"object","title":"Rfchain"},"boardWidthMm":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Boardwidthmm","default":100},"boardHeightMm":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Boardheightmm","default":100}},"type":"object","required":["rfChain"],"title":"LayoutRequest"},"MagiconChainReasoning":{"properties":{"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"weight_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weight Reasoning"},"components":{"items":{"$ref":"#/components/schemas/MagiconSelectionRationale"},"type":"array","title":"Components"}},"additionalProperties":false,"type":"object","title":"MagiconChainReasoning","description":"RF chain selection reasoning. Internal-only — never sent to fabs."},"MagiconSelectionRationale":{"properties":{"target":{"type":"string","title":"Target"},"summary":{"type":"string","title":"Summary"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"breakdown":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Breakdown"},"source":{"anyOf":[{"type":"string","enum":["llm","agent","manual","fallback"]},{"type":"null"}],"title":"Source"}},"additionalProperties":false,"type":"object","required":["target","summary"],"title":"MagiconSelectionRationale","description":"Rationale for a single selection (component or material). Internal-only."},"MagiconStackupRationale":{"properties":{"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"binding_constraint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binding Constraint"},"materials":{"items":{"$ref":"#/components/schemas/MagiconSelectionRationale"},"type":"array","title":"Materials"},"layers":{"items":{"$ref":"#/components/schemas/MagiconSelectionRationale"},"type":"array","title":"Layers"}},"additionalProperties":false,"type":"object","title":"MagiconStackupRationale","description":"Stackup/material selection reasoning. Internal-only — never sent to fabs."},"MaterialInput":{"properties":{"name":{"type":"string","title":"Name","default":""},"thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Thickness Mm"},"dk":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dk"}},"type":"object","title":"MaterialInput"},"MaterialInsight":{"properties":{"message":{"type":"string","title":"Message"},"severity":{"type":"string","enum":["info","warning","error"],"title":"Severity"},"affected_layers":{"items":{"type":"string"},"type":"array","title":"Affected Layers"}},"additionalProperties":false,"type":"object","required":["message","severity","affected_layers"],"title":"MaterialInsight"},"MonteCarloRequest":{"properties":{"base_inputs":{"additionalProperties":{"type":"number"},"type":"object","title":"Base Inputs","description":"Nominal input values"},"vary_params":{"anyOf":[{"additionalProperties":{"items":{"type":"number"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Vary Params","description":"Params to vary: {name: [min, max]}. All if None."},"n_samples":{"type":"integer","maximum":10000.0,"minimum":10.0,"title":"N Samples","description":"Number of LHS samples","default":500}},"type":"object","required":["base_inputs"],"title":"MonteCarloRequest"},"MultiChainDesignRequest":{"properties":{"params":{"additionalProperties":true,"type":"object","title":"Params"},"filtering_reqs":{"additionalProperties":true,"type":"object","title":"Filtering Reqs"},"agent_config":{"additionalProperties":true,"type":"object","title":"Agent Config"},"weights":{"$ref":"#/components/schemas/ObjectiveWeights"},"max_chains":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Chains","default":8},"use_ai_advisor":{"type":"boolean","title":"Use Ai Advisor","default":false}},"type":"object","required":["params"],"title":"MultiChainDesignRequest","description":"Request body for POST /api/rf-chain/design-multi."},"MultiChainDesignResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","default":"success"},"primary_chain":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Primary Chain"},"scored_chains":{"items":{"$ref":"#/components/schemas/ScoredChain"},"type":"array","title":"Scored Chains"},"pareto_frontier":{"items":{"type":"integer"},"type":"array","title":"Pareto Frontier"},"recommended_weights":{"anyOf":[{"$ref":"#/components/schemas/ObjectiveWeights"},{"type":"null"}]},"weight_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weight Reasoning"},"design_time_ms":{"type":"number","title":"Design Time Ms","default":0.0},"iterations":{"type":"integer","title":"Iterations","default":0},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","title":"MultiChainDesignResponse","description":"Response from multi-chain optimization endpoint."},"ObjectiveWeights":{"properties":{"cost":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Cost","default":0.33},"size":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Size","default":0.33},"performance":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Performance","default":0.34}},"type":"object","title":"ObjectiveWeights","description":"Weights for cost / size / performance objectives. Must sum to 1.0."},"OptimizeRequest":{"properties":{"objective_output":{"type":"string","title":"Objective Output","description":"Output to optimize"},"objective_type":{"type":"string","enum":["minimize","maximize","target"],"title":"Objective Type","description":"Optimization objective: minimize, maximize, or target a specific value","default":"minimize"},"target_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Value","description":"Target value (required when objective_type is 'target')"},"fixed_inputs":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Fixed Inputs","description":"Inputs to hold constant"},"bounds_override":{"anyOf":[{"additionalProperties":{"items":{"type":"number"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Bounds Override","description":"Override bounds: {name: [min, max]}"},"max_iter":{"type":"integer","maximum":1000.0,"minimum":10.0,"title":"Max Iter","description":"Max optimizer iterations","default":200}},"type":"object","required":["objective_output"],"title":"OptimizeRequest"},"OrgMemberResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"role":{"type":"string","title":"Role"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","role","created_at"],"title":"OrgMemberResponse","description":"Response model for an organization member."},"OrganizationCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":100,"minLength":1,"title":"Slug"}},"type":"object","required":["name","slug"],"title":"OrganizationCreate","description":"Request body for creating an organization."},"OrganizationResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"created_by":{"type":"string","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"member_count":{"type":"integer","title":"Member Count","default":0}},"type":"object","required":["id","name","slug","created_by","created_at"],"title":"OrganizationResponse","description":"Response model for an organization."},"OrthotropicDkRequest":{"properties":{"glass_style_id":{"type":"string","title":"Glass Style Id"},"resin_content_pct":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Resin Content Pct"},"nominal_dk":{"type":"number","exclusiveMinimum":0.0,"title":"Nominal Dk"},"angle_deg":{"anyOf":[{"type":"number","maximum":360.0,"minimum":0.0},{"type":"null"}],"title":"Angle Deg"}},"type":"object","required":["glass_style_id","resin_content_pct","nominal_dk"],"title":"OrthotropicDkRequest"},"PDNAnalysisRequest":{"properties":{"plane_pairs":{"items":{"$ref":"#/components/schemas/PlanePairConfig"},"type":"array","minItems":1,"title":"Plane Pairs"},"decoupling_caps":{"items":{"$ref":"#/components/schemas/DecouplingCapacitor"},"type":"array","title":"Decoupling Caps"},"target":{"$ref":"#/components/schemas/PDNTargetConfig"}},"type":"object","required":["plane_pairs","target"],"title":"PDNAnalysisRequest"},"PDNAnalysisResult":{"properties":{"plane_pairs":{"items":{"$ref":"#/components/schemas/PlanePairConfig"},"type":"array","title":"Plane Pairs"},"interplanar_capacitances":{"items":{"$ref":"#/components/schemas/InterplanarCapacitance"},"type":"array","title":"Interplanar Capacitances"},"target_impedance_ohm":{"type":"number","title":"Target Impedance Ohm"},"bandwidth_hz":{"type":"number","title":"Bandwidth Hz"},"impedance_profile":{"$ref":"#/components/schemas/PDNImpedanceProfile"},"decoupling_caps":{"items":{"$ref":"#/components/schemas/DecouplingCapacitor"},"type":"array","title":"Decoupling Caps"},"recommendations":{"items":{"$ref":"#/components/schemas/DecouplingCapacitor"},"type":"array","title":"Recommendations"},"overall_pass":{"type":"boolean","title":"Overall Pass"}},"type":"object","required":["plane_pairs","interplanar_capacitances","target_impedance_ohm","bandwidth_hz","impedance_profile","decoupling_caps","recommendations","overall_pass"],"title":"PDNAnalysisResult"},"PDNApplyResult":{"properties":{"result":{"$ref":"#/components/schemas/PDNAnalysisResult"},"placed_caps":{"items":{"$ref":"#/components/schemas/DecouplingCapacitor"},"type":"array","title":"Placed Caps"},"placed_bom_lines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Placed Bom Lines"},"stackup_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stackup Action"},"converged":{"type":"boolean","title":"Converged"}},"type":"object","required":["result","placed_caps","converged"],"title":"PDNApplyResult","description":"Outcome of placing the recommended decoupling caps (POST /api/pdn/apply)."},"PDNImpedancePoint":{"properties":{"frequency_hz":{"type":"number","title":"Frequency Hz"},"impedance_ohm":{"type":"number","title":"Impedance Ohm"},"phase_deg":{"type":"number","title":"Phase Deg"}},"type":"object","required":["frequency_hz","impedance_ohm","phase_deg"],"title":"PDNImpedancePoint"},"PDNImpedanceProfile":{"properties":{"points":{"items":{"$ref":"#/components/schemas/PDNImpedancePoint"},"type":"array","title":"Points"},"violations":{"items":{"$ref":"#/components/schemas/PDNViolation"},"type":"array","title":"Violations"}},"type":"object","title":"PDNImpedanceProfile"},"PDNTargetConfig":{"properties":{"mode":{"type":"string","enum":["preset","custom"],"title":"Mode"},"preset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset Name"},"voltage_v":{"type":"number","exclusiveMinimum":0.0,"title":"Voltage V"},"ripple_pct":{"type":"number","exclusiveMinimum":0.0,"title":"Ripple Pct"},"transient_current_a":{"type":"number","minimum":0.0,"title":"Transient Current A"},"rise_time_ns":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rise Time Ns"}},"type":"object","required":["mode","voltage_v","ripple_pct","transient_current_a"],"title":"PDNTargetConfig"},"PDNViolation":{"properties":{"frequency_hz":{"type":"number","title":"Frequency Hz"},"impedance_ohm":{"type":"number","title":"Impedance Ohm"},"target_ohm":{"type":"number","title":"Target Ohm"},"margin_db":{"type":"number","title":"Margin Db"},"severity":{"type":"string","enum":["critical","warning"],"title":"Severity"}},"type":"object","required":["frequency_hz","impedance_ohm","target_ohm","margin_db","severity"],"title":"PDNViolation"},"PatchAntennaInput":{"properties":{"frequency_ghz":{"type":"number","exclusiveMinimum":0.0,"title":"Frequency Ghz","description":"Target resonant frequency f0 (GHz)"},"substrate":{"$ref":"#/components/schemas/AntennaSubstrate"},"copper_thickness_um":{"type":"number","exclusiveMinimum":0.0,"title":"Copper Thickness Um","description":"Copper thickness (um); default 1 oz = 35 um","default":35.0},"target_impedance_ohm":{"type":"number","exclusiveMinimum":0.0,"title":"Target Impedance Ohm","description":"Feed-line / inset target impedance (ohm)","default":50.0},"array":{"anyOf":[{"$ref":"#/components/schemas/ArrayConfig"},{"type":"null"}]}},"type":"object","required":["frequency_ghz","substrate"],"title":"PatchAntennaInput","description":"Request body for POST /api/antenna/patch/design."},"PatchAntennaResult":{"properties":{"patch_width_mm":{"type":"number","title":"Patch Width Mm"},"patch_length_mm":{"type":"number","title":"Patch Length Mm"},"delta_l_mm":{"type":"number","title":"Delta L Mm","description":"Fringing length extension per edge (mm)"},"effective_dk":{"type":"number","title":"Effective Dk","description":"Effective dielectric constant (eps_eff)"},"resonant_frequency_ghz":{"type":"number","title":"Resonant Frequency Ghz","description":"Recomputed resonant frequency of the synthesized patch"},"bandwidth_mhz":{"type":"number","title":"Bandwidth Mhz","description":"VSWR<=2 impedance bandwidth (MHz)"},"bandwidth_pct":{"type":"number","title":"Bandwidth Pct","description":"VSWR<=2 fractional bandwidth (%)"},"directivity_dbi":{"type":"number","title":"Directivity Dbi"},"gain_dbi":{"type":"number","title":"Gain Dbi","description":"directivity_dbi + 10*log10(radiation_efficiency_pct/100)"},"radiation_efficiency_pct":{"type":"number","title":"Radiation Efficiency Pct"},"q_radiation":{"type":"number","title":"Q Radiation"},"q_dielectric":{"type":"number","title":"Q Dielectric"},"q_conductor":{"type":"number","title":"Q Conductor"},"edge_impedance_ohm":{"type":"number","title":"Edge Impedance Ohm","description":"Resonant input resistance at the radiating edge (y=0)"},"inset_distance_mm":{"type":"number","title":"Inset Distance Mm","description":"Inset-feed distance y0 from the edge; 0 when no inset is used"},"inset_gap_mm":{"type":"number","title":"Inset Gap Mm","description":"Inset notch gap; patch_width_mm / 20"},"feed_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Feed Width Mm","description":"50-ohm-class feed-line width via calculate_microstrip_trace_width; None if unsolvable"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"substrate":{"$ref":"#/components/schemas/AntennaSubstrate"},"array":{"anyOf":[{"$ref":"#/components/schemas/ArrayResult"},{"type":"null"}]},"suggested_substrate":{"anyOf":[{"$ref":"#/components/schemas/SuggestedSubstrate"},{"type":"null"}],"description":"Present ONLY when this design is loss-dominated (trips LOW_EFFICIENCY_WARN_PCT) and a usable alternative was found. Attached by the caller, which is the layer that knows the solved stackup."}},"type":"object","required":["patch_width_mm","patch_length_mm","delta_l_mm","effective_dk","resonant_frequency_ghz","bandwidth_mhz","bandwidth_pct","directivity_dbi","gain_dbi","radiation_efficiency_pct","q_radiation","q_dielectric","q_conductor","edge_impedance_ohm","inset_distance_mm","inset_gap_mm","substrate"],"title":"PatchAntennaResult","description":"Synthesized rectangular patch dimensions + analytical performance estimate."},"PatternPoint":{"properties":{"theta_deg":{"type":"number","title":"Theta Deg","description":"Elevation angle from broadside (deg), -90..+90"},"af_db":{"type":"number","title":"Af Db","description":"Normalized array factor (dB, 0 dB at the cut's peak)"}},"type":"object","required":["theta_deg","af_db"],"title":"PatternPoint","description":"One sample of an array-factor pattern cut."},"PlanePairConfig":{"properties":{"power_layer_name":{"type":"string","title":"Power Layer Name"},"ground_layer_name":{"type":"string","title":"Ground Layer Name"},"dielectric_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Dielectric Thickness Mm"},"dielectric_constant":{"type":"number","exclusiveMinimum":0.0,"title":"Dielectric Constant"},"loss_tangent":{"type":"number","minimum":0.0,"title":"Loss Tangent"},"area_mm2":{"type":"number","exclusiveMinimum":0.0,"title":"Area Mm2"},"board_width_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Board Width Mm"},"board_height_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Board Height Mm"}},"type":"object","required":["power_layer_name","ground_layer_name","dielectric_thickness_mm","dielectric_constant","loss_tangent","area_mm2","board_width_mm","board_height_mm"],"title":"PlanePairConfig"},"PredictBatchRequest":{"properties":{"inputs":{"items":{"additionalProperties":{"type":"number"},"type":"object"},"type":"array","title":"Inputs","description":"List of input sets"}},"type":"object","required":["inputs"],"title":"PredictBatchRequest"},"PredictRequest":{"properties":{"inputs":{"additionalProperties":{"type":"number"},"type":"object","title":"Inputs","description":"Input parameter values keyed by name"}},"type":"object","required":["inputs"],"title":"PredictRequest"},"PrivateComponentCreate":{"properties":{"part_number":{"type":"string","maxLength":100,"minLength":1,"title":"Part Number"},"manufacturer":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Manufacturer"},"function":{"type":"string","title":"Function"},"frequency_range":{"items":{"type":"number"},"type":"array","title":"Frequency Range"},"component_data":{"additionalProperties":true,"type":"object","title":"Component Data"},"status":{"type":"string","title":"Status","default":"draft"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"derating_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Derating Rules"},"datasheet_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datasheet Url"}},"type":"object","required":["part_number","function"],"title":"PrivateComponentCreate","description":"Request body for creating a private component."},"PrivateComponentResponse":{"properties":{"id":{"type":"string","title":"Id"},"owner_type":{"type":"string","title":"Owner Type"},"owner_id":{"type":"string","title":"Owner Id"},"part_number":{"type":"string","title":"Part Number"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"function":{"type":"string","title":"Function"},"frequency_range":{"items":{"type":"number"},"type":"array","title":"Frequency Range"},"component_data":{"additionalProperties":true,"type":"object","title":"Component Data"},"status":{"type":"string","title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"derating_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Derating Rules"},"datasheet_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datasheet Url"},"created_by":{"type":"string","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","owner_type","owner_id","part_number","function","status","created_by","created_at","updated_at"],"title":"PrivateComponentResponse","description":"Response model for a private component."},"PrivateComponentSearchParams":{"properties":{"function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function"},"frequency_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Min"},"frequency_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Max"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","title":"PrivateComponentSearchParams","description":"Search parameters for private component selection pipeline."},"PrivateComponentUpdate":{"properties":{"part_number":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Part Number"},"manufacturer":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Manufacturer"},"function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function"},"frequency_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Frequency Range"},"component_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Component Data"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"derating_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Derating Rules"},"datasheet_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datasheet Url"}},"type":"object","title":"PrivateComponentUpdate","description":"Request body for updating a private component (all fields optional)."},"ProjectCreate":{"properties":{"id":{"type":"string","title":"Id","description":"Unique project ID (designId from frontend)"},"name":{"type":"string","title":"Name","description":"Project name","default":"Untitled Design"},"current_phase":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Current Phase","description":"Current phase number","default":1},"completed_phases":{"items":{"type":"integer"},"type":"array","title":"Completed Phases","description":"List of completed phase numbers","default":[]},"phase_data":{"additionalProperties":true,"type":"object","title":"Phase Data","description":"Phase data as JSONB","default":{}},"progress":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Progress","description":"Progress percentage","default":0},"created_at_local":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At Local","description":"Local timestamp without timezone"},"updated_at_local":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At Local","description":"Local timestamp without timezone"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA timezone string (e.g., 'America/New_York')"}},"type":"object","required":["id"],"title":"ProjectCreate","description":"Request model for creating a project."},"ProjectFullResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"current_phase":{"type":"integer","title":"Current Phase"},"completed_phases":{"items":{"type":"integer"},"type":"array","title":"Completed Phases"},"phase_data":{"additionalProperties":true,"type":"object","title":"Phase Data"},"progress":{"type":"integer","title":"Progress"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"created_at_local":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At Local"},"updated_at_local":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At Local"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},"type":"object","required":["id","name","current_phase","completed_phases","phase_data","progress","created_at","updated_at"],"title":"ProjectFullResponse","description":"Response model for full project data (includes phase_data)."},"ProjectResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"current_phase":{"type":"integer","title":"Current Phase"},"completed_phases":{"items":{"type":"integer"},"type":"array","title":"Completed Phases"},"progress":{"type":"integer","title":"Progress"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","current_phase","completed_phases","progress","created_at","updated_at"],"title":"ProjectResponse","description":"Response model for project metadata (excludes phase_data for list views)."},"ProjectUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"current_phase":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Current Phase"},"completed_phases":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Completed Phases"},"phase_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Phase Data"},"progress":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Progress"},"updated_at_local":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At Local","description":"Local timestamp without timezone"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA timezone string (e.g., 'America/New_York')"}},"type":"object","title":"ProjectUpdate","description":"Request model for updating a project."},"ReOptimizeRequest":{"properties":{"design":{"additionalProperties":true,"type":"object","title":"Design"},"mode":{"type":"string","enum":["re-optimize","clone","what-if"],"title":"Mode"},"overrides":{"additionalProperties":true,"type":"object","title":"Overrides","default":{}}},"additionalProperties":false,"type":"object","required":["design","mode"],"title":"ReOptimizeRequest","description":"HTTP request body for ``POST /api/design/re-optimize``."},"ReOptimizeResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"mode":{"type":"string","enum":["re-optimize","clone","what-if"],"title":"Mode"},"result":{"additionalProperties":true,"type":"object","title":"Result"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"agent_results":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Agent Results"}},"additionalProperties":false,"type":"object","required":["success","mode","result"],"title":"ReOptimizeResponse","description":"HTTP response body for ``POST /api/design/re-optimize``."},"RecommendResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"alternatives":{"items":{"type":"string"},"type":"array","title":"Alternatives","default":[]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"RecommendResponse"},"ReflowProcess":{"type":"string","enum":["leaded","lead_free"],"title":"ReflowProcess"},"RelaxationInfo":{"properties":{"was_relaxed":{"type":"boolean","title":"Was Relaxed","default":false},"original_tolerance_mm":{"type":"number","title":"Original Tolerance Mm","default":0.0},"relaxed_tolerance_mm":{"type":"number","title":"Relaxed Tolerance Mm","default":0.0},"impedance_tolerance_relaxed":{"type":"boolean","title":"Impedance Tolerance Relaxed","default":false},"message":{"type":"string","title":"Message","default":""}},"type":"object","title":"RelaxationInfo","description":"If constraints were relaxed, describes what changed."},"ReportDataRequest":{"properties":{"reportData":{"additionalProperties":true,"type":"object","title":"Reportdata"},"options":{"$ref":"#/components/schemas/ReportGenerationOptions"}},"type":"object","required":["reportData","options"],"title":"ReportDataRequest","description":"Intent: Wrapper for the complete report payload including both specific options and raw data."},"ReportGenerationOptions":{"properties":{"slideConfig":{"$ref":"#/components/schemas/ReportSlideConfig"},"metadata":{"$ref":"#/components/schemas/ReportMetadata"},"format":{"type":"string","title":"Format","default":"pptx"},"flowDiagramImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flowdiagramimagedataurl"},"diagramImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diagramimagedataurl"},"powerLevelThroughChainImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Powerlevelthroughchainimagedataurl"},"pdnImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdnimagedataurl"},"stackupImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stackupimagedataurl"},"thermalImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thermalimagedataurl"},"viaImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Viaimagedataurl"},"impedanceImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impedanceimagedataurl"},"microstripImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Microstripimagedataurl"},"striplineImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Striplineimagedataurl"},"stressAnalysisImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stressanalysisimagedataurl"},"dfmValidationImageDataUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dfmvalidationimagedataurl"}},"type":"object","required":["slideConfig","metadata"],"title":"ReportGenerationOptions","description":"Intent: Specify formatting and data inclusion preferences for the final PDF/PPTX design report."},"ReportMetadata":{"properties":{"companyName":{"type":"string","title":"Companyname"},"projectName":{"type":"string","title":"Projectname"},"modelPartNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modelpartnumber"},"presentedBy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presentedby"}},"type":"object","required":["companyName","projectName"],"title":"ReportMetadata","description":"Intent: Define project-level metadata (Company, Project, Author) for document branding."},"ReportSlideConfig":{"properties":{"coverPage":{"type":"boolean","title":"Coverpage","default":true},"tableOfContents":{"type":"boolean","title":"Tableofcontents","default":true},"executiveSummary":{"type":"boolean","title":"Executivesummary","default":true},"requirementsSpecs":{"type":"boolean","title":"Requirementsspecs","default":true},"flowDiagram":{"type":"boolean","title":"Flowdiagram","default":true},"rfChainDiagram":{"type":"boolean","title":"Rfchaindiagram","default":true},"powerLevelThroughChain":{"type":"boolean","title":"Powerlevelthroughchain","default":true},"componentDetails":{"type":"boolean","title":"Componentdetails","default":true},"linkBudget":{"type":"boolean","title":"Linkbudget","default":true},"gainLossAnalysis":{"type":"boolean","title":"Gainlossanalysis","default":true},"tradeStudies":{"type":"boolean","title":"Tradestudies","default":true},"powerDeliveryNetwork":{"type":"boolean","title":"Powerdeliverynetwork","default":true},"controlCircuitry":{"type":"boolean","title":"Controlcircuitry","default":true},"stackupDesign":{"type":"boolean","title":"Stackupdesign","default":true},"materialProperties":{"type":"boolean","title":"Materialproperties","default":true},"impedanceControl":{"type":"boolean","title":"Impedancecontrol","default":true},"viaTechnology":{"type":"boolean","title":"Viatechnology","default":true},"thermalAnalysis":{"type":"boolean","title":"Thermalanalysis","default":true},"dfmValidation":{"type":"boolean","title":"Dfmvalidation","default":true},"regulatoryCompliance":{"type":"boolean","title":"Regulatorycompliance","default":true},"designValidation":{"type":"boolean","title":"Designvalidation","default":true},"exportFiles":{"type":"boolean","title":"Exportfiles","default":true},"designNotes":{"type":"boolean","title":"Designnotes","default":true},"componentDatasheets":{"type":"boolean","title":"Componentdatasheets","default":true},"technicalSpecs":{"type":"boolean","title":"Technicalspecs","default":true},"bom":{"type":"boolean","title":"Bom","default":true},"stressAnalysis":{"type":"boolean","title":"Stressanalysis","default":true},"costAnalysis":{"type":"boolean","title":"Costanalysis","default":true},"revisionHistory":{"type":"boolean","title":"Revisionhistory","default":true},"manufacturingNotes":{"type":"boolean","title":"Manufacturingnotes","default":true},"testingProcedures":{"type":"boolean","title":"Testingprocedures","default":true},"riskAssessment":{"type":"boolean","title":"Riskassessment","default":true},"timelineMilestones":{"type":"boolean","title":"Timelinemilestones","default":true},"teamContributors":{"type":"boolean","title":"Teamcontributors","default":true}},"type":"object","title":"ReportSlideConfig","description":"Intent: Toggle specific data blocks and analysis slides in the generated PPTX/PDF."},"ResinFlowEstimate":{"properties":{"layer_name":{"type":"string","title":"Layer Name"},"flow_ratio":{"type":"number","title":"Flow Ratio"},"starved_risk":{"type":"boolean","title":"Starved Risk"},"bleed_risk":{"type":"boolean","title":"Bleed Risk"},"recommendation":{"type":"string","title":"Recommendation"}},"type":"object","required":["layer_name","flow_ratio","starved_risk","bleed_risk","recommendation"],"title":"ResinFlowEstimate","description":"Resin flow estimation for a single prepreg layer."},"RfChainDesignRequest":{"properties":{"params":{"$ref":"#/components/schemas/RfDesignParams"},"filtering_reqs":{"additionalProperties":true,"type":"object","title":"Filtering Reqs"},"agent_config":{"$ref":"#/components/schemas/AgentConfig"}},"type":"object","required":["params"],"title":"RfChainDesignRequest","description":"Top-level request for RF chain design endpoint."},"RfDesignParams":{"properties":{"frequency":{"type":"number","title":"Frequency"},"targetOutputPower":{"type":"number","title":"Targetoutputpower"},"bandwidth":{"type":"number","title":"Bandwidth","default":10.0},"efficiency":{"type":"number","title":"Efficiency","default":30.0},"mainBoardInputVoltage":{"type":"number","title":"Mainboardinputvoltage","default":12.0},"application":{"type":"string","title":"Application","default":"general"},"moduleType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Moduletype"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"wifiStandard":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wifistandard"},"cellularBand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cellularband"},"cellType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Celltype"},"couplerEnabled":{"type":"boolean","title":"Couplerenabled","default":false},"couplingFactor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Couplingfactor"},"internallyMatchedOnly":{"type":"boolean","title":"Internallymatchedonly","default":true},"excludeDie":{"type":"boolean","title":"Excludedie","default":true},"includeVcoAsSignalGenerator":{"type":"boolean","title":"Includevcoassignalgenerator","default":false},"maxAvailablePin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maxavailablepin"},"transmitDutyCyclePercent":{"type":"number","title":"Transmitdutycyclepercent","default":100.0},"outputPower":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outputpower"}},"additionalProperties":true,"type":"object","required":["frequency","targetOutputPower"],"title":"RfDesignParams","description":"RF transmitter design parameters — mirrors frontend RfTransmitterParams."},"ScoreBreakdown":{"properties":{"impedance_error":{"type":"number","title":"Impedance Error","description":"Normalised impedance error"},"trace_manufacturability":{"type":"number","title":"Trace Manufacturability","description":"Trace width penalty"},"cost":{"type":"number","title":"Cost","description":"Material cost index"},"thickness_deviation":{"type":"number","title":"Thickness Deviation","description":"Normalised thickness error"},"insertion_loss":{"type":"number","title":"Insertion Loss","description":"Df-based insertion loss proxy"},"copper_symmetry":{"type":"number","title":"Copper Symmetry","description":"Copper weight symmetry penalty"},"emi_quality":{"type":"number","title":"Emi Quality","description":"EMI return-path quality penalty","default":0.0},"copper_weight":{"type":"number","title":"Copper Weight","description":"Heavy-copper penalty (etch/impedance-control + foil cost), frequency-scaled","default":0.0},"total":{"type":"number","title":"Total","description":"Weighted total score"}},"type":"object","required":["impedance_error","trace_manufacturability","cost","thickness_deviation","insertion_loss","copper_symmetry","total"],"title":"ScoreBreakdown","description":"How a solution scored on each soft objective (0–1, lower is better)."},"ScoredChain":{"properties":{"chain":{"additionalProperties":true,"type":"object","title":"Chain"},"scores":{"$ref":"#/components/schemas/ChainScores"},"label":{"type":"string","enum":["Primary (Best RF Match)","Best Performance","Lowest Cost","Most Compact","Balanced","Pareto Optimal"],"title":"Label","default":"Balanced"},"is_primary":{"type":"boolean","title":"Is Primary","default":false},"is_pareto":{"type":"boolean","title":"Is Pareto","default":false},"swap_description":{"type":"string","title":"Swap Description","default":""},"bom":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Bom"},"power_flow":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Power Flow"},"total_cost_usd":{"type":"number","title":"Total Cost Usd","default":0.0},"total_area_mm2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Area Mm2"},"actual_output_power":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Actual Output Power"},"output_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Delta"}},"type":"object","required":["chain","scores"],"title":"ScoredChain","description":"A fully scored RF chain variant."},"SensitivityRequest":{"properties":{"inputs":{"additionalProperties":{"type":"number"},"type":"object","title":"Inputs","description":"Nominal operating point"},"output_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Name","description":"Specific output to analyze (all if None)"},"delta_frac":{"type":"number","maximum":0.1,"minimum":0.0001,"title":"Delta Frac","description":"Perturbation fraction","default":0.01}},"type":"object","required":["inputs"],"title":"SensitivityRequest"},"SolverInput":{"properties":{"layer_count":{"type":"integer","minimum":2.0,"title":"Layer Count","description":"Total copper layers (must be even)"},"frequency":{"type":"number","exclusiveMinimum":0.0,"title":"Frequency","description":"Operating frequency in GHz"},"impedance_targets":{"items":{"$ref":"#/components/schemas/ImpedanceTarget"},"type":"array","title":"Impedance Targets","description":"Impedance targets to satisfy (default: 50 Ω microstrip)"},"target_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Target Thickness Mm","description":"Desired finished board thickness in mm","default":1.5748},"thickness_tolerance_mm":{"type":"number","minimum":0.0,"title":"Thickness Tolerance Mm","description":"Allowable deviation from target thickness (mm)","default":0.2},"allowed_core_materials":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Core Materials","description":"If set, restrict cores to these materials only"},"allowed_prepreg_materials":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Prepreg Materials","description":"If set, restrict prepregs to these materials only"},"copper_weight_oz":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Copper Weight Oz","description":"If set, restrict the search to this copper weight (oz). Omit to let the solver optimize copper weight freely."},"cost_priority":{"$ref":"#/components/schemas/CostPriority","default":"balanced"},"build_type":{"type":"string","title":"Build Type","description":"single | hdi1 | hdi2 | hdi3 | hdi4","default":"single"},"max_solutions":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Solutions","description":"Max solutions to return","default":5},"reflow_process":{"$ref":"#/components/schemas/ReflowProcess","description":"Target reflow process; enforces Tg floor on all dielectrics","default":"lead_free"}},"type":"object","required":["layer_count","frequency"],"title":"SolverInput","description":"Everything the solver needs to explore the design space."},"SolverResult":{"properties":{"solutions":{"items":{"$ref":"#/components/schemas/SolverSolution"},"type":"array","title":"Solutions"},"total_evaluated":{"type":"integer","title":"Total Evaluated"},"total_feasible":{"type":"integer","title":"Total Feasible"},"relaxation":{"$ref":"#/components/schemas/RelaxationInfo"},"diagnostics":{"items":{"type":"string"},"type":"array","title":"Diagnostics"}},"type":"object","required":["solutions","total_evaluated","total_feasible"],"title":"SolverResult","description":"Top-level result returned by the solver."},"SolverSolution":{"properties":{"rank":{"type":"integer","title":"Rank"},"core_material":{"type":"string","title":"Core Material"},"prepreg_material":{"type":"string","title":"Prepreg Material"},"core_thickness_mm":{"type":"number","title":"Core Thickness Mm"},"prepreg_thickness_mm":{"type":"number","title":"Prepreg Thickness Mm"},"copper_weight_oz":{"type":"number","title":"Copper Weight Oz"},"copper_thickness_mm":{"type":"number","title":"Copper Thickness Mm"},"total_thickness_mm":{"type":"number","title":"Total Thickness Mm"},"trace_results":{"items":{"$ref":"#/components/schemas/TraceWidthResult"},"type":"array","title":"Trace Results"},"score":{"$ref":"#/components/schemas/ScoreBreakdown"},"num_cores":{"type":"integer","title":"Num Cores"},"num_prepregs":{"type":"integer","title":"Num Prepregs"},"core_tg_c":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Core Tg C","description":"Core dielectric glass-transition temperature (°C); None if unknown"},"prepreg_tg_c":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prepreg Tg C","description":"Prepreg dielectric glass-transition temperature (°C); None if unknown"},"core_foil":{"anyOf":[{"$ref":"#/components/schemas/FoilRecommendation"},{"type":"null"}],"description":"Recommended + compatible copper-foil profiles for the core material"},"prepreg_foil":{"anyOf":[{"$ref":"#/components/schemas/FoilRecommendation"},{"type":"null"}],"description":"Recommended + compatible copper-foil profiles for the prepreg material"}},"type":"object","required":["rank","core_material","prepreg_material","core_thickness_mm","prepreg_thickness_mm","copper_weight_oz","copper_thickness_mm","total_thickness_mm","trace_results","score","num_cores","num_prepregs"],"title":"SolverSolution","description":"One feasible stackup configuration."},"SpacingResult":{"properties":{"minimum_spacing_mm":{"type":"number","title":"Minimum Spacing Mm"},"achieved_isolation_dB":{"type":"number","title":"Achieved Isolation Db"},"iterations":{"type":"integer","title":"Iterations"}},"type":"object","required":["minimum_spacing_mm","achieved_isolation_dB","iterations"],"title":"SpacingResult","description":"Result of minimum-spacing binary search solver."},"StackupInput-Input":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":50,"minLength":2},{"type":"null"}],"title":"Name","description":"Stackup name"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description","description":"Stackup description"},"total_layers":{"type":"integer","maximum":20.0,"minimum":2.0,"title":"Total Layers","description":"Total number of layers"},"layer_order":{"items":{"$ref":"#/components/schemas/LayerType"},"type":"array","title":"Layer Order","description":"Order of layer types"},"layer_materials":{"items":{"type":"string"},"type":"array","title":"Layer Materials","description":"Material IDs for each layer"},"frequency":{"type":"number","maximum":100.0,"minimum":0.1,"title":"Frequency","description":"Operating frequency in GHz"},"power":{"type":"number","maximum":1000.0,"minimum":0.1,"title":"Power","description":"Power requirement in Watts"},"impedance_target":{"anyOf":[{"type":"number","maximum":100.0,"minimum":25.0},{"type":"null"}],"title":"Impedance Target","description":"Target impedance in Ohms"},"board_thickness":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.2},{"type":"null"}],"title":"Board Thickness","description":"Target total thickness in mm"},"min_trace_width":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.05},{"type":"null"}],"title":"Min Trace Width","description":"Minimum trace width in mm"},"min_trace_spacing":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.05},{"type":"null"}],"title":"Min Trace Spacing","description":"Minimum trace spacing in mm"},"vias":{"anyOf":[{"items":{"$ref":"#/components/schemas/ViaDefinition"},"type":"array"},{"type":"null"}],"title":"Vias","description":"Via definitions for the stackup"}},"type":"object","required":["total_layers","layer_order","layer_materials","frequency","power"],"title":"StackupInput","description":"Intent: Capture the complete design constraints and structural requirements for a PCB stackup."},"StackupInput-Output":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":50,"minLength":2},{"type":"null"}],"title":"Name","description":"Stackup name"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description","description":"Stackup description"},"total_layers":{"type":"integer","maximum":20.0,"minimum":2.0,"title":"Total Layers","description":"Total number of layers"},"layer_order":{"items":{"$ref":"#/components/schemas/LayerType"},"type":"array","title":"Layer Order","description":"Order of layer types"},"layer_materials":{"items":{"type":"string"},"type":"array","title":"Layer Materials","description":"Material IDs for each layer"},"frequency":{"type":"number","maximum":100.0,"minimum":0.1,"title":"Frequency","description":"Operating frequency in GHz"},"power":{"type":"number","maximum":1000.0,"minimum":0.1,"title":"Power","description":"Power requirement in Watts"},"impedance_target":{"anyOf":[{"type":"number","maximum":100.0,"minimum":25.0},{"type":"null"}],"title":"Impedance Target","description":"Target impedance in Ohms"},"board_thickness":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.2},{"type":"null"}],"title":"Board Thickness","description":"Target total thickness in mm"},"min_trace_width":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.05},{"type":"null"}],"title":"Min Trace Width","description":"Minimum trace width in mm"},"min_trace_spacing":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.05},{"type":"null"}],"title":"Min Trace Spacing","description":"Minimum trace spacing in mm"},"vias":{"anyOf":[{"items":{"$ref":"#/components/schemas/ViaDefinition"},"type":"array"},{"type":"null"}],"title":"Vias","description":"Via definitions for the stackup"}},"type":"object","required":["total_layers","layer_order","layer_materials","frequency","power"],"title":"StackupInput","description":"Intent: Capture the complete design constraints and structural requirements for a PCB stackup."},"StackupPdfRequest":{"properties":{"stackup_data":{"additionalProperties":true,"type":"object","title":"Stackup Data"}},"type":"object","required":["stackup_data"],"title":"StackupPdfRequest"},"StressAnalysisRequest":{"properties":{"bomItems":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bomitems"},"rfChain":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Rfchain"},"projectName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Projectname","default":"RF Module"}},"type":"object","required":["bomItems"],"title":"StressAnalysisRequest"},"StressAnalysisResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"StressAnalysisResponse"},"SuggestedSubstrate":{"properties":{"dk":{"type":"number","minimum":1.0,"title":"Dk","description":"Dielectric constant at f0"},"df":{"type":"number","exclusiveMinimum":0.0,"title":"Df","description":"Loss tangent at f0"},"h_mm":{"type":"number","exclusiveMinimum":0.0,"title":"H Mm","description":"Suggested substrate height (mm)"},"basis":{"type":"string","enum":["board_span","generic_laminate"],"title":"Basis","description":"'board_span': the solved board's own dielectric span (patch referenced to the bottom plane). 'generic_laminate': a representative low-loss laminate at h~0.02*lambda0, when the board itself cannot host an efficient patch."},"predicted_gain_dbi":{"type":"number","title":"Predicted Gain Dbi","description":"Engine-computed gain on this substrate"},"predicted_efficiency_pct":{"type":"number","title":"Predicted Efficiency Pct","description":"Engine-computed radiation efficiency on this substrate"},"material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material","description":"Material catalog name, when basis='board_span'"},"rationale":{"type":"string","title":"Rationale","description":"Grounded explanation incl. the layout constraint a board_span suggestion implies (inner planes voided under the patch; the feed still references L2)"}},"type":"object","required":["dk","df","h_mm","basis","predicted_gain_dbi","predicted_efficiency_pct","rationale"],"title":"SuggestedSubstrate","description":"An antenna-appropriate substrate offered when the designed one is too thin.\n\nAttached to a result only when the patch trips LOW_EFFICIENCY_WARN_PCT, so its\npresence IS the \"this design is not usable, here is a fix\" signal. Carries the\nsubstrate AND the performance it is predicted to reach (both from the same\nengine, never from model text) so a surface can show the trade before applying\nit. `basis` distinguishes a suggestion grounded in the user's OWN solved board\nfrom a generic laminate recommendation."},"SurrogateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"SurrogateResponse"},"TestCouponConfig":{"properties":{"coupon_type":{"type":"string","enum":["impedance","TDR","microsection","combo"],"title":"Coupon Type"},"stackup_id":{"type":"string","title":"Stackup Id"},"target_impedances":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Target Impedances"}},"additionalProperties":false,"type":"object","required":["coupon_type","stackup_id"],"title":"TestCouponConfig","description":"Input configuration for test coupon generation."},"ThermalAnalysisInput":{"properties":{"power_w":{"type":"number","minimum":0.0,"title":"Power W","description":"Power dissipation in watts"},"ambient_c":{"type":"number","maximum":200.0,"minimum":-65.0,"title":"Ambient C","description":"Ambient temperature in degrees Celsius"}},"type":"object","required":["power_w","ambient_c"],"title":"ThermalAnalysisInput","description":"Input parameters for a thermal analysis run."},"ThermalAnalysisRequest":{"properties":{"via_config":{"anyOf":[{"$ref":"#/components/schemas/ThermalViaConfig"},{"type":"null"}]},"analysis_input":{"$ref":"#/components/schemas/ThermalAnalysisInput"},"stackup_layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/ThermalStackLayer"},"type":"array"},{"type":"null"}],"title":"Stackup Layers"},"source_area_mm2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Source Area Mm2"},"pour_area_mm2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pour Area Mm2"},"copper_thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Copper Thickness Mm"},"board_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Board Length Mm"},"board_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Board Width Mm"},"copper_coverage_top_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Copper Coverage Top Pct"},"copper_coverage_bottom_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Copper Coverage Bottom Pct"},"copper_coverage_source":{"anyOf":[{"type":"string","enum":["assumed","user"]},{"type":"null"}],"title":"Copper Coverage Source"},"layer_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Layer Count"},"effective_cte_z_ppm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Cte Z Ppm"},"delta_t_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta T C"}},"type":"object","required":["analysis_input"],"title":"ThermalAnalysisRequest"},"ThermalAnalysisSummary":{"properties":{"via_result":{"anyOf":[{"$ref":"#/components/schemas/ThermalViaResult"},{"type":"null"}]},"stack_result":{"anyOf":[{"$ref":"#/components/schemas/ThermalStackResult"},{"type":"null"}]},"spreading_result":{"anyOf":[{"$ref":"#/components/schemas/CopperPourSpreadingResult"},{"type":"null"}]},"coupling_2d":{"anyOf":[{"$ref":"#/components/schemas/TwoDCouplingResult"},{"type":"null"}]},"barrel_stress":{"anyOf":[{"$ref":"#/components/schemas/ViaBarrelStressResult"},{"type":"null"}]},"warpage":{"anyOf":[{"$ref":"#/components/schemas/WarpagePredictionResult"},{"type":"null"}]},"resin_flow":{"items":{"$ref":"#/components/schemas/ResinFlowEstimate"},"type":"array","title":"Resin Flow"},"findings":{"items":{"type":"string"},"type":"array","title":"Findings"},"recommendations":{"items":{"$ref":"#/components/schemas/ThermalRecommendation"},"type":"array","title":"Recommendations"},"via_array_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Via Array Rows"},"via_array_cols":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Via Array Cols"},"via_array_source":{"anyOf":[{"type":"string","const":"auto_optimized"},{"type":"null"}],"title":"Via Array Source"}},"type":"object","title":"ThermalAnalysisSummary","description":"Top-level summary combining all thermal analysis results."},"ThermalRecommendation":{"properties":{"severity":{"type":"string","enum":["info","warning","error","critical"],"title":"Severity"},"category":{"type":"string","enum":["via_array","warpage","barrel_fatigue","tj_margin","power_density","resin_flow","device_tj_limit"],"title":"Category"},"title":{"type":"string","title":"Title"},"detail":{"type":"string","title":"Detail"},"current_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Value"},"suggested_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Suggested Value"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"}},"type":"object","required":["severity","category","title","detail"],"title":"ThermalRecommendation","description":"One actionable, fully grounded thermal adjustment.\n\nEvery number in ``detail`` comes from a computed result (the canonical\njunction engine, the warpage/barrel models) — never from a heuristic the\nengine didn't run. This is what lets the agent answer \"what adjustments do\nwe need for thermal\" instead of dead-ending in the guardrail fallback\n(transcript audit 2026-06-05): the values are in the tool result, so\nnarrating them is attributable."},"ThermalStackLayer":{"properties":{"name":{"type":"string","title":"Name"},"rth":{"type":"number","title":"Rth","default":0.0},"material":{"type":"string","title":"Material"},"thickness_mm":{"type":"number","title":"Thickness Mm"},"layer_type":{"anyOf":[{"type":"string","enum":["copper","core","prepreg","dielectric"]},{"type":"null"}],"title":"Layer Type"},"tg_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tg C"}},"type":"object","required":["name","material","thickness_mm"],"title":"ThermalStackLayer","description":"Thermal resistance contribution of a single stackup layer.\n\nAs an *input* (caller-supplied stackup), only ``name``, ``material`` and\n``thickness_mm`` are meaningful — the solver recomputes ``rth`` from\nmaterial + thickness + board area and ignores any caller-supplied value\n(see ``calculate_thermal_stack``). So ``rth`` defaults to 0.0 and is\noptional on the wire; on *output* the solver always populates it.\n\n``layer_type`` and ``tg_c`` are optional enrichments (change:\nthermal-recommendations-rule-parity): ``layer_type`` gates the resin-flow\nscan (only explicitly-typed prepregs flow — the engine never guesses) and\n``tg_c`` feeds the Tj-vs-Tg margin rule (falling back to the solver\nmaterial catalog by ``material`` name when absent)."},"ThermalStackResult":{"properties":{"total_rth":{"type":"number","title":"Total Rth"},"junction_temp_c":{"type":"number","title":"Junction Temp C"},"layer_results":{"items":{"$ref":"#/components/schemas/ThermalStackLayer"},"type":"array","title":"Layer Results"},"dominant_bottleneck":{"type":"string","title":"Dominant Bottleneck"}},"type":"object","required":["total_rth","junction_temp_c","layer_results","dominant_bottleneck"],"title":"ThermalStackResult","description":"Result of junction-to-ambient thermal chain analysis."},"ThermalViaConfig":{"properties":{"via_diameter_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Via Diameter Mm","description":"Via drill diameter in mm"},"via_pitch_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Via Pitch Mm","description":"Center-to-center pitch in mm"},"via_array_rows":{"type":"integer","exclusiveMinimum":0.0,"title":"Via Array Rows","description":"Number of rows in the via array"},"via_array_cols":{"type":"integer","exclusiveMinimum":0.0,"title":"Via Array Cols","description":"Number of columns in the via array"},"copper_fill":{"type":"string","enum":["filled","plated"],"title":"Copper Fill","description":"Via fill type: filled (solid copper) or plated (annular ring)"},"plating_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Plating Thickness Mm","description":"Plating thickness in mm"},"board_thickness_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Board Thickness Mm","description":"Total board thickness in mm"}},"type":"object","required":["via_diameter_mm","via_pitch_mm","via_array_rows","via_array_cols","copper_fill","plating_thickness_mm","board_thickness_mm"],"title":"ThermalViaConfig","description":"Configuration for a thermal via or via array."},"ThermalViaResult":{"properties":{"single_via_rth":{"type":"number","title":"Single Via Rth"},"array_rth":{"type":"number","title":"Array Rth"},"array_area_mm2":{"type":"number","title":"Array Area Mm2"},"equivalent_conductivity":{"type":"number","title":"Equivalent Conductivity"},"via_count":{"type":"integer","title":"Via Count"}},"type":"object","required":["single_via_rth","array_rth","array_area_mm2","equivalent_conductivity","via_count"],"title":"ThermalViaResult","description":"Result of thermal via resistance calculation."},"ToolCallResponse":{"properties":{"tool_name":{"type":"string","title":"Tool Name"},"tool_args":{"additionalProperties":true,"type":"object","title":"Tool Args"}},"type":"object","required":["tool_name","tool_args"],"title":"ToolCallResponse"},"Topology":{"type":"string","enum":["microstrip","stripline"],"title":"Topology"},"TraceWidthResult":{"properties":{"target_impedance":{"type":"number","title":"Target Impedance"},"topology":{"$ref":"#/components/schemas/Topology"},"trace_width_mm":{"type":"number","title":"Trace Width Mm"},"achieved_impedance":{"type":"number","title":"Achieved Impedance"},"feasibility":{"type":"string","title":"Feasibility"},"differential":{"type":"boolean","title":"Differential","default":false},"spacing_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spacing Mm","description":"Pair gap the differential solve used (mm); None for single-ended"},"z_even":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Z Even","description":"Even-mode impedance (Ω); differential targets only"},"z_odd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Z Odd","description":"Odd-mode impedance (Ω); differential targets only"}},"type":"object","required":["target_impedance","topology","trace_width_mm","achieved_impedance","feasibility"],"title":"TraceWidthResult","description":"Trace-width calculation result for one impedance target.\n\nFor differential targets `target_impedance`/`achieved_impedance` carry\nZ_diff, `trace_width_mm` is the per-trace width, and the differential\nextras (pair gap + even/odd-mode impedances) are populated."},"TwoDCouplingResult":{"properties":{"junction_temp_1d_c":{"type":"number","title":"Junction Temp 1D C"},"junction_temp_2d_c":{"type":"number","title":"Junction Temp 2D C"},"delta_tj_c":{"type":"number","title":"Delta Tj C"},"spreading_rth_1d":{"type":"number","title":"Spreading Rth 1D"},"spreading_rth_2d":{"type":"number","title":"Spreading Rth 2D"},"inner_layer_count":{"type":"integer","title":"Inner Layer Count"},"inner_layers":{"items":{"$ref":"#/components/schemas/InnerLayerSpreadingResult"},"type":"array","title":"Inner Layers"}},"type":"object","required":["junction_temp_1d_c","junction_temp_2d_c","delta_tj_c","spreading_rth_1d","spreading_rth_2d","inner_layer_count"],"title":"TwoDCouplingResult","description":"2-D inner-layer thermal-coupling correction (Option-1 analytical).\n\nThe 1-D headline Tj (``calculate_localized_junction_temp``) only spreads heat\nin the source-layer copper pour. Real inner copper planes spread the same\nsource heat laterally too. This applies Kennedy spreading per inner copper\nlayer (each layer's net copper area as ``pour_area``) and combines those\nlateral paths in PARALLEL with the source pour, lowering the effective\nspreading resistance and yielding a (≤ 0) Tj correction delta. It is a delta\nALONGSIDE the 1-D number — the 1-D headline is never replaced."},"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"},"VersionCreate":{"properties":{"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot","description":"Full PhaseState at time of snapshot","default":{}},"trigger":{"type":"string","title":"Trigger","description":"One of: manual, phase_complete, export"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"User-provided description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"User-defined tags","default":[]}},"type":"object","required":["trigger"],"title":"VersionCreate","description":"Request model for creating a design version snapshot."},"VersionFullResponse":{"properties":{"id":{"type":"string","title":"Id"},"project_id":{"type":"string","title":"Project Id"},"version_number":{"type":"integer","title":"Version Number"},"parent_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Version Id"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"trigger":{"type":"string","title":"Trigger"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"type":"string","title":"Created At"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot","default":{}}},"type":"object","required":["id","project_id","version_number","trigger","created_at"],"title":"VersionFullResponse","description":"Response model for full version data (includes snapshot)."},"VersionResponse":{"properties":{"id":{"type":"string","title":"Id"},"project_id":{"type":"string","title":"Project Id"},"version_number":{"type":"integer","title":"Version Number"},"parent_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Version Id"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"trigger":{"type":"string","title":"Trigger"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","project_id","version_number","trigger","created_at"],"title":"VersionResponse","description":"Response model for version metadata (excludes snapshot for list views)."},"VersionRestore":{"properties":{"version_id":{"type":"string","title":"Version Id","description":"UUID of the version to restore"}},"type":"object","required":["version_id"],"title":"VersionRestore","description":"Request model for restoring a previous version."},"ViaBarrelStressResult":{"properties":{"axial_strain":{"type":"number","title":"Axial Strain"},"axial_stress_mpa":{"type":"number","title":"Axial Stress Mpa"},"fatigue_cycles":{"type":"integer","title":"Fatigue Cycles"},"meets_ipc_class_2":{"type":"boolean","title":"Meets Ipc Class 2"},"meets_ipc_class_3":{"type":"boolean","title":"Meets Ipc Class 3"}},"type":"object","required":["axial_strain","axial_stress_mpa","fatigue_cycles","meets_ipc_class_2","meets_ipc_class_3"],"title":"ViaBarrelStressResult","description":"Result of via barrel thermo-mechanical stress analysis."},"ViaDefinition":{"properties":{"type":{"$ref":"#/components/schemas/ViaType"},"start_layer":{"type":"integer","title":"Start Layer"},"end_layer":{"type":"integer","title":"End Layer"},"diameter":{"type":"number","title":"Diameter"},"pad_diameter":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pad Diameter"},"anti_pad_diameter":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Anti Pad Diameter"},"material":{"type":"string","title":"Material","default":"Copper"},"plating_thickness":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plating Thickness"}},"type":"object","required":["type","start_layer","end_layer","diameter"],"title":"ViaDefinition","description":"Intent: Define physical and electrical characteristics of PCB via technologies (Microvia, Blind, etc.)."},"ViaType":{"type":"string","enum":["through","blind","buried","microvia"],"title":"ViaType"},"WarpagePredictionResult":{"properties":{"max_deflection_mm":{"type":"number","title":"Max Deflection Mm"},"deflection_pct_diagonal":{"type":"number","title":"Deflection Pct Diagonal"},"meets_ipc_6012_bow_twist":{"type":"boolean","title":"Meets Ipc 6012 Bow Twist"},"copper_balance_ratio":{"type":"number","title":"Copper Balance Ratio"},"symmetry_score":{"type":"number","title":"Symmetry Score"},"copper_coverage_source":{"type":"string","enum":["assumed","user"],"title":"Copper Coverage Source","default":"assumed"}},"type":"object","required":["max_deflection_mm","deflection_pct_diagonal","meets_ipc_6012_bow_twist","copper_balance_ratio","symmetry_score"],"title":"WarpagePredictionResult","description":"Result of board warpage prediction.\n\n⛔ `copper_coverage_source` is the PROVENANCE of the only input that moves\nthis model, and it gates the pass/fail verdict — never drop it when\nbuilding or forwarding a result. Deflection is a function of\n``|top - bottom|`` coverage alone (``warpage.predict_warpage``), and nothing\nin this repo measures per-side copper coverage, so a caller that supplied no\ncoverage of its own gets the number with ``\"assumed\"`` and NO IPC verdict:\n``recommendations._warpage_recommendation`` declines, and the frontend\nbadges it \"not assessed\". \"user\" means a person (or an agent tool arg)\nactually supplied the coverage, and the verdict is asserted.\n\nDefault is ``\"assumed\"`` deliberately — a caller that forgets the field must\nfall back to withholding a verdict, not to asserting one."},"YieldSummary":{"properties":{"avg_yield_pct":{"type":"number","title":"Avg Yield Pct"},"report_count":{"type":"integer","title":"Report Count"},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations"}},"additionalProperties":false,"type":"object","required":["avg_yield_pct","report_count","recommendations"],"title":"YieldSummary"},"_ComplianceCheckRequest":{"properties":{"layers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Layers"},"stackup_config":{"additionalProperties":true,"type":"object","title":"Stackup Config"},"impedance_targets":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Impedance Targets"},"standards":{"items":{"$ref":"#/components/schemas/ComplianceStandard"},"type":"array","title":"Standards"},"design_rules":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Design Rules"},"operating_conditions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Operating Conditions"},"environmental_config":{"anyOf":[{"$ref":"#/components/schemas/EnvironmentalComplianceConfig"},{"type":"null"}]},"rf_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Rf Config"}},"additionalProperties":false,"type":"object","required":["layers"],"title":"_ComplianceCheckRequest","description":"Request body for compliance check endpoint."},"_EndpointRequest":{"properties":{"layers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Layers"},"stackup_config":{"additionalProperties":true,"type":"object","title":"Stackup Config"},"impedance_data":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Impedance Data"},"frequency_ghz":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Ghz"}},"additionalProperties":false,"type":"object","required":["layers","stackup_config"],"title":"_EndpointRequest","description":"Request body with stricter validation than the shared model."},"_ImportRequest":{"properties":{"filename":{"type":"string","title":"Filename"},"content":{"type":"string","title":"Content"}},"additionalProperties":false,"type":"object","required":["filename","content"],"title":"_ImportRequest"},"routes__glass_weave__RecommendRequest":{"properties":{"frequency_ghz":{"type":"number","exclusiveMinimum":0.0,"title":"Frequency Ghz"},"impedance_tolerance_pct":{"type":"number","exclusiveMinimum":0.0,"title":"Impedance Tolerance Pct"},"trace_width_mm":{"type":"number","exclusiveMinimum":0.0,"title":"Trace Width Mm"},"is_differential_pair":{"type":"boolean","title":"Is Differential Pair","default":false}},"type":"object","required":["frequency_ghz","impedance_tolerance_pct","trace_width_mm"],"title":"RecommendRequest"},"routes__surrogate__RecommendRequest":{"properties":{"geometry_type":{"type":"string","title":"Geometry Type"},"frequency_ghz":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Frequency Ghz"},"accuracy_tier":{"type":"string","enum":["fast","standard","high"],"title":"Accuracy Tier","default":"standard"},"require_uncertainty":{"type":"boolean","title":"Require Uncertainty","default":false},"use_case_tags":{"items":{"type":"string"},"type":"array","title":"Use Case Tags"}},"type":"object","required":["geometry_type"],"title":"RecommendRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}