{"openapi":"3.1.0","info":{"title":"Formlore Agent API","version":"1.10.0"},"servers":[{"url":"https://formlore.app/api/agent/v1"}],"security":[{"ProductKey":[]}],"components":{"securitySchemes":{"ProductKey":{"type":"http","scheme":"bearer"}},"schemas":{"ProductDocument":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"joints":{"maxItems":64,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"type":{"type":"string","const":"panel_hinge"},"fixed_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"moving_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"edge":{"type":"string","enum":["left","right","front","back"]},"hinges":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"offset":{"type":"number","minimum":-50000,"maximum":50000}},"required":["part","offset"],"additionalProperties":false}},"max_angle":{"default":90,"type":"number","exclusiveMinimum":0,"maximum":180}},"required":["id","type","fixed_part","moving_part","edge","hinges"],"additionalProperties":false}},"construction":{"anyOf":[{"oneOf":[{"type":"object","properties":{"template":{"type":"string","enum":["framed_three_drawer_v1","framed_three_drawer_v2"]},"width":{"type":"number","minimum":700,"maximum":1600},"height":{"type":"number","minimum":850,"maximum":1300},"depth":{"type":"number","minimum":440,"maximum":700},"slide":{"type":"object","properties":{"length":{"type":"number","minimum":320,"maximum":620},"hole_inset":{"default":60,"type":"number","minimum":40,"maximum":90}},"required":["length"],"additionalProperties":false},"front_heights":{"type":"array","prefixItems":[{"type":"number","minimum":190},{"type":"number","minimum":190},{"type":"number","minimum":190}],"items":false,"minItems":3,"maxItems":3},"cabinet_side_thickness":{"default":16,"type":"number","minimum":16,"maximum":25},"drawer_side_thickness":{"default":14,"type":"number","minimum":14,"maximum":24},"front_thickness":{"default":18,"type":"number","minimum":18,"maximum":30},"bottom_thickness":{"default":3,"type":"number","minimum":3,"maximum":8},"front_gap":{"default":2,"type":"number","minimum":1,"maximum":6},"side_gap":{"default":2,"type":"number","minimum":1,"maximum":4},"bottom_gap":{"default":1,"type":"number","minimum":0.5,"maximum":3}},"required":["template","width","height","depth","slide"],"additionalProperties":false},{"type":"object","properties":{"template":{"type":"string","const":"panel_shelf_v1"},"width":{"type":"number","minimum":240,"maximum":1600},"height":{"type":"number","minimum":240,"maximum":2400},"depth":{"type":"number","minimum":160,"maximum":700},"shelves":{"default":2,"type":"integer","minimum":1,"maximum":6},"thickness":{"default":18,"type":"number","minimum":16,"maximum":24}},"required":["template","width","height","depth"],"additionalProperties":false}]},{"type":"null"}]},"assemblies":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"locks":{"maxItems":24,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"placement":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"gap":{"type":"number","minimum":0,"maximum":1000}},"required":["part","point","target_part","target_point","gap"],"additionalProperties":false},"clearances":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"min_gap":{"type":"number","minimum":0,"maximum":1000}},"required":["id","part","point","target_part","target_point","min_gap"],"additionalProperties":false}},"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"parent":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"parts":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"entry":{"type":"string","enum":["front","back","left","right","top","bottom"]}},"required":["id","name","parts"],"additionalProperties":false}},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]},"parts":{"minItems":1,"maxItems":600,"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["id","name","shape","size"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","const":"compound"},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]},"components":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["shape","size"],"additionalProperties":false}}},"required":["id","name","shape","size","components"],"additionalProperties":false}]}},"initial_parts":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"tools":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"count":{"type":"integer","minimum":1,"maximum":100}},"required":["id","name","count"],"additionalProperties":false}},"steps":{"maxItems":1200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"title":{"type":"string","minLength":1,"maxLength":160},"instruction":{"type":"string","minLength":1,"maxLength":4000},"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]},"tip":{"type":"string","maxLength":2000},"tools":{"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"actions":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"focus_parts":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"label":{"type":"string","minLength":1,"maxLength":60},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]}},"additionalProperties":false}}},"required":["id","title","instruction"],"additionalProperties":false}},"open_questions":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"assumptions":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"connections":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"target_interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"mode":{"type":"string","enum":["mate","insert","fasten","set_screw"]},"twist":{"default":0,"type":"number","minimum":-360,"maximum":360},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"contact":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"through":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false}}},"required":["id","part","target_part","mode"],"additionalProperties":false}}},"required":["material","parts","initial_parts","tools","steps"],"additionalProperties":false}}},"paths":{"/get_product":{"get":{"operationId":"get_product","description":"Read the product. Call with view=summary immediately after receiving authorization; the first successful read connects the AI and opens the merchant preview. Use part with part_id, catalog or full as needed.","parameters":[{"name":"Accept-Language","in":"header","required":false,"description":"Preferred language for new authored content; defaults to the product key language. Does not translate existing content.","schema":{"type":"string","examples":["en","zh-CN","de","fr","es","it","pt","nl"]}},{"name":"view","in":"query","schema":{"type":"string","enum":["summary","part","catalog","full"],"default":"full"}},{"name":"part_id","in":"query","description":"Required for view=part.","schema":{"type":"string"}},{"name":"language","in":"query","description":"Overrides Accept-Language for this read.","schema":{"type":"string","enum":["en","zh-CN","de","fr","es","it","pt","nl"]}}],"responses":{"200":{"description":"data contains results and effective language; request_id identifies the request. Validation is revision-bound; image links expire after five minutes."},"401":{"description":"Invalid or expired authorization"},"409":{"description":"Revision or idempotency conflict"},"422":{"description":"Invalid parameters"},"429":{"description":"Rate limited"},"503":{"description":"Preview service unavailable"}}}},"/save_product":{"post":{"operationId":"save_product","description":"Atomically save or dry-run changes. changes replaces fields; patch upserts/removes complete entities by stable ID. Does not publish or update the permanent public tutorial link; only merchant publication updates public content.","parameters":[{"name":"Accept-Language","in":"header","required":false,"description":"Preferred language for new authored content; defaults to the product key language. Does not translate existing content.","schema":{"type":"string","examples":["en","zh-CN","de","fr","es","it","pt","nl"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expected_revision":{"type":"integer","minimum":1,"maximum":9007199254740991},"operation_id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"changes":{"type":"object","properties":{"joints":{"maxItems":64,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"type":{"type":"string","const":"panel_hinge"},"fixed_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"moving_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"edge":{"type":"string","enum":["left","right","front","back"]},"hinges":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"offset":{"type":"number","minimum":-50000,"maximum":50000}},"required":["part","offset"],"additionalProperties":false}},"max_angle":{"default":90,"type":"number","exclusiveMinimum":0,"maximum":180}},"required":["id","type","fixed_part","moving_part","edge","hinges"],"additionalProperties":false}},"construction":{"anyOf":[{"oneOf":[{"type":"object","properties":{"template":{"type":"string","enum":["framed_three_drawer_v1","framed_three_drawer_v2"]},"width":{"type":"number","minimum":700,"maximum":1600},"height":{"type":"number","minimum":850,"maximum":1300},"depth":{"type":"number","minimum":440,"maximum":700},"slide":{"type":"object","properties":{"length":{"type":"number","minimum":320,"maximum":620},"hole_inset":{"default":60,"type":"number","minimum":40,"maximum":90}},"required":["length"],"additionalProperties":false},"front_heights":{"type":"array","prefixItems":[{"type":"number","minimum":190},{"type":"number","minimum":190},{"type":"number","minimum":190}],"items":false,"minItems":3,"maxItems":3},"cabinet_side_thickness":{"default":16,"type":"number","minimum":16,"maximum":25},"drawer_side_thickness":{"default":14,"type":"number","minimum":14,"maximum":24},"front_thickness":{"default":18,"type":"number","minimum":18,"maximum":30},"bottom_thickness":{"default":3,"type":"number","minimum":3,"maximum":8},"front_gap":{"default":2,"type":"number","minimum":1,"maximum":6},"side_gap":{"default":2,"type":"number","minimum":1,"maximum":4},"bottom_gap":{"default":1,"type":"number","minimum":0.5,"maximum":3}},"required":["template","width","height","depth","slide"],"additionalProperties":false},{"type":"object","properties":{"template":{"type":"string","const":"panel_shelf_v1"},"width":{"type":"number","minimum":240,"maximum":1600},"height":{"type":"number","minimum":240,"maximum":2400},"depth":{"type":"number","minimum":160,"maximum":700},"shelves":{"default":2,"type":"integer","minimum":1,"maximum":6},"thickness":{"default":18,"type":"number","minimum":16,"maximum":24}},"required":["template","width","height","depth"],"additionalProperties":false}]},{"type":"null"}]},"assemblies":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"locks":{"maxItems":24,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"placement":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"gap":{"type":"number","minimum":0,"maximum":1000}},"required":["part","point","target_part","target_point","gap"],"additionalProperties":false},"clearances":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"min_gap":{"type":"number","minimum":0,"maximum":1000}},"required":["id","part","point","target_part","target_point","min_gap"],"additionalProperties":false}},"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"parent":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"parts":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"entry":{"type":"string","enum":["front","back","left","right","top","bottom"]}},"required":["id","name","parts"],"additionalProperties":false}},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]},"parts":{"minItems":1,"maxItems":600,"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["id","name","shape","size"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","const":"compound"},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]},"components":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["shape","size"],"additionalProperties":false}}},"required":["id","name","shape","size","components"],"additionalProperties":false}]}},"initial_parts":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"tools":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"count":{"type":"integer","minimum":1,"maximum":100}},"required":["id","name","count"],"additionalProperties":false}},"steps":{"maxItems":1200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"title":{"type":"string","minLength":1,"maxLength":160},"instruction":{"type":"string","minLength":1,"maxLength":4000},"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]},"tip":{"type":"string","maxLength":2000},"tools":{"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"actions":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"focus_parts":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"label":{"type":"string","minLength":1,"maxLength":60},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]}},"additionalProperties":false}}},"required":["id","title","instruction"],"additionalProperties":false}},"open_questions":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"assumptions":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"connections":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"target_interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"mode":{"type":"string","enum":["mate","insert","fasten","set_screw"]},"twist":{"default":0,"type":"number","minimum":-360,"maximum":360},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"contact":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"through":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false}}},"required":["id","part","target_part","mode"],"additionalProperties":false}}},"additionalProperties":false},"patch":{"type":"object","properties":{"joints":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"type":{"type":"string","const":"panel_hinge"},"fixed_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"moving_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"edge":{"type":"string","enum":["left","right","front","back"]},"hinges":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"offset":{"type":"number","minimum":-50000,"maximum":50000}},"required":["part","offset"],"additionalProperties":false}},"max_angle":{"default":90,"type":"number","exclusiveMinimum":0,"maximum":180}},"required":["id","type","fixed_part","moving_part","edge","hinges"],"additionalProperties":false}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false},"assemblies":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"locks":{"maxItems":24,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"placement":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"gap":{"type":"number","minimum":0,"maximum":1000}},"required":["part","point","target_part","target_point","gap"],"additionalProperties":false},"clearances":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"min_gap":{"type":"number","minimum":0,"maximum":1000}},"required":["id","part","point","target_part","target_point","min_gap"],"additionalProperties":false}},"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"parent":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"parts":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"entry":{"type":"string","enum":["front","back","left","right","top","bottom"]}},"required":["id","name","parts"],"additionalProperties":false}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false},"parts":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["id","name","shape","size"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"interfaces":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"points":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","minLength":1,"maxLength":128}}},"required":["id","points"],"additionalProperties":false}},"shape":{"type":"string","const":"compound"},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]},"components":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"shape":{"type":"string","enum":["cad_reinforced_angle","cad_sofa_seat","cad_sofa_back","cad_sofa_arm","cad_coffee_top","panel","box","round_panel","cylinder","cone","tube_round","tube_rect","rod_hex","angle","channel","t_profile","i_profile","slotted_profile","screw","bolt","nut","washer","dowel","nail","wall_plug","felt_pad","cam_lock","rotary_latch","cam_bolt","shelf_pin","hinge","cabinet_hinge","drawer_slide","handle","knob","wheel","caster","leveling_foot","end_cap","star_base","gas_lift","tray","wire_shelf","cable","hook"]},"size":{"type":"array","prefixItems":[{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000},{"type":"number","minimum":1,"maximum":10000}],"items":false,"minItems":3,"maxItems":3},"params":{"type":"object","properties":{"wall":{"type":"number","exclusiveMinimum":0,"maximum":1000},"radius":{"type":"number","exclusiveMinimum":0,"maximum":5000},"inner_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"shaft_diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"head_height":{"type":"number","exclusiveMinimum":0,"maximum":10000},"top_ratio":{"type":"number","minimum":0.1,"maximum":1},"wire_diameter":{"type":"number","exclusiveMinimum":0,"maximum":100},"spacing":{"type":"number","exclusiveMinimum":0,"maximum":10000},"spokes":{"type":"integer","minimum":3,"maximum":8}},"additionalProperties":false},"holes":{"minItems":1,"maxItems":16,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,32}$"},"axis":{"type":"string","enum":["x","y","z"]},"at":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"diameter":{"type":"number","exclusiveMinimum":0,"maximum":10000},"kind":{"type":"string","enum":["through","blind"]},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"side":{"type":"string","enum":["positive","negative","both"]}},"required":["axis","at","diameter"],"additionalProperties":false}},"path":{"minItems":2,"maxItems":16,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"position":{"default":[0,0,0],"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3},"rotation":{"type":"array","prefixItems":[{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360},{"type":"number","minimum":-360,"maximum":360}],"items":false,"minItems":3,"maxItems":3},"material":{"anyOf":[{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},{"type":"object","properties":{"base":{"type":"string","enum":["wood_oak_light","wood_walnut","paint_white","metal_brushed","plastic_dark","plastic_white","metal_powder_white","metal_powder_black","rubber","fabric_grey"]},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"roughness":{"type":"number","minimum":0.1,"maximum":1},"grain_direction":{"type":"string","enum":["vertical","horizontal"]},"grain_scale":{"type":"number","minimum":0.5,"maximum":2}},"required":["base"],"additionalProperties":false}]}},"required":["shape","size"],"additionalProperties":false}}},"required":["id","name","shape","size","components"],"additionalProperties":false}]}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false},"connections":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128},"interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"target_point":{"type":"string","minLength":1,"maxLength":128},"target_interface":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"mode":{"type":"string","enum":["mate","insert","fasten","set_screw"]},"twist":{"default":0,"type":"number","minimum":-360,"maximum":360},"depth":{"type":"number","exclusiveMinimum":0,"maximum":10000},"contact":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"through":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false}}},"required":["id","part","target_part","mode"],"additionalProperties":false}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false},"steps":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"title":{"type":"string","minLength":1,"maxLength":160},"instruction":{"type":"string","minLength":1,"maxLength":4000},"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]},"tip":{"type":"string","maxLength":2000},"tools":{"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"actions":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"mount_assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"operation":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"hinge"},"joint":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"angle":{"type":"number","minimum":0,"maximum":180}},"required":["type","joint","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"assembly":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"axis":{"type":"string","enum":["x","y","z"]},"around":{"type":"object","properties":{"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"point":{"type":"string","minLength":1,"maxLength":128}},"required":["part","point"],"additionalProperties":false},"angle":{"type":"number","minimum":-360,"maximum":360}},"required":["type","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["lock","unlock"]},"part":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"required":["type","part"],"additionalProperties":false}]},"install_parts":{"default":[],"minItems":0,"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"focus_parts":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}},"label":{"type":"string","minLength":1,"maxLength":60},"motion":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"slide"},"from":{"type":"string","enum":["left","right","top","bottom","front","back"]},"distance":{"type":"number","minimum":1,"maximum":10000}},"required":["type","from"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"rotate"},"axis":{"type":"string","enum":["x","y","z"]},"angle":{"type":"number","minimum":-360,"maximum":360},"pivot":{"type":"array","prefixItems":[{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000},{"type":"number","minimum":-50000,"maximum":50000}],"items":false,"minItems":3,"maxItems":3}},"required":["type","axis","angle"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tighten"},"axis":{"type":"string","enum":["x","y","z"]},"turns":{"type":"integer","minimum":1,"maximum":8},"distance":{"type":"number","minimum":1,"maximum":500}},"required":["type","axis"],"additionalProperties":false}]},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]}},"additionalProperties":false}}},"required":["id","title","instruction"],"additionalProperties":false}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false},"tools":{"type":"object","properties":{"upsert":{"maxItems":600,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"name":{"type":"string","minLength":1,"maxLength":80},"count":{"type":"integer","minimum":1,"maximum":100}},"required":["id","name","count"],"additionalProperties":false}},"remove":{"maxItems":600,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"}}},"additionalProperties":false}},"additionalProperties":false},"dry_run":{"default":false,"type":"boolean"}},"required":["expected_revision"],"additionalProperties":false}}}},"responses":{"200":{"description":"data contains results and effective language; request_id identifies the request. Validation is revision-bound; image links expire after five minutes."},"401":{"description":"Invalid or expired authorization"},"409":{"description":"Revision or idempotency conflict"},"422":{"description":"Invalid parameters"},"429":{"description":"Rate limited"},"503":{"description":"Preview service unavailable"}}}},"/check_product":{"post":{"operationId":"check_product","description":"Validate a revision. render=false skips screenshots; include_plan=true returns the shared assembly plan.","parameters":[{"name":"Accept-Language","in":"header","required":false,"description":"Preferred language for new authored content; defaults to the product key language. Does not translate existing content.","schema":{"type":"string","examples":["en","zh-CN","de","fr","es","it","pt","nl"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"expected_revision":{"type":"integer","minimum":1,"maximum":9007199254740991},"preview":{"type":"object","properties":{"view":{"default":"assembled","type":"string","enum":["assembled","step"]},"step_id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,64}$"},"action_index":{"type":"integer","minimum":0,"maximum":199},"camera":{"type":"string","enum":["front-right","front-left","left","front","right","back","top","bottom"]}},"additionalProperties":false},"render":{"default":true,"type":"boolean"},"include_plan":{"default":false,"type":"boolean"}},"required":["expected_revision"],"additionalProperties":false}}}},"responses":{"200":{"description":"data contains results and effective language; request_id identifies the request. Validation is revision-bound; image links expire after five minutes."},"401":{"description":"Invalid or expired authorization"},"409":{"description":"Revision or idempotency conflict"},"422":{"description":"Invalid parameters"},"429":{"description":"Rate limited"},"503":{"description":"Preview service unavailable"}}}}}}