{"uid":"cap_gBWWxIUnB60rucTggc2J5","slug":"openscad-print-validation-b2ec00f5","name":"OpenSCAD Print Validation","description":"Web Evidence ($0.01/call), OpenSCAD Print Validation ($0.05/call), Spreadsheet Modification & Audit ($0.05/call), Packing & Shipping Engineer ($0.05/call), Game-Asset Technical Artist ($0.10/call), PCB Fabrication Engineer ($0.25/call), Software Failure Reduction Lab ($0.50/call), Laboratory-Protocol Compiler ($0.15/call), Video Finishing & Localization ($0.50/call), Print Prototype Engineer ($0.15/call), Garment-Pattern Engineer ($0.10/call), Product-Label Artwork Compiler ($0.15/call) and Notarized Website Capture ($10.00/call), settled in USDC on Base mainnet over HTTP 402. No API keys, no accounts.\n\nPrice: $0.01 (10000 atomic USDC per call), settled over HTTP 402 (x402, scheme \"exact\", EIP-3009).\n\nHow to pay: an unpaid POST answers 402 with a base64 `payment-required` header describing an exact transfer of 10000 atomic USDC on eip155:8453 (asset 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) to 0x26026370fe8b2bb17af9092a17691c76519366da. Sign the EIP-3009 authorization, attach it in the `payment-signature` header, and retry the identical request. Invalid requests are never charged.\n\n- Settlement: eip155:8453 / 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 / 0x26026370fe8b2bb17af9092a17691c76519366da","url":"https://api.williamrobinson.dev/v1/print/validate?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"source":{"type":"string","maxLength":16384,"minLength":1,"description":"Self-contained OpenSCAD, interpreted in millimetres; maximum 16 KiB UTF-8 before and after overrides. External imports are prohibited."},"profile":{"enum":["fdm-pla-0.4","fdm-petg-0.4"],"type":"string","default":"fdm-pla-0.4"},"maxSizeMm":{"type":"array","items":{"type":"number","maximum":1000,"exclusiveMinimum":0},"default":[220,220,250],"maxItems":3,"minItems":3},"parameters":{"type":"object","default":{},"description":"Overrides must name unique top-level scalar literal assignments, not derived expressions or reserved names.","maxProperties":64,"propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":512,"description":"Maximum 512 UTF-8 bytes."},{"type":"number","maximum":1000000,"minimum":-1000000},{"type":"boolean"}]}}}},"responseSchema":{"type":"json","example":{"model":{"boundsMm":{"max":[60,40,20],"min":[0,0,0],"size":[60,40,20]},"volumeMm3":14670.08559709728,"watertight":true,"triangleCount":1024},"tools":{"slicer":"PrusaSlicer-2.5.0+UNKNOWN based on Slic3r (with GUI support)","openscad":"OpenSCAD version 2021.01"},"checks":[{"code":"SOURCE_SELF_CONTAINED","detail":"No external file-reading OpenSCAD constructs were found","status":"passed"},{"code":"PARAMETERS_APPLIED","detail":"2 named source parameters were patched","status":"passed"},{"code":"CAD_COMPILE","detail":"OpenSCAD rendered a binary STL","status":"passed"},{"code":"MESH_VALIDITY","detail":"Binary STL has finite vertices and a closed manifold surface","status":"passed"},{"code":"MESH_TRIANGLES","detail":"1024 triangles inspected","status":"passed"},{"code":"MESH_FINITE_VERTICES","detail":"All STL vertex coordinates are finite","status":"passed"},{"code":"MESH_WATERTIGHT","detail":"Every undirected triangle edge appears exactly twice","status":"passed"},{"code":"MESH_ENCLOSED_VOLUME","detail":"14670.086 mm³ enclosed volume","status":"passed"},{"code":"REQUESTED_MAX_SIZE","detail":"60.000 × 40.000 × 20.000 mm against requested 220 × 220 × 250 mm","status":"passed"},{"code":"PRINTER_BED","detail":"60.000 × 40.000 × 20.000 mm against 220 × 220 × 250 mm printer bed","status":"passed"},{"code":"SLICER","detail":"PrusaSlicer produced bounded G-code with the fixed profile","status":"passed"},{"code":"EXTRUSION_TOOLPATH","detail":"G-code contains at least one extrusion move","status":"passed"},{"code":"PREVIEW","detail":"Headless OpenSCAD rendered preview.png","status":"passed"}],"status":"passed","profile":"fdm-pla-0.4","warnings":[],"artifacts":[{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/model.scad","name":"model.scad","sha256":"3176712575449a647e09f74ed99074c084688ffc82e9f53a6cfff368d3bfd0c2","mediaType":"text/plain; charset=utf-8","sizeBytes":793},{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/model.stl","name":"model.stl","sha256":"86ac96de376f5af3be97626666c6d31dc353b6c8dc9a3c69f1b4dc7fdfdb5ffb","mediaType":"model/stl","sizeBytes":51284},{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/model.gcode","name":"model.gcode","sha256":"b264a109a4493bde3e8521cd4538cedd3176dcbed6f283d14aa7177c130672f8","mediaType":"text/plain; charset=utf-8","sizeBytes":2135745},{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/profile.ini","name":"profile.ini","sha256":"9633ee7ff348f288ae084591a97ff0a5807ed78b764e3358a51043793c2ee5ce","mediaType":"text/plain; charset=utf-8","sizeBytes":500},{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/report.json","name":"report.json","sha256":"a4e0532cf81a3716cdc09098a4dceeed07354ecbee5e063749b6ee6e7af44eb9","mediaType":"application/json","sizeBytes":2276},{"href":"https://print.api.williamrobinson.dev/v1/print/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/preview.png","name":"preview.png","sha256":"c1aeedcd07a7919a542338a02aa2fd1208c1d242167561462f43cd089ead2ed0","mediaType":"image/png","sizeBytes":15339}],"expiresAt":"2026-09-14T20:29:00.000Z","limitations":["The service validates CAD, mesh closure, dimensions, and slicer output only; it does not verify physical printability, strength, tolerances, or material certification.","OpenSCAD coordinates are interpreted as millimetres; no automatic unit conversion is performed.","The fixed generic profile does not include user-supplied start, end, or custom G-code."],"recommendations":[{"code":"SUPPORT_REVIEW","message":"Support requirements and overhangs are not inferred from this mesh inspection; review the intended orientation before printing."}],"parametersApplied":{"wall":2.4,"height":20}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.05","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.05/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_uGoRD1DQNCqy4mzCFiK17","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.05","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Validates an OpenSCAD design for FDM 3D printability by compiling it, checking mesh integrity, slicing it, and returning detailed check results with artifacts.","exampleAgentPrompt":"Can you validate this OpenSCAD source code for FDM PLA printing on a 220×220×250mm bed and tell me if the mesh is watertight, fits the build volume, and slices cleanly? Here's the code: `cube([60,40,20]);`","exampleUseCases":[{"title":"Pre-print parametric part check","prompt":"I've got an OpenSCAD design for a custom bracket — can you validate it for FDM PLA printing with a 0.4mm nozzle on my 220×220×250mm printer? I want to make sure it's watertight and will actually slice. Here's the source: `module bracket(h=30, w=20) { difference() { cube([w,10,h]); translate([5,0,5]) cube([10,10,20]); } } bracket();`"},{"title":"PETG filament profile validation","prompt":"Before I send this enclosure lid design to my printer, can you run it through the PETG validation profile and check that it fits within a 300×300×400mm build volume? The OpenSCAD source is: `linear_extrude(3) square([80,60]);`"},{"title":"Parametric model override test","prompt":"I have an OpenSCAD file that takes parameters — can you validate it with wall_thickness set to 2.5 and height set to 50, using the FDM PLA profile, and confirm the mesh is valid and the model slices correctly? Source: `wall_thickness=3; height=40; difference(){ cube([40,40,height]); translate([wall_thickness,wall_thickness,0]) cube([40-wall_thickness*2,40-wall_thickness*2,height]); }`"}],"resultDescription":"Returns a JSON object with overall pass/fail status, per-check results (compilation, mesh watertightness, triangle count, volume, size-against-bed, slicer G-code validity, preview render), model bounds and volume in mm, tool versions used, any warnings, and signed artifact URLs for the compiled STL, G-code, and preview PNG.","failureModes":["OpenSCAD compilation error if source contains syntax errors or external imports (CAD_COMPILE check fails)","Non-manifold or non-watertight mesh returns MESH_WATERTIGHT failed status","Model exceeds requested maxSizeMm or printer bed dimensions (REQUESTED_MAX_SIZE or PRINTER_BED check fails)","Slicer produces no extrusion toolpath for degenerate geometry (EXTRUSION_TOOLPATH check fails)","Payment not attached returns HTTP 402 with payment-required header","Source exceeds 16 KiB limit returns validation error","Parameter override names conflict with reserved names or non-scalar expressions"],"whenToPreferThis":"Choose this endpoint when you have raw OpenSCAD source code and need an end-to-end printability verdict — covering compilation, mesh integrity, bed-fit, and slicing — before committing to physical printing. It is uniquely suited to parametric OpenSCAD workflows where you want to inject parameter overrides and confirm the resulting geometry is valid. Prefer it over generic STL validators when you need the full pipeline from source to G-code confirmed, or when you need PrusaSlicer-backed slice verification rather than mesh checks alone.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-12T12:30:23.146Z","isFirstParty":false,"canonicalSlug":"openscad-print-validation-b2ec00f5"}