{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"servers":[{"url":"https://api.rmfg.com"}],"paths":{"/designs":{"post":{"tags":["designs"],"summary":"Upload Design","description":"Inserts a design into our database, and returns an assembly response with the design(s).\nSupports both single-part and multi-part STEP files.","operationId":"upload_design_designs_post","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}],"parameters":[{"name":"public","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public"}},{"name":"x-rmfg-web-version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Rmfg-Web-Version"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_design_designs_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AssemblyResponse"},{"$ref":"#/components/schemas/StepAnalysisAccepted"}],"title":"Response Upload Design Designs Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/jobs/{job_id}":{"get":{"tags":["designs"],"summary":"Get Step Analysis Status","description":"Return durable job state to the user/session that created the upload.","operationId":"get_step_analysis_status_designs_jobs__job_id__get","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepAnalysisJobStatus"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/table-configurator":{"post":{"tags":["designs"],"summary":"Create Table Configurator Designs","description":"Create normal assembly/design rows from a table configurator payload.","operationId":"create_table_configurator_designs_designs_table_configurator_post","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}],"parameters":[{"name":"public","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TableConfiguratorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssemblyResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/table-configurator/{assembly_id}/cad":{"post":{"tags":["designs"],"summary":"Upload Table Configurator Cad","description":"Attach generated CAD to an existing table configurator assembly.","operationId":"upload_table_configurator_cad_designs_table_configurator__assembly_id__cad_post","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}],"parameters":[{"name":"assembly_id","in":"path","required":true,"schema":{"type":"string","title":"Assembly Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_table_configurator_cad_designs_table_configurator__assembly_id__cad_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Table Configurator Cad Designs Table Configurator  Assembly Id  Cad Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/table-configurator/{assembly_id}/cad-status":{"get":{"tags":["designs"],"summary":"Get Table Configurator Cad Status","description":"Return durable CAD readiness without exposing the job table through RLS.","operationId":"get_table_configurator_cad_status_designs_table_configurator__assembly_id__cad_status_get","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}],"parameters":[{"name":"assembly_id","in":"path","required":true,"schema":{"type":"string","title":"Assembly Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Table Configurator Cad Status Designs Table Configurator  Assembly Id  Cad Status Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/convert":{"post":{"tags":["designs"],"summary":"Convert To Gltf","description":"Converts a file to GLTF and uploads it to Supabase storage at the specified destination path.\nDoes NOT create a design entry in the database - only converts and uploads the GLTF file.","operationId":"convert_to_gltf_designs_convert_post","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}],"parameters":[{"name":"destination_path","in":"query","required":true,"schema":{"type":"string","title":"Destination Path"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_convert_to_gltf_designs_convert_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Convert To Gltf Designs Convert Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/convert-to-content":{"post":{"tags":["designs"],"summary":"Convert Step To Content","description":"Converts a STEP file to GLB/GLTF and returns the raw bytes in the response.\nTries the native rmfg-planner API first, falls back to Zoo (KittyCAD).\nNo database writes, no storage uploads — pure conversion.","operationId":"convert_step_to_content_designs_convert_to_content_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/designs/{design_id}":{"get":{"tags":["designs"],"summary":"Get Design","description":"Retrieves a design by its unique ID from our database.\nReturns an assembly response with the design.","operationId":"get_design_designs__design_id__get","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}],"parameters":[{"name":"design_id","in":"path","required":true,"schema":{"type":"string","title":"Design Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssemblyResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designs/assembly/{assembly_id}":{"get":{"tags":["designs"],"summary":"Get Assembly Designs","description":"Retrieves all designs that belong to a specific assembly ID.\nReturns an assembly response with all associated designs.","operationId":"get_assembly_designs_designs_assembly__assembly_id__get","security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}],"parameters":[{"name":"assembly_id","in":"path","required":true,"schema":{"type":"string","title":"Assembly Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssemblyResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/quotes":{"post":{"tags":["quotes"],"summary":"Create Quote","description":"Gets a price quote for a caller-owned design and material.\n\nAuthenticate with `rmfg_key`, both Supabase session headers, or the\nanonymous website session token that owns the uploaded design.","operationId":"create_quote_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[],"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}]}},"/quotes/assembly":{"post":{"tags":["quotes"],"summary":"Create Assembly Quote","description":"Generate a quote for caller-owned designs in an assembly.\n\nThe request contains a list of design-level quote requests. For each design we\ncalculate the unit price using the existing quoting logic and then aggregate\nall unit prices to return a single assembly-level quote. Authenticate with\n`rmfg_key`, both Supabase session headers, or the anonymous website session\ntoken that owns every requested design.","operationId":"create_assembly_quote_quotes_assembly_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssemblyQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssemblyQuoteWithCalculationResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[],"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}]}},"/quotes/calculate":{"post":{"tags":["quotes"],"summary":"Calculate Assembly Quote","description":"Calculate final pricing for an assembly quote with quantities applied.\n\nTakes an AssemblyQuoteResponse and applies quantities to calculate final pricing\nincluding volume discounts, secondary operations, and total costs.\nThis recreates the frontend calculation logic in Python.","operationId":"calculate_assembly_quote_quotes_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateAssemblyQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatedAssemblyQuoteResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[],"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}]}},"/quotes/calculate/bend-pricing-experiment":{"post":{"tags":["quotes"],"summary":"Calculate Bend Pricing Experiment Endpoint","description":"Compare current quote pricing against an experimental bend pricing model.","operationId":"calculate_bend_pricing_experiment_endpoint_quotes_calculate_bend_pricing_experiment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateAssemblyQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BendPricingExperimentResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[],"SupabaseRefreshToken":[]},{"AnonymousSessionToken":[]}]}},"/materials/":{"get":{"tags":["materials"],"summary":"List Materials","description":"List all materials available for quoting","operationId":"list_materials_materials__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MaterialTable"},"type":"array","title":"Response List Materials Materials  Get"}}}},"404":{"description":"Not found"}},"security":[{"RMFGAPIKey":[]},{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/checkout":{"post":{"tags":["checkout"],"summary":"Checkout","description":"Create Checkout Session and fetch design details with prices and discounts","operationId":"checkout_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Cart"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Checkout Checkout Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]}]}},"/images/undistort":{"post":{"tags":["images"],"summary":"Undistort Image","description":"Undistort an image using camera calibration parameters.\n\nArgs:\n    image: The image file to undistort\n    calibration: Camera calibration file containing camera matrix and distortion coefficients\n    alpha: Free scaling parameter (0=crop to valid pixels, 1=keep all pixels)\n\nReturns:\n    The undistorted image","operationId":"undistort_image_images_undistort_post","parameters":[{"name":"alpha","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Alpha"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_undistort_image_images_undistort_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images/transform-coordinates":{"post":{"tags":["images"],"summary":"Transform Coordinates","description":"Transform image coordinates to real-world coordinates using a transformation matrix.\n\nArgs:\n    intrinsic_matrix: 3x3 transformation matrix\n    coordinates: List of [x, y] coordinates in image space\n\nReturns:\n    real_coordinates: List of [x, y] coordinates in real-world space","operationId":"transform_coordinates_images_transform_coordinates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformCoordinatesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformCoordinatesResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images/modify-gcode":{"post":{"tags":["images"],"summary":"Modify Gcode","operationId":"modify_gcode_images_modify_gcode_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyGcodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images/calibrate-camera/{camera_id}":{"post":{"tags":["images"],"summary":"Calibrate Camera Service Role","description":"Alternative endpoint using service role authentication for debugging.\nSame functionality as /calibrate-camera/{camera_id} but with elevated permissions.","operationId":"calibrate_camera_service_role_images_calibrate_camera__camera_id__post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CameraCalibrationRequest","default":{"board_width":5,"board_height":7,"square_size":0.04,"marker_size":0.02}}}}},"responses":{"200":{"description":"Successful Response"},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images/detect-circles":{"post":{"tags":["images"],"summary":"Detect Circles","description":"Detect green circles in an image and return the annotated image with circle data.\n\nThe circle coordinates are returned in the X-Circle-Data header as JSON.\n\nArgs:\n    image: The image file to process\n    \nReturns:\n    The annotated image with circles marked and numbered","operationId":"detect_circles_images_detect_circles_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_detect_circles_images_detect_circles_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images/calculate-homography":{"post":{"tags":["images"],"summary":"Calculate Homography","description":"Calculate homography matrix from image points to real-world points.\n\nArgs:\n    request: HomographyRequest containing:\n        - image_points: List of [x, y] coordinates in image space\n        - real_world_points: List of [x, y] coordinates in real-world space\n\nReturns:\n    HomographyResponse with the 3x3 homography matrix","operationId":"calculate_homography_images_calculate_homography_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomographyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomographyResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/utils/folders/ensure":{"post":{"tags":["utils"],"summary":"Ensure Folder Endpoint","description":"Ensures that a folder exists in Supabase storage.\nCreates an empty .keep file if the folder doesn't exist.\n\nArgs:\n    request: Contains bucket name and folder path\n    \nReturns:\n    EnsureFolderResponse with success status and message","operationId":"ensure_folder_endpoint_utils_folders_ensure_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureFolderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureFolderResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dropship/request-access":{"post":{"tags":["dropship"],"summary":"Request Access","description":"Creates (or re-submits) a dropship access request for this user.","operationId":"request_access_dropship_request_access_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipRequestAccessRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Request Access Dropship Request Access Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/account":{"get":{"tags":["dropship"],"summary":"Get Account","description":"Returns the user's dropship account status, API key presence, and\ncard-on-file status. account is null when the user is not enrolled.","operationId":"get_account_dropship_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Account Dropship Account Get"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/activity":{"get":{"tags":["dropship"],"summary":"Get Activity","description":"Customer-facing dropship order activity and per-item sales totals.","operationId":"get_activity_dropship_activity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Activity Dropship Activity Get"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/contract-billing":{"get":{"tags":["dropship"],"summary":"Get Contract Billing","description":"Statement for contract inventory: shipped-unit accruals, deposits,\nsuccessful weekly payments, and the balance currently due.","operationId":"get_contract_billing_dropship_contract_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Contract Billing Dropship Contract Billing Get"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/contract-billing/pay":{"post":{"tags":["dropship"],"summary":"Pay Contract Billing","description":"Customer-initiated charge of the full currently due contract balance.\n\nNothing is scheduled or charged automatically; the customer must click\nPay on the RMFG dropship dashboard.","operationId":"pay_contract_billing_dropship_contract_billing_pay_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Pay Contract Billing Dropship Contract Billing Pay Post"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/contact":{"patch":{"tags":["dropship"],"summary":"Update Contact","description":"Updates the account's contact/support phone.\n\nThis exists because /request-access rejects approved accounts (409) and\nre-requesting resets status to 'requested'; contact info must be editable\nat any time without touching the approval state. Only contact_phone is\nwritten here — status and requested_at are never modified.","operationId":"update_contact_dropship_contact_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipContactUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Contact Dropship Contact Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/api-key":{"post":{"tags":["dropship"],"summary":"Create Api Key","description":"Self-service API key generation and rotation for an approved account.\n\nThe key is returned exactly once; afterwards only its existence is\nreported (has_api_key). If a key already exists, the caller must pass\nrotate=true — the old key stops working immediately. Admin approval of\nthe account (not key possession) is what gates API access: /v1 rejects\nany non-approved account even with a valid key.","operationId":"create_api_key_dropship_api_key_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DropshipApiKeyRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Api Key Dropship Api Key Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/items/request":{"post":{"tags":["dropship"],"summary":"Request Item","description":"Requests a part OR an assembly for dropshipping.\n\nExactly one of part_id / assembly_id. Parts must come from one of the\nuser's own orders (the qty-1 sample flow; the sample order is derived).\nAssemblies additionally require sample_order_id: an order owned by the\nuser containing at least one part line whose design belongs to the\nassembly — that order is the recipe every dropship order reproduces.","operationId":"request_item_dropship_items_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipItemRequestBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Request Item Dropship Items Request Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/setup-intent":{"post":{"tags":["dropship"],"summary":"Create Setup Intent","description":"Creates a Stripe Customer (if needed) and a SetupIntent for saving a\ncard for off-session dropship charges.","operationId":"create_setup_intent_dropship_setup_intent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Setup Intent Dropship Setup Intent Post"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/setup-intent/confirm":{"post":{"tags":["dropship"],"summary":"Confirm Setup Intent","description":"Stores the payment method after the client confirms the SetupIntent.","operationId":"confirm_setup_intent_dropship_setup_intent_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipSetupIntentConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Confirm Setup Intent Dropship Setup Intent Confirm Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/retry-failed-charges":{"post":{"tags":["dropship"],"summary":"Retry Failed Charges","description":"Re-attempts every outstanding (failed-but-never-succeeded) shipping\ncharge for the account. Declines do not error the request; each order's\noutcome is reported in results. 409 no_payment_method when no card is on\nfile. Also run automatically after POST /setup-intent/confirm.","operationId":"retry_failed_charges_dropship_retry_failed_charges_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Retry Failed Charges Dropship Retry Failed Charges Post"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/webhook-endpoints":{"get":{"tags":["dropship"],"summary":"List Endpoints","description":"Lists active webhook endpoints for the UI. Secrets are never returned.","operationId":"list_endpoints_dropship_webhook_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpointsResponse"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]},"post":{"tags":["dropship"],"summary":"Create Endpoint","description":"Creates a webhook endpoint. The signing secret is returned once.","operationId":"create_endpoint_dropship_webhook_endpoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpointCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpoint"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}]}},"/dropship/webhook-endpoints/{endpoint_id}":{"delete":{"tags":["dropship"],"summary":"Delete Endpoint","description":"Deactivates a webhook endpoint.","operationId":"delete_endpoint_dropship_webhook_endpoints__endpoint_id__delete","security":[{"SupabaseAccessToken":[]},{"SupabaseRefreshToken":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/items":{"get":{"tags":["dropship-v1"],"summary":"List Items","description":"Lists this account's approved and requested dropship items.\n\nkind='part' items carry `part` (material summary); kind='assembly' items\ncarry `assembly` with part_count/has_welds computed from the sample\norder's recipe (one recipe query per assembly item).","operationId":"list_items_v1_items_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipItemsResponse"}}}}},"security":[{"RMFGAPIKey":[]}]}},"/v1/orders":{"post":{"tags":["dropship-v1"],"summary":"Create Dropship Order","description":"Creates a dropship order.\n\nIdempotent on (account, external_ref): a repeat external_ref returns the\nexisting order with status 200. On-demand items charge immediately.\nContract items allocate committed quantity without a second parts charge\nand begin on production hold for an explicit Factory release.","operationId":"create_dropship_order_v1_orders_post","security":[{"RMFGAPIKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipCreateOrderRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["dropship-v1"],"summary":"List Dropship Orders","description":"Lists this account's orders, optionally filtered by external_ref.","operationId":"list_dropship_orders_v1_orders_get","security":[{"RMFGAPIKey":[]}],"parameters":[{"name":"external_ref","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipOrdersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders/{order_id}":{"get":{"tags":["dropship-v1"],"summary":"Get Dropship Order","description":"Returns one order with status, tracking, and charge breakdown.","operationId":"get_dropship_order_v1_orders__order_id__get","security":[{"RMFGAPIKey":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhook-endpoints":{"get":{"tags":["dropship-v1"],"summary":"List Endpoints","description":"Lists active webhook endpoints. Secrets are never returned here.","operationId":"list_endpoints_v1_webhook_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpointsResponse"}}}}},"security":[{"RMFGAPIKey":[]}]},"post":{"tags":["dropship-v1"],"summary":"Create Endpoint","description":"Creates a webhook endpoint. The signing secret is returned once.","operationId":"create_endpoint_v1_webhook_endpoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpointCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropshipWebhookEndpoint"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"RMFGAPIKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}":{"delete":{"tags":["dropship-v1"],"summary":"Delete Endpoint","description":"Deactivates a webhook endpoint (pending deliveries are abandoned).","operationId":"delete_endpoint_v1_webhook_endpoints__endpoint_id__delete","security":[{"RMFGAPIKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalyzedCountersink":{"properties":{"id":{"type":"integer","title":"Id"},"center":{"$ref":"#/components/schemas/Point3D"},"normal":{"$ref":"#/components/schemas/Normal"},"inverted":{"type":"boolean","title":"Inverted"},"counters_sink_inner_radius":{"type":"number","title":"Counters Sink Inner Radius"},"counters_sink_outer_radius":{"type":"number","title":"Counters Sink Outer Radius"},"counter_sink_angle":{"type":"number","title":"Counter Sink Angle"}},"type":"object","required":["id","center","normal","inverted","counters_sink_inner_radius","counters_sink_outer_radius","counter_sink_angle"],"title":"AnalyzedCountersink"},"Assembly":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"part_count":{"type":"integer","title":"Part Count"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"bounding_dimensions":{"items":{"type":"number"},"type":"array","title":"Bounding Dimensions","default":[]},"part_locations":{"items":{"$ref":"#/components/schemas/PartLocation"},"type":"array","title":"Part Locations","default":[]},"cad_status":{"anyOf":[{"type":"string","enum":["pending","processing","ready","failed"]},{"type":"null"}],"title":"Cad Status"},"cad_job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cad Job Id"}},"type":"object","required":["part_count"],"title":"Assembly"},"AssemblyMetadata":{"properties":{"total_processing_time_ms":{"type":"integer","title":"Total Processing Time Ms"},"success_count":{"type":"integer","title":"Success Count"},"fail_count":{"type":"integer","title":"Fail Count"},"total_parts":{"type":"integer","title":"Total Parts"},"failed_part_ids":{"items":{"type":"string"},"type":"array","title":"Failed Part Ids","default":[]}},"type":"object","required":["total_processing_time_ms","success_count","fail_count","total_parts"],"title":"AssemblyMetadata"},"AssemblyQuoteRequest":{"properties":{"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"},"design_quotes":{"items":{"$ref":"#/components/schemas/QuoteRequest"},"type":"array","title":"Design Quotes"},"welds":{"anyOf":[{"items":{"$ref":"#/components/schemas/Weld"},"type":"array"},{"type":"null"}],"title":"Welds"},"assembly_bounding_dimensions":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Assembly Bounding Dimensions"},"assembly_quantity":{"type":"integer","title":"Assembly Quantity","default":1},"design_quantities":{"anyOf":[{"items":{"$ref":"#/components/schemas/DesignQuantity"},"type":"array"},{"type":"null"}],"title":"Design Quantities"},"requested_quantity_range":{"anyOf":[{"$ref":"#/components/schemas/RequestedQuantityRange"},{"type":"null"}]},"requested_quantities":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Requested Quantities"}},"type":"object","required":["design_quotes"],"title":"AssemblyQuoteRequest","description":"Request model for quoting an entire assembly.\n\nAttributes\n----------\nassembly_id: Optional[str]\n    Identifier for the assembly (if already persisted). This is optional because an\n    assembly may not be stored yet – the caller can still supply a list of\n    individual design quote requests.\ndesign_quotes: List[QuoteRequest]\n    A list of quote requests, one for each design that belongs to the assembly.\nwelds: Optional[List[Weld]] = None  # Assembly-level weld information"},"AssemblyQuoteResponse":{"properties":{"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"},"quotes":{"items":{"$ref":"#/components/schemas/QuoteResponse"},"type":"array","title":"Quotes"},"weld_cost_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weld Cost Cents"},"welds":{"anyOf":[{"items":{"$ref":"#/components/schemas/Weld"},"type":"array"},{"type":"null"}],"title":"Welds"},"weld_discounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/Discount"},"type":"array"},{"type":"null"}],"title":"Weld Discounts"},"weld_pricing":{"anyOf":[{"$ref":"#/components/schemas/WeldPricingBreakdown"},{"type":"null"}]}},"type":"object","required":["quotes"],"title":"AssemblyQuoteResponse","description":"Response model for an assembly quote.\n\nReturns the individual quotes for each design and an aggregate total price for\nthe entire assembly. Secondary-operation details for each design are preserved\nin their respective QuoteResponse objects so that callers can surface them if\ndesired."},"AssemblyQuoteWithCalculationResponse":{"properties":{"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"},"quotes":{"items":{"$ref":"#/components/schemas/QuoteResponse"},"type":"array","title":"Quotes"},"weld_cost_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weld Cost Cents"},"welds":{"anyOf":[{"items":{"$ref":"#/components/schemas/Weld"},"type":"array"},{"type":"null"}],"title":"Welds"},"weld_discounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/Discount"},"type":"array"},{"type":"null"}],"title":"Weld Discounts"},"weld_pricing":{"anyOf":[{"$ref":"#/components/schemas/WeldPricingBreakdown"},{"type":"null"}]},"calculated_quote":{"anyOf":[{"$ref":"#/components/schemas/CalculatedAssemblyQuoteResponse"},{"type":"null"}]}},"type":"object","required":["quotes"],"title":"AssemblyQuoteWithCalculationResponse","description":"Assembly quote response with optional calculated pricing rows."},"AssemblyResponse":{"properties":{"assembly":{"$ref":"#/components/schemas/Assembly"},"designs":{"items":{"$ref":"#/components/schemas/Design"},"type":"array","title":"Designs"},"metadata":{"$ref":"#/components/schemas/AssemblyMetadata"}},"type":"object","required":["assembly","designs","metadata"],"title":"AssemblyResponse","description":"Response model for multi-part design processing"},"AssemblyTotals":{"properties":{"partCostTotal":{"type":"integer","title":"Partcosttotal"},"weldCostTotal":{"type":"integer","title":"Weldcosttotal"},"totalAmountAfterDiscount":{"type":"integer","title":"Totalamountafterdiscount"},"effectiveUnitCost":{"type":"integer","title":"Effectiveunitcost"}},"type":"object","required":["partCostTotal","weldCostTotal","totalAmountAfterDiscount","effectiveUnitCost"],"title":"AssemblyTotals","description":"Aggregate totals for the entire assembly."},"Bend":{"properties":{"id":{"type":"integer","title":"Id"},"angle":{"type":"number","title":"Angle"},"radius":{"type":"number","title":"Radius"},"location":{"$ref":"#/components/schemas/BentLocation"},"direction":{"$ref":"#/components/schemas/BentLocation"},"length":{"type":"number","title":"Length"},"line_start":{"anyOf":[{"$ref":"#/components/schemas/BentLocation"},{"type":"null"}]},"line_end":{"anyOf":[{"$ref":"#/components/schemas/BentLocation"},{"type":"null"}]},"distortion_zone_sides":{"items":{"$ref":"#/components/schemas/BendDistortionZoneSide"},"type":"array","title":"Distortion Zone Sides"}},"type":"object","required":["id","angle","radius","location","direction","length"],"title":"Bend"},"BendDistortionZoneSide":{"properties":{"source_hole_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Hole Id"},"edge_start":{"$ref":"#/components/schemas/BentLocation"},"edge_end":{"$ref":"#/components/schemas/BentLocation"},"outward_direction":{"$ref":"#/components/schemas/BentLocation"}},"type":"object","required":["edge_start","edge_end","outward_direction"],"title":"BendDistortionZoneSide","description":"Planner geometry for one sheet side adjacent to a bend line."},"BendPricing":{"properties":{"price_per_bend":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Per Bend"},"num_bends":{"type":"integer","title":"Num Bends"}},"type":"object","required":["price_per_bend","num_bends"],"title":"BendPricing"},"BendPricingAssemblyComparison":{"properties":{"assemblyQuantity":{"type":"integer","title":"Assemblyquantity"},"currentTotalAmount":{"type":"integer","title":"Currenttotalamount"},"proposedTotalAmount":{"type":"integer","title":"Proposedtotalamount"},"totalDeltaCents":{"type":"integer","title":"Totaldeltacents"},"totalDeltaPercent":{"type":"number","title":"Totaldeltapercent"},"currentEffectiveUnitCost":{"type":"integer","title":"Currenteffectiveunitcost"},"proposedEffectiveUnitCost":{"type":"integer","title":"Proposedeffectiveunitcost"},"effectiveUnitDeltaCents":{"type":"integer","title":"Effectiveunitdeltacents"},"currentTotalBendCost":{"type":"integer","title":"Currenttotalbendcost"},"proposedTotalBendCost":{"type":"integer","title":"Proposedtotalbendcost"},"bendDeltaCents":{"type":"integer","title":"Benddeltacents"},"designs":{"items":{"$ref":"#/components/schemas/BendPricingDesignComparison"},"type":"array","title":"Designs"}},"type":"object","required":["assemblyQuantity","currentTotalAmount","proposedTotalAmount","totalDeltaCents","totalDeltaPercent","currentEffectiveUnitCost","proposedEffectiveUnitCost","effectiveUnitDeltaCents","currentTotalBendCost","proposedTotalBendCost","bendDeltaCents","designs"],"title":"BendPricingAssemblyComparison"},"BendPricingDesignComparison":{"properties":{"designId":{"type":"string","title":"Designid"},"quantity":{"type":"integer","title":"Quantity"},"numBends":{"type":"integer","title":"Numbends"},"currentTotalBendCost":{"type":"integer","title":"Currenttotalbendcost"},"proposedTotalBendCost":{"type":"integer","title":"Proposedtotalbendcost"},"bendDeltaCents":{"type":"integer","title":"Benddeltacents"},"currentTotalAmount":{"type":"integer","title":"Currenttotalamount"},"proposedTotalAmount":{"type":"integer","title":"Proposedtotalamount"},"totalDeltaCents":{"type":"integer","title":"Totaldeltacents"},"currentEffectiveUnitCost":{"type":"integer","title":"Currenteffectiveunitcost"},"proposedEffectiveUnitCost":{"type":"integer","title":"Proposedeffectiveunitcost"},"effectiveUnitDeltaCents":{"type":"integer","title":"Effectiveunitdeltacents"},"proposedBendBreakdown":{"anyOf":[{"$ref":"#/components/schemas/ExperimentalBendPricingBreakdown"},{"type":"null"}]}},"type":"object","required":["designId","quantity","numBends","currentTotalBendCost","proposedTotalBendCost","bendDeltaCents","currentTotalAmount","proposedTotalAmount","totalDeltaCents","currentEffectiveUnitCost","proposedEffectiveUnitCost","effectiveUnitDeltaCents"],"title":"BendPricingDesignComparison"},"BendPricingExperimentResponse":{"properties":{"parameters":{"$ref":"#/components/schemas/ExperimentalBendPricingParameters"},"current":{"$ref":"#/components/schemas/CalculatedAssemblyQuote"},"proposed":{"$ref":"#/components/schemas/CalculatedAssemblyQuote"},"comparison":{"$ref":"#/components/schemas/BendPricingAssemblyComparison"},"quantityComparisons":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/BendPricingAssemblyComparison"},"type":"object"},{"type":"null"}],"title":"Quantitycomparisons"}},"type":"object","required":["parameters","current","proposed","comparison"],"title":"BendPricingExperimentResponse"},"BentLocation":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"z":{"type":"number","title":"Z"}},"type":"object","required":["x","y","z"],"title":"BentLocation"},"Body_convert_to_gltf_designs_convert_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_convert_to_gltf_designs_convert_post"},"Body_detect_circles_images_detect_circles_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Image file to detect circles in"}},"type":"object","required":["image"],"title":"Body_detect_circles_images_detect_circles_post"},"Body_undistort_image_images_undistort_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Image file to undistort"},"calibration":{"type":"string","format":"binary","title":"Calibration","description":"Camera calibration file (YAML/XML/NPZ format)"}},"type":"object","required":["image","calibration"],"title":"Body_undistort_image_images_undistort_post"},"Body_upload_design_designs_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"holes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Holes"}},"type":"object","required":["file"],"title":"Body_upload_design_designs_post"},"Body_upload_table_configurator_cad_designs_table_configurator__assembly_id__cad_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"model":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Model"}},"type":"object","required":["file"],"title":"Body_upload_table_configurator_cad_designs_table_configurator__assembly_id__cad_post"},"CalculateAssemblyQuoteRequest":{"properties":{"assembly_quote":{"$ref":"#/components/schemas/AssemblyQuoteResponse"},"assembly_quantity":{"type":"integer","title":"Assembly Quantity"},"design_quantities":{"items":{"$ref":"#/components/schemas/DesignQuantity"},"type":"array","title":"Design Quantities"},"requested_quantity_range":{"anyOf":[{"$ref":"#/components/schemas/RequestedQuantityRange"},{"type":"null"}]},"requested_quantities":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Requested Quantities"}},"type":"object","required":["assembly_quote","assembly_quantity","design_quantities"],"title":"CalculateAssemblyQuoteRequest","description":"Request model for calculating final pricing on an assembly quote.\n\nTakes an existing AssemblyQuoteResponse and applies quantities to calculate\nfinal pricing including discounts and totals."},"CalculatedAssemblyQuote":{"properties":{"assembly":{"$ref":"#/components/schemas/AssemblyTotals"},"designs":{"items":{"$ref":"#/components/schemas/CalculatedQuote"},"type":"array","title":"Designs"},"pricingVersion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricingversion"},"pricingMetadata":{"anyOf":[{"$ref":"#/components/schemas/PricingMetadata"},{"type":"null"}]}},"type":"object","required":["assembly","designs"],"title":"CalculatedAssemblyQuote","description":"Response model for calculated assembly pricing (matches frontend interface)."},"CalculatedAssemblyQuoteResponse":{"properties":{"assembly":{"$ref":"#/components/schemas/AssemblyTotals"},"designs":{"items":{"$ref":"#/components/schemas/CalculatedQuote"},"type":"array","title":"Designs"},"pricingVersion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricingversion"},"pricingMetadata":{"anyOf":[{"$ref":"#/components/schemas/PricingMetadata"},{"type":"null"}]},"quantityQuotes":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/CalculatedAssemblyQuote"},"type":"object"},{"type":"null"}],"title":"Quantityquotes"}},"type":"object","required":["assembly","designs"],"title":"CalculatedAssemblyQuoteResponse","description":"Calculated quote response with optional precomputed quantity rows."},"CalculatedQuote":{"properties":{"originalUnitAmount":{"type":"integer","title":"Originalunitamount"},"discountAmount":{"type":"integer","title":"Discountamount"},"discountPercent":{"type":"number","title":"Discountpercent"},"priceAfterDiscount":{"type":"integer","title":"Priceafterdiscount"},"totalAmountBeforeSecondaryOperations":{"type":"integer","title":"Totalamountbeforesecondaryoperations"},"totalBendCost":{"type":"integer","title":"Totalbendcost"},"totalTapCost":{"type":"integer","title":"Totaltapcost"},"totalStudCost":{"type":"integer","title":"Totalstudcost"},"totalNutCost":{"type":"integer","title":"Totalnutcost"},"totalCountersinkCost":{"type":"integer","title":"Totalcountersinkcost"},"totalPowderCoatCost":{"type":"integer","title":"Totalpowdercoatcost"},"totalFinishCost":{"type":"integer","title":"Totalfinishcost","default":0},"totalAmount":{"type":"integer","title":"Totalamount"},"effectiveUnitCost":{"type":"integer","title":"Effectiveunitcost"},"designId":{"type":"string","title":"Designid"},"pricingVersion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricingversion"},"pricingMetadata":{"anyOf":[{"$ref":"#/components/schemas/PricingMetadata"},{"type":"null"}]}},"type":"object","required":["originalUnitAmount","discountAmount","discountPercent","priceAfterDiscount","totalAmountBeforeSecondaryOperations","totalBendCost","totalTapCost","totalStudCost","totalNutCost","totalCountersinkCost","totalPowderCoatCost","totalAmount","effectiveUnitCost","designId"],"title":"CalculatedQuote","description":"Calculated pricing for a single design (matches frontend CalculatedQuote interface)."},"CameraCalibrationRequest":{"properties":{"board_width":{"type":"integer","title":"Board Width","default":5},"board_height":{"type":"integer","title":"Board Height","default":7},"square_size":{"type":"number","title":"Square Size","default":0.04},"marker_size":{"type":"number","title":"Marker Size","default":0.02}},"type":"object","title":"CameraCalibrationRequest"},"Cart":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CartItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"Cart"},"CartItem":{"properties":{"design_id":{"type":"string","title":"Design Id"},"material_id":{"type":"string","title":"Material Id"},"quantity":{"type":"integer","title":"Quantity"}},"type":"object","required":["design_id","material_id","quantity"],"title":"CartItem"},"CoordinatePoint":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CoordinatePoint"},"Countersink":{"properties":{"hole_id":{"type":"integer","title":"Hole Id"},"outer_diameter":{"type":"number","title":"Outer Diameter"},"outer_diameter_unit":{"type":"string","enum":["mm","inches"],"title":"Outer Diameter Unit"},"angle":{"type":"integer","enum":[82,90],"title":"Angle"},"side":{"type":"string","enum":["top","bottom"],"title":"Side"}},"type":"object","required":["hole_id","outer_diameter","outer_diameter_unit","angle","side"],"title":"Countersink"},"CountersinkPricing":{"properties":{"price_per_countersink":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Per Countersink"},"num_countersinks":{"type":"integer","title":"Num Countersinks"},"base_price":{"type":"integer","title":"Base Price"}},"type":"object","required":["price_per_countersink","num_countersinks","base_price"],"title":"CountersinkPricing"},"Design":{"properties":{"id":{"type":"string","title":"Id","description":"The unique identifier for the design"},"file_name":{"type":"string","title":"File Name","description":"The original name of the file"},"part_type":{"type":"string","enum":["sheet","tube"],"title":"Part Type","default":"sheet"},"part_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part Name"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"file_url":{"type":"string","title":"File Url"},"file_size":{"type":"integer","title":"File Size"},"gltf_url":{"type":"string","title":"Gltf Url"},"flat_pattern_gltf_url":{"type":"string","title":"Flat Pattern Gltf Url"},"bends":{"items":{"$ref":"#/components/schemas/Bend"},"type":"array","title":"Bends"},"thickness":{"type":"number","title":"Thickness"},"surface_area_cm2":{"type":"number","title":"Surface Area Cm2"},"bounding_dimensions":{"items":{"type":"number"},"type":"array","title":"Bounding Dimensions"},"flat_bounding_dimensions_mm":{"items":{"type":"number"},"type":"array","title":"Flat Bounding Dimensions Mm"},"manufacturability":{"type":"string","enum":["manufacturable","not_within_shippable_dimensions","not_within_manufacturable_dimensions"],"title":"Manufacturability"},"manufacturability_details":{"anyOf":[{"items":{"type":"string","enum":["exceeds_length","exceeds_width","exceeds_thickness","failed_processing","python_end_point_failure"]},"type":"array"},{"type":"null"}],"title":"Manufacturability Details"},"cut_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cut Length Mm"},"hole_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hole Count"},"flat_pattern_number_of_interior_boundaries":{"type":"integer","title":"Flat Pattern Number Of Interior Boundaries"},"original_holes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Hole"},"type":"array"},{"type":"null"}],"title":"Original Holes"},"flange_lengths":{"items":{"anyOf":[{"$ref":"#/components/schemas/FlangeLength"},{"type":"number"}]},"type":"array","title":"Flange Lengths"},"backgauge_flanges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Backgauge Flanges"},"u_channels":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"U Channels","default":[]},"transformed_holes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Hole"},"type":"array"},{"type":"null"}],"title":"Transformed Holes"},"countersinks":{"anyOf":[{"items":{"$ref":"#/components/schemas/AnalyzedCountersink"},"type":"array"},{"type":"null"}],"title":"Countersinks"},"design_tree":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Design Tree"},"detected_tube_profile_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Tube Profile Key"},"tube_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tube Profile Id"},"tube_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tube Length Mm"},"tube_features":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tube Features"},"tube_holes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tube Holes"},"tube_metadata":{"additionalProperties":true,"type":"object","title":"Tube Metadata"},"public":{"type":"boolean","title":"Public"},"issues":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array","title":"Issues"},"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token"}},"type":"object","required":["id","file_name","file_url","file_size","gltf_url","flat_pattern_gltf_url","bends","thickness","surface_area_cm2","bounding_dimensions","flat_bounding_dimensions_mm","manufacturability","manufacturability_details","flat_pattern_number_of_interior_boundaries","flange_lengths","backgauge_flanges","public","issues"],"title":"Design"},"DesignQuantity":{"properties":{"design_id":{"type":"string","title":"Design Id"},"quantity":{"type":"integer","title":"Quantity"}},"type":"object","required":["design_id","quantity"],"title":"DesignQuantity","description":"Represents quantity for a specific design within an assembly."},"Discount":{"properties":{"quantity":{"type":"integer","title":"Quantity"},"discount_percent":{"type":"number","title":"Discount Percent"}},"type":"object","required":["quantity","discount_percent"],"title":"Discount"},"DropshipApiKeyRequest":{"properties":{"rotate":{"type":"boolean","title":"Rotate","default":false}},"type":"object","title":"DropshipApiKeyRequest"},"DropshipContactUpdateRequest":{"properties":{"contact_phone":{"type":"string","title":"Contact Phone"}},"type":"object","required":["contact_phone"],"title":"DropshipContactUpdateRequest"},"DropshipCreateOrderRequest":{"properties":{"sku":{"type":"string","title":"Sku"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"retail_unit_price_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Retail Unit Price Cents"},"source":{"anyOf":[{"$ref":"#/components/schemas/DropshipOrderSource"},{"type":"null"}]},"ship_to":{"$ref":"#/components/schemas/DropshipShipTo"}},"type":"object","required":["sku","quantity","ship_to"],"title":"DropshipCreateOrderRequest"},"DropshipItem":{"properties":{"id":{"type":"string","title":"Id"},"sku":{"type":"string","title":"Sku"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"kind":{"type":"string","title":"Kind"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"fulfillment_model":{"type":"string","title":"Fulfillment Model","default":"on_demand"},"contract_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Quantity"},"deposit_paid_cents":{"type":"integer","title":"Deposit Paid Cents","default":0},"production_release_mode":{"type":"string","title":"Production Release Mode","default":"automatic"},"part":{"anyOf":[{"$ref":"#/components/schemas/DropshipItemPart"},{"type":"null"}]},"assembly":{"anyOf":[{"$ref":"#/components/schemas/DropshipItemAssembly"},{"type":"null"}]}},"type":"object","required":["id","sku","name","status","kind"],"title":"DropshipItem"},"DropshipItemAssembly":{"properties":{"id":{"type":"string","title":"Id"},"part_count":{"type":"integer","title":"Part Count"},"has_welds":{"type":"boolean","title":"Has Welds"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"}},"type":"object","required":["id","part_count","has_welds"],"title":"DropshipItemAssembly"},"DropshipItemPart":{"properties":{"id":{"type":"string","title":"Id"},"material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material"},"material_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material Type"},"thickness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thickness"}},"type":"object","required":["id"],"title":"DropshipItemPart"},"DropshipItemRequestBody":{"properties":{"part_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part Id"},"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"},"sample_order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Order Id"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"DropshipItemRequestBody"},"DropshipItemsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DropshipItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DropshipItemsResponse"},"DropshipOrder":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"sku":{"type":"string","title":"Sku"},"quantity":{"type":"integer","title":"Quantity"},"parts_total_cents":{"type":"integer","title":"Parts Total Cents"},"billing_mode":{"type":"string","title":"Billing Mode","default":"per_order"},"production_hold":{"type":"boolean","title":"Production Hold","default":false},"shipping":{"$ref":"#/components/schemas/DropshipOrderShipping"},"tracking":{"anyOf":[{"$ref":"#/components/schemas/DropshipOrderTracking"},{"type":"null"}]},"charges":{"anyOf":[{"items":{"$ref":"#/components/schemas/DropshipOrderCharge"},"type":"array"},{"type":"null"}],"title":"Charges"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","status","sku","quantity","parts_total_cents","shipping","created_at"],"title":"DropshipOrder"},"DropshipOrderCharge":{"properties":{"kind":{"type":"string","title":"Kind"},"amount_cents":{"type":"integer","title":"Amount Cents"},"status":{"type":"string","title":"Status"},"stripe_payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Payment Intent Id"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["kind","amount_cents","status","created_at"],"title":"DropshipOrderCharge"},"DropshipOrderResponse":{"properties":{"order":{"$ref":"#/components/schemas/DropshipOrder"}},"type":"object","required":["order"],"title":"DropshipOrderResponse"},"DropshipOrderShipping":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"DropshipOrderShipping"},"DropshipOrderSource":{"properties":{"platform":{"type":"string","maxLength":50,"minLength":1,"title":"Platform"},"store":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Store"},"order_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Order Id"},"order_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Order Name"},"line_item_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line Item Id"},"line_item_title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line Item Title"}},"type":"object","required":["platform"],"title":"DropshipOrderSource","description":"Optional integration metadata for tracing an API order upstream."},"DropshipOrderTracking":{"properties":{"carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","title":"DropshipOrderTracking"},"DropshipOrdersResponse":{"properties":{"orders":{"items":{"$ref":"#/components/schemas/DropshipOrder"},"type":"array","title":"Orders"}},"type":"object","required":["orders"],"title":"DropshipOrdersResponse"},"DropshipRequestAccessRequest":{"properties":{"store_platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Platform"},"store_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Url"},"volume_estimate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volume Estimate"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"}},"type":"object","title":"DropshipRequestAccessRequest"},"DropshipSetupIntentConfirmRequest":{"properties":{"setup_intent_id":{"type":"string","title":"Setup Intent Id"}},"type":"object","required":["setup_intent_id"],"title":"DropshipSetupIntentConfirmRequest"},"DropshipShipTo":{"properties":{"name":{"type":"string","title":"Name"},"street1":{"type":"string","title":"Street1"},"street2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street2"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip":{"type":"string","title":"Zip"},"country":{"type":"string","title":"Country"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["name","street1","city","state","zip","country"],"title":"DropshipShipTo"},"DropshipWebhookEndpoint":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","title":"Created At"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"}},"type":"object","required":["id","url","events","active","created_at"],"title":"DropshipWebhookEndpoint"},"DropshipWebhookEndpointCreate":{"properties":{"url":{"type":"string","title":"Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"}},"type":"object","required":["url"],"title":"DropshipWebhookEndpointCreate"},"DropshipWebhookEndpointsResponse":{"properties":{"endpoints":{"items":{"$ref":"#/components/schemas/DropshipWebhookEndpoint"},"type":"array","title":"Endpoints"}},"type":"object","required":["endpoints"],"title":"DropshipWebhookEndpointsResponse"},"EnsureFolderRequest":{"properties":{"bucket":{"type":"string","title":"Bucket"},"folder_path":{"type":"string","title":"Folder Path"}},"type":"object","required":["bucket","folder_path"],"title":"EnsureFolderRequest"},"EnsureFolderResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"EnsureFolderResponse"},"ExperimentalBendPricingBreakdown":{"properties":{"designId":{"type":"string","title":"Designid"},"quantity":{"type":"integer","title":"Quantity"},"numBends":{"type":"integer","title":"Numbends"},"setupMinutes":{"type":"number","title":"Setupminutes"},"runSecondsPerBendPerPart":{"type":"number","title":"Runsecondsperbendperpart"},"totalRunSeconds":{"type":"number","title":"Totalrunseconds"},"riskPercent":{"type":"number","title":"Riskpercent"},"setupCostCents":{"type":"integer","title":"Setupcostcents"},"runCostCents":{"type":"integer","title":"Runcostcents"},"riskCostCents":{"type":"integer","title":"Riskcostcents"},"totalBendCostCents":{"type":"integer","title":"Totalbendcostcents"},"unitBendCostCents":{"type":"integer","title":"Unitbendcostcents"}},"type":"object","required":["designId","quantity","numBends","setupMinutes","runSecondsPerBendPerPart","totalRunSeconds","riskPercent","setupCostCents","runCostCents","riskCostCents","totalBendCostCents","unitBendCostCents"],"title":"ExperimentalBendPricingBreakdown","description":"Per-design bend cost breakdown for the proposed pricing experiment."},"ExperimentalBendPricingParameters":{"properties":{"model":{"type":"string","title":"Model"},"brake_setup_cost_recovery_cents_per_hour":{"type":"integer","title":"Brake Setup Cost Recovery Cents Per Hour"},"brake_run_sell_rate_cents_per_hour":{"type":"integer","title":"Brake Run Sell Rate Cents Per Hour"},"single_bend_program_and_tooling_setup_minutes":{"type":"number","title":"Single Bend Program And Tooling Setup Minutes"},"multi_bend_program_and_tooling_setup_minutes":{"type":"number","title":"Multi Bend Program And Tooling Setup Minutes"},"extra_setup_minutes_per_bend_after_first":{"type":"number","title":"Extra Setup Minutes Per Bend After First"},"first_part_seconds_per_bend":{"type":"number","title":"First Part Seconds Per Bend"},"repeat_seconds_per_bend_parts_2_to_10":{"type":"number","title":"Repeat Seconds Per Bend Parts 2 To 10"},"repeat_seconds_per_bend_parts_11_to_50":{"type":"number","title":"Repeat Seconds Per Bend Parts 11 To 50"},"repeat_seconds_per_bend_parts_51_plus":{"type":"number","title":"Repeat Seconds Per Bend Parts 51 Plus"},"one_bend_risk_percent":{"type":"number","title":"One Bend Risk Percent"},"two_to_three_bend_risk_percent":{"type":"number","title":"Two To Three Bend Risk Percent"},"four_to_seven_bend_risk_percent":{"type":"number","title":"Four To Seven Bend Risk Percent"},"eight_plus_bend_risk_percent":{"type":"number","title":"Eight Plus Bend Risk Percent"},"minimum_unit_bend_price_cents":{"type":"integer","title":"Minimum Unit Bend Price Cents"}},"type":"object","required":["model","brake_setup_cost_recovery_cents_per_hour","brake_run_sell_rate_cents_per_hour","single_bend_program_and_tooling_setup_minutes","multi_bend_program_and_tooling_setup_minutes","extra_setup_minutes_per_bend_after_first","first_part_seconds_per_bend","repeat_seconds_per_bend_parts_2_to_10","repeat_seconds_per_bend_parts_11_to_50","repeat_seconds_per_bend_parts_51_plus","one_bend_risk_percent","two_to_three_bend_risk_percent","four_to_seven_bend_risk_percent","eight_plus_bend_risk_percent","minimum_unit_bend_price_cents"],"title":"ExperimentalBendPricingParameters","description":"Inputs used by the proposed bend pricing experiment."},"FlangeLength":{"properties":{"flange_length":{"type":"number","title":"Flange Length"},"flange_bend_radius":{"type":"number","title":"Flange Bend Radius"},"flange_bend_angle":{"type":"number","title":"Flange Bend Angle"}},"type":"object","required":["flange_length","flange_bend_radius","flange_bend_angle"],"title":"FlangeLength"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Hole":{"properties":{"id":{"type":"integer","title":"Id"},"area_mm2":{"type":"number","title":"Area Mm2"},"center":{"$ref":"#/components/schemas/Point3D"},"diameter_mm":{"type":"number","title":"Diameter Mm"},"perimeter_mm":{"type":"number","title":"Perimeter Mm"},"hole_center_dist_to_nearest_edge":{"type":"number","title":"Hole Center Dist To Nearest Edge"},"normal":{"$ref":"#/components/schemas/Normal"},"nearest_bend":{"anyOf":[{"$ref":"#/components/schemas/NearestBend"},{"type":"null"}]},"nearby_bends":{"items":{"$ref":"#/components/schemas/NearestBend"},"type":"array","title":"Nearby Bends"},"outline":{"anyOf":[{"items":{"$ref":"#/components/schemas/Point3D"},"type":"array"},{"type":"null"}],"title":"Outline"}},"type":"object","required":["id","area_mm2","center","diameter_mm","perimeter_mm","hole_center_dist_to_nearest_edge","normal"],"title":"Hole"},"HomographyRequest":{"properties":{"image_points":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Image Points"},"real_world_points":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Real World Points"}},"type":"object","required":["image_points","real_world_points"],"title":"HomographyRequest"},"HomographyResponse":{"properties":{"homography_matrix":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Homography Matrix"}},"type":"object","required":["homography_matrix"],"title":"HomographyResponse"},"Issue":{"properties":{"bend_id":{"type":"integer","title":"Bend Id"},"issue":{"type":"string","title":"Issue"}},"type":"object","required":["bend_id","issue"],"title":"Issue"},"MaterialTable":{"properties":{"id":{"type":"string","title":"Id"},"material":{"type":"string","enum":["Steel","Aluminum","Stainless Steel"],"title":"Material"},"type":{"type":"string","title":"Type"},"thickness_in":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Thickness In"},"thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Thickness Mm"},"weight_cm2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Cm2"},"display_thickness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Thickness"},"bendable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bendable"},"ultimate_tensile_strength_psi":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ultimate Tensile Strength Psi"},"yield_tensile_strength_psi":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Yield Tensile Strength Psi"}},"type":"object","required":["id","material","type"],"title":"MaterialTable"},"MechanicalFinishPricing":{"properties":{"finish_type":{"type":"string","title":"Finish Type"},"base_price":{"type":"integer","title":"Base Price"},"price_per_cm2":{"type":"number","title":"Price Per Cm2"},"surface_area_cm2":{"type":"number","title":"Surface Area Cm2"},"price_tiers":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Tiers"}},"type":"object","required":["finish_type","base_price","price_per_cm2","surface_area_cm2","price_tiers"],"title":"MechanicalFinishPricing"},"ModifyGcodeRequest":{"properties":{"transformed_entities":{"items":{"$ref":"#/components/schemas/TransformedEntity"},"type":"array","title":"Transformed Entities"},"rotated_entities":{"items":{"$ref":"#/components/schemas/RotationEntity"},"type":"array","title":"Rotated Entities"},"intrinsic_matrix":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Intrinsic Matrix"},"removed_entities":{"items":{"type":"integer"},"type":"array","title":"Removed Entities"},"gcode":{"type":"string","title":"Gcode"}},"type":"object","required":["transformed_entities","rotated_entities","intrinsic_matrix","removed_entities","gcode"],"title":"ModifyGcodeRequest"},"NearestBend":{"properties":{"bend_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bend Id"},"distance_to_flange":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance To Flange"},"is_inner_cylindrical_face":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Inner Cylindrical Face"},"outside_bend_path":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Outside Bend Path"},"line_start":{"anyOf":[{"$ref":"#/components/schemas/Point3D"},{"type":"null"}]},"line_end":{"anyOf":[{"$ref":"#/components/schemas/Point3D"},{"type":"null"}]},"distortion_zone_side":{"anyOf":[{"$ref":"#/components/schemas/BendDistortionZoneSide"},{"type":"null"}]}},"type":"object","title":"NearestBend"},"Normal":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"z":{"type":"number","title":"Z"}},"type":"object","required":["x","y","z"],"title":"Normal"},"Nut":{"properties":{"hole_id":{"type":"integer","title":"Hole Id"},"size":{"type":"string","title":"Size"},"cost":{"type":"integer","title":"Cost"}},"type":"object","required":["hole_id","size","cost"],"title":"Nut"},"NutPricing":{"properties":{"price_per_nut":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Per Nut"},"num_nuts":{"type":"integer","title":"Num Nuts"},"base_price":{"type":"integer","title":"Base Price"}},"type":"object","required":["price_per_nut","num_nuts","base_price"],"title":"NutPricing"},"PartLocation":{"properties":{"part_id":{"type":"string","title":"Part Id"},"transformation_matrix":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Transformation Matrix"},"interior_point":{"anyOf":[{"$ref":"#/components/schemas/Point3D"},{"type":"null"}]}},"type":"object","required":["part_id","transformation_matrix"],"title":"PartLocation"},"Point3D":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"z":{"type":"number","title":"Z"}},"type":"object","required":["x","y","z"],"title":"Point3D"},"PowderCoatPricing":{"properties":{"color":{"type":"string","title":"Color"},"base_price":{"type":"integer","title":"Base Price"},"price_per_cm2":{"type":"number","title":"Price Per Cm2"},"surface_area_cm2":{"type":"number","title":"Surface Area Cm2"},"price_tiers":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Tiers"}},"type":"object","required":["color","base_price","price_per_cm2","surface_area_cm2","price_tiers"],"title":"PowderCoatPricing"},"PricingMetadata":{"properties":{"pricingVersion":{"type":"string","title":"Pricingversion"},"calculator":{"type":"string","title":"Calculator"},"components":{"additionalProperties":{"type":"string"},"type":"object","title":"Components"},"configHash":{"type":"string","title":"Confighash"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot"}},"type":"object","required":["pricingVersion","calculator","components","configHash"],"title":"PricingMetadata","description":"Version metadata for the pricing logic that generated a quote."},"QuoteDesign":{"properties":{"id":{"type":"string","title":"Id"},"file_name":{"type":"string","title":"File Name"},"part_type":{"type":"string","enum":["sheet","tube"],"title":"Part Type","default":"sheet"},"part_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part Name"},"file_size":{"type":"integer","title":"File Size"},"bends":{"items":{"$ref":"#/components/schemas/Bend"},"type":"array","title":"Bends"},"thickness":{"type":"number","title":"Thickness"},"surface_area_cm2":{"type":"number","title":"Surface Area Cm2"},"bounding_dimensions":{"items":{"type":"number"},"type":"array","title":"Bounding Dimensions"},"flat_bounding_dimensions_mm":{"items":{"type":"number"},"type":"array","title":"Flat Bounding Dimensions Mm"},"manufacturability":{"type":"string","enum":["manufacturable","not_within_shippable_dimensions","not_within_manufacturable_dimensions"],"title":"Manufacturability"},"manufacturability_details":{"anyOf":[{"items":{"type":"string","enum":["exceeds_length","exceeds_width","exceeds_thickness","failed_processing","python_end_point_failure"]},"type":"array"},{"type":"null"}],"title":"Manufacturability Details"},"cut_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cut Length Mm"},"hole_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hole Count"},"flat_pattern_number_of_interior_boundaries":{"type":"integer","title":"Flat Pattern Number Of Interior Boundaries"},"original_holes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Hole"},"type":"array"},{"type":"null"}],"title":"Original Holes"},"flange_lengths":{"items":{"anyOf":[{"$ref":"#/components/schemas/FlangeLength"},{"type":"number"}]},"type":"array","title":"Flange Lengths"},"backgauge_flanges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Backgauge Flanges"},"u_channels":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"U Channels"},"transformed_holes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Hole"},"type":"array"},{"type":"null"}],"title":"Transformed Holes"},"countersinks":{"anyOf":[{"items":{"$ref":"#/components/schemas/AnalyzedCountersink"},"type":"array"},{"type":"null"}],"title":"Countersinks"},"design_tree":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Design Tree"},"detected_tube_profile_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Tube Profile Key"},"tube_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tube Profile Id"},"tube_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tube Length Mm"},"tube_features":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tube Features"},"tube_holes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tube Holes"},"tube_metadata":{"additionalProperties":true,"type":"object","title":"Tube Metadata"},"public":{"type":"boolean","title":"Public"},"issues":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array","title":"Issues"},"assembly_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assembly Id"}},"type":"object","required":["id","file_name","file_size","bends","thickness","surface_area_cm2","bounding_dimensions","flat_bounding_dimensions_mm","manufacturability","manufacturability_details","flat_pattern_number_of_interior_boundaries","flange_lengths","backgauge_flanges","public","issues"],"title":"QuoteDesign","description":"Customer-safe design metadata embedded in quote responses.\n\nPricing needs the analyzed geometry, but callers do not need database\nownership fields, anonymous bearer tokens, or internal storage paths. A\nserialized quote can therefore be sent back to `/quotes/calculate`\nwithout carrying any of those secrets."},"QuoteManufacturability":{"properties":{"is_manufacturable":{"type":"boolean","title":"Is Manufacturable"},"issues":{"items":{"$ref":"#/components/schemas/QuoteManufacturabilityIssue"},"type":"array","title":"Issues"}},"type":"object","required":["is_manufacturable"],"title":"QuoteManufacturability","description":"Complete manufacturability result for one quoted configuration."},"QuoteManufacturabilityIssue":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"source":{"type":"string","enum":["planner","reason_api"],"title":"Source"},"blocking":{"type":"boolean","title":"Blocking","default":true},"design_id":{"type":"string","title":"Design Id"},"bend_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bend Id"},"hole_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hole Id"},"material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material"},"material_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material Type"},"actual_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Actual Length Mm"},"min_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Length Mm"},"max_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Length Mm"},"actual_angle_degrees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Actual Angle Degrees"},"max_angle_degrees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Angle Degrees"},"required_tonnage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Required Tonnage"},"max_tonnage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Tonnage"},"thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Thickness Mm"},"designed_thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Designed Thickness Mm"},"designed_bend_radius_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Designed Bend Radius Mm"},"tooling_bend_radius_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tooling Bend Radius Mm"},"die_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Die Id"},"die_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Die Name"},"die_v_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Die V Width Mm"},"die_selection":{"anyOf":[{"type":"string","enum":["preferred_calibration","best_guess_8x_thickness"]},{"type":"null"}],"title":"Die Selection"},"ultimate_tensile_strength_psi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ultimate Tensile Strength Psi"},"distance_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Mm"},"min_distance_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Distance Mm"}},"type":"object","required":["code","message","source","design_id"],"title":"QuoteManufacturabilityIssue","description":"A normalized DFM issue for the design/material used by a quote."},"QuoteRequest":{"properties":{"design_id":{"type":"string","title":"Design Id"},"material_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Material Id"},"tube_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tube Profile Id"},"pooled_tube_material_cents":{"type":"number","title":"Pooled Tube Material Cents","default":0},"taps":{"anyOf":[{"items":{"$ref":"#/components/schemas/Tap"},"type":"array"},{"type":"null"}],"title":"Taps"},"studs":{"anyOf":[{"items":{"$ref":"#/components/schemas/Stud"},"type":"array"},{"type":"null"}],"title":"Studs"},"nuts":{"anyOf":[{"items":{"$ref":"#/components/schemas/Nut"},"type":"array"},{"type":"null"}],"title":"Nuts"},"countersinks":{"anyOf":[{"items":{"$ref":"#/components/schemas/Countersink"},"type":"array"},{"type":"null"}],"title":"Countersinks"},"powder_coat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Powder Coat"},"finish_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finish Type"}},"type":"object","required":["design_id"],"title":"QuoteRequest"},"QuoteResponse":{"properties":{"unit_price":{"type":"integer","title":"Unit Price"},"secondary_operations":{"items":{"$ref":"#/components/schemas/SecondaryOperation"},"type":"array","title":"Secondary Operations"},"discounts":{"items":{"$ref":"#/components/schemas/Discount"},"type":"array","title":"Discounts"},"material":{"anyOf":[{"$ref":"#/components/schemas/MaterialTable"},{"type":"null"}]},"tube_profile":{"anyOf":[{"$ref":"#/components/schemas/TubeProfileTable"},{"type":"null"}]},"tube_pricing":{"anyOf":[{"$ref":"#/components/schemas/TubePricingBreakdown"},{"type":"null"}]},"manufacturability":{"anyOf":[{"$ref":"#/components/schemas/QuoteManufacturability"},{"type":"null"}]},"design":{"$ref":"#/components/schemas/QuoteDesign"}},"type":"object","required":["unit_price","secondary_operations","discounts","design"],"title":"QuoteResponse"},"RequestedQuantityRange":{"properties":{"min_quantity":{"type":"integer","title":"Min Quantity"},"max_quantity":{"type":"integer","title":"Max Quantity"}},"type":"object","required":["min_quantity","max_quantity"],"title":"RequestedQuantityRange","description":"Inclusive range of assembly quantities to precompute."},"RotationEntity":{"properties":{"entity_id":{"type":"integer","title":"Entity Id"},"rotation_angle":{"type":"number","title":"Rotation Angle"}},"type":"object","required":["entity_id","rotation_angle"],"title":"RotationEntity"},"SecondaryOperation":{"properties":{"name":{"type":"string","title":"Name"},"pricing":{"anyOf":[{"$ref":"#/components/schemas/BendPricing"},{"$ref":"#/components/schemas/TapPricing"},{"$ref":"#/components/schemas/StudPricing"},{"$ref":"#/components/schemas/NutPricing"},{"$ref":"#/components/schemas/CountersinkPricing"},{"$ref":"#/components/schemas/PowderCoatPricing"},{"$ref":"#/components/schemas/MechanicalFinishPricing"}],"title":"Pricing"}},"type":"object","required":["name","pricing"],"title":"SecondaryOperation"},"StepAnalysisAccepted":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","const":"queued","title":"Status","default":"queued"},"file_name":{"type":"string","title":"File Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["job_id","file_name","created_at"],"title":"StepAnalysisAccepted","description":"A durable STEP upload accepted for asynchronous analysis."},"StepAnalysisJobStatus":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","enum":["pending","queued","processing","retrying","ready","failed"],"title":"Status"},"file_name":{"type":"string","title":"File Name"},"attempts":{"type":"integer","title":"Attempts"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"preview_status":{"type":"string","enum":["pending","queued","processing","ready","failed"],"title":"Preview Status","default":"pending"},"preview_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Error"},"artifact_status":{"anyOf":[{"type":"string","enum":["queued","processing","retrying","ready","failed"]},{"type":"null"}],"title":"Artifact Status"},"artifact_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Artifact Error"},"result":{"anyOf":[{"$ref":"#/components/schemas/AssemblyResponse"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"server_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Server Sent At"},"delivery_source":{"anyOf":[{"type":"string","enum":["sse","fallback","single"]},{"type":"null"}],"title":"Delivery Source"}},"type":"object","required":["job_id","status","file_name","attempts","created_at","updated_at"],"title":"StepAnalysisJobStatus","description":"Owner-scoped status returned while a STEP analysis job progresses."},"Stud":{"properties":{"hole_id":{"type":"integer","title":"Hole Id"},"size":{"type":"string","title":"Size"},"cost":{"type":"integer","title":"Cost"}},"type":"object","required":["hole_id","size","cost"],"title":"Stud"},"StudPricing":{"properties":{"price_per_stud":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Per Stud"},"num_studs":{"type":"integer","title":"Num Studs"},"base_price":{"type":"integer","title":"Base Price"}},"type":"object","required":["price_per_stud","num_studs","base_price"],"title":"StudPricing"},"TableConfiguratorRequest":{"properties":{"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["config"],"title":"TableConfiguratorRequest"},"Tap":{"properties":{"hole_id":{"type":"integer","title":"Hole Id"},"size":{"type":"string","title":"Size"}},"type":"object","required":["hole_id","size"],"title":"Tap"},"TapPricing":{"properties":{"price_per_tap":{"items":{"$ref":"#/components/schemas/UnitPricing"},"type":"array","title":"Price Per Tap"},"num_taps":{"type":"integer","title":"Num Taps"},"base_price":{"type":"integer","title":"Base Price"}},"type":"object","required":["price_per_tap","num_taps","base_price"],"title":"TapPricing"},"TransformCoordinatesRequest":{"properties":{"intrinsic_matrix":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Intrinsic Matrix"},"coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Coordinates"},"invert_intrinsic_matrix":{"type":"boolean","title":"Invert Intrinsic Matrix"}},"type":"object","required":["intrinsic_matrix","coordinates","invert_intrinsic_matrix"],"title":"TransformCoordinatesRequest"},"TransformCoordinatesResponse":{"properties":{"real_coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Real Coordinates"}},"type":"object","required":["real_coordinates"],"title":"TransformCoordinatesResponse"},"TransformedEntity":{"properties":{"entity_id":{"type":"integer","title":"Entity Id"},"entity_orig_center":{"$ref":"#/components/schemas/CoordinatePoint"},"entity_transformed_center":{"$ref":"#/components/schemas/CoordinatePoint"}},"type":"object","required":["entity_id","entity_orig_center","entity_transformed_center"],"title":"TransformedEntity"},"TubePricingBreakdown":{"properties":{"pricing_model":{"type":"string","title":"Pricing Model"},"material_cents":{"type":"number","title":"Material Cents"},"machine_cents":{"type":"number","title":"Machine Cents"},"handling_cents":{"type":"number","title":"Handling Cents"},"unit_cost_cents":{"type":"number","title":"Unit Cost Cents"},"machine_time_s":{"type":"number","title":"Machine Time S"},"length_mm":{"type":"number","title":"Length Mm"},"stock_cost_per_mm_cents":{"type":"number","title":"Stock Cost Per Mm Cents"},"utilization_factor":{"type":"number","title":"Utilization Factor"},"margin_at_unit_price":{"type":"number","title":"Margin At Unit Price"},"pooled_material_cents":{"type":"number","title":"Pooled Material Cents"}},"type":"object","required":["pricing_model","material_cents","machine_cents","handling_cents","unit_cost_cents","machine_time_s","length_mm","stock_cost_per_mm_cents","utilization_factor","margin_at_unit_price","pooled_material_cents"],"title":"TubePricingBreakdown","description":"Cost/margin snapshot behind a tube quote, for audit and calibration.\n\nPersisting this with the quote is what lets predicted material/machine\nnumbers be compared against factory actuals later."},"TubeProfileTable":{"properties":{"id":{"type":"string","title":"Id"},"material":{"type":"string","enum":["Steel","Aluminum","Stainless Steel"],"title":"Material"},"type":{"type":"string","title":"Type"},"shape":{"type":"string","title":"Shape"},"display_name":{"type":"string","title":"Display Name"},"outer_width_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outer Width Mm"},"outer_height_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outer Height Mm"},"outer_diameter_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outer Diameter Mm"},"inner_diameter_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inner Diameter Mm"},"wall_thickness_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wall Thickness Mm"},"outer_corner_radius_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outer Corner Radius Mm"},"inner_corner_radius_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inner Corner Radius Mm"},"weight_kg_per_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg Per M"},"default_stock_length_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Default Stock Length Mm"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["id","material","type","shape","display_name"],"title":"TubeProfileTable"},"UnitPricing":{"properties":{"quantity":{"type":"integer","title":"Quantity"},"price":{"type":"integer","title":"Price"}},"type":"object","required":["quantity","price"],"title":"UnitPricing"},"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"},"Weld":{"properties":{"type":{"type":"string","title":"Type"},"length":{"type":"number","title":"Length"},"part_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Part Ids"},"finish":{"type":"string","enum":["none","rough","fine"],"title":"Finish","default":"none"},"joint_access":{"type":"string","enum":["open","tight","blind"],"title":"Joint Access","default":"open"}},"type":"object","required":["type","length"],"title":"Weld","description":"Represents a weld operation performed at the assembly level.\n\n`type` is the customer-selected weld process (\"mig\" or \"tig\") — a\nprocess selection is required, the API rejects placeholder values.\n`part_ids` are the design ids the seam joins; pricing uses the involved\nparts' material family and thickness."},"WeldLineItem":{"properties":{"length_cm":{"type":"number","title":"Length Cm"},"process":{"type":"string","title":"Process"},"material_family":{"type":"string","title":"Material Family"},"rate_per_inch_cents":{"type":"integer","title":"Rate Per Inch Cents"},"thickness_multiplier":{"type":"number","title":"Thickness Multiplier"},"access_multiplier":{"type":"number","title":"Access Multiplier"},"weld_cost_cents":{"type":"integer","title":"Weld Cost Cents"},"finish":{"type":"string","title":"Finish"},"finish_cost_cents":{"type":"integer","title":"Finish Cost Cents"}},"type":"object","required":["length_cm","process","material_family","rate_per_inch_cents","thickness_multiplier","access_multiplier","weld_cost_cents","finish","finish_cost_cents"],"title":"WeldLineItem","description":"Priced breakdown for a single weld seam (per assembly unit)."},"WeldPricingBreakdown":{"properties":{"welds":{"items":{"$ref":"#/components/schemas/WeldLineItem"},"type":"array","title":"Welds"},"weld_unit_cost_cents":{"type":"integer","title":"Weld Unit Cost Cents"},"setup_fee_cents":{"type":"integer","title":"Setup Fee Cents"},"fixturing_piece_fee_cents":{"type":"integer","title":"Fixturing Piece Fee Cents"},"fixturing_size_fee_cents":{"type":"integer","title":"Fixturing Size Fee Cents"},"one_time_fees_cents":{"type":"integer","title":"One Time Fees Cents"},"part_sqft":{"type":"number","title":"Part Sqft"},"piece_count":{"type":"integer","title":"Piece Count"}},"type":"object","required":["welds","weld_unit_cost_cents","setup_fee_cents","fixturing_piece_fee_cents","fixturing_size_fee_cents","one_time_fees_cents","part_sqft","piece_count"],"title":"WeldPricingBreakdown","description":"Full parametric weld pricing for an assembly quote.\n\n`weld_unit_cost_cents` (seams + finishing for ONE assembly) scales with\nquantity via the qty run-rate discounts; the setup and fixturing fees are\ncharged once per order and never discounted."}},"securitySchemes":{"RMFGAPIKey":{"type":"apiKey","in":"header","name":"rmfg_key"},"SupabaseAccessToken":{"type":"apiKey","in":"header","name":"supabase_key"},"SupabaseRefreshToken":{"type":"apiKey","in":"header","name":"supabase_refresh_key"},"AnonymousSessionToken":{"type":"apiKey","in":"header","name":"x-session-token"}}}}