{"openapi":"3.1.0","info":{"title":"CNC Surface Finish API","version":"1.0.0","description":"CNC surface-finishing maths as an API, computed locally and deterministically — the scallop, stepover and pass numbers a CNC machinist dials in for a smooth finish. The scallop endpoint gives the cusp height a ball-nose tool leaves between passes, h = R − √(R² − (stepover/2)²), so a half-inch ball at a 0.05-inch stepover leaves about a 1.25-thou ridge — tighter stepover, smaller cusp, far more passes. The stepover endpoint inverts it: the stepover for a target scallop height, 2·√(R² − (R−h)²), reported also as a percent of tool diameter (fine finishing runs ~4–10 %) so it carries across jobs — and a bigger finishing ball reaches the same finish at a wider, faster stepover. The passes endpoint turns a surface into work: passes = width ÷ stepover rounded up plus one, the total cutting travel, and the cutting time at a given feed rate — surfacing a 4×6-inch area at a 0.05-inch stepover is 81 passes and 486 inches of travel, under five minutes at 100 ipm. Everything is computed locally and deterministically, so it is instant and private. Ideal for CNC and CAM apps, machinist and toolpath calculators, maker and job-shop tools, and engineering aids. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 compute endpoints. For cutting speed, feed and rpm use a machining API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/cncfinish-api","description":"oanor gateway"}],"tags":[{"name":"CNC Finish"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/passes":{"get":{"operationId":"get_v1_passes","tags":["CNC Finish"],"summary":"Passes and time to surface an area","description":"","parameters":[{"name":"width_in","in":"query","required":true,"description":"Surface width in inches","schema":{"type":"string"},"example":"4"},{"name":"length_in","in":"query","required":true,"description":"Pass length in inches","schema":{"type":"string"},"example":"6"},{"name":"stepover_in","in":"query","required":true,"description":"Stepover in inches","schema":{"type":"string"},"example":"0.05"},{"name":"feed_ipm","in":"query","required":false,"description":"Feed rate in inches/min","schema":{"type":"string"},"example":"100"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Passes to cover a width = width ÷ stepover, rounded up, plus one to finish the far edge; total cutting travel = passes × the pass length. Halving the stepover doubles the passes and the time, which is why finish stepover is the big lever on a long surfacing job.","inputs":{"width_in":4,"length_in":6,"stepover_in":0.05},"passes":81,"total_travel_in":486,"cutting_time_min":4.86},"meta":{"timestamp":"2026-06-06T23:53:58.032Z","request_id":"ff2ebb1d-7ce2-485c-9990-366cee5dc4b1"},"status":"ok","message":"Passes & time","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/scallop":{"get":{"operationId":"get_v1_scallop","tags":["CNC Finish"],"summary":"Scallop height from stepover","description":"","parameters":[{"name":"tool_diameter_in","in":"query","required":true,"description":"Ball-nose diameter in inches","schema":{"type":"string"},"example":"0.5"},{"name":"stepover_in","in":"query","required":true,"description":"Stepover in inches","schema":{"type":"string"},"example":"0.05"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Scallop (cusp) height = R − √(R² − (stepover/2)²) for a ball-nose tool — the little ridge left between finishing passes. Tighter stepover means a smaller scallop and a smoother finish but far more passes and time. A 0.5-inch ball at 0.05-inch stepover leaves about a 1.25-thou cusp.","inputs":{"stepover_in":0.05,"tool_diameter_in":0.5},"scallop_height_in":0.001253,"scallop_height_thou":1.25},"meta":{"timestamp":"2026-06-06T23:53:58.127Z","request_id":"8e202115-3b47-4187-9d2e-db77f3de9469"},"status":"ok","message":"Scallop height","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/stepover":{"get":{"operationId":"get_v1_stepover","tags":["CNC Finish"],"summary":"Stepover for a target scallop","description":"","parameters":[{"name":"tool_diameter_in","in":"query","required":true,"description":"Ball-nose diameter in inches","schema":{"type":"string"},"example":"0.5"},{"name":"target_scallop_in","in":"query","required":true,"description":"Target scallop height in inches","schema":{"type":"string"},"example":"0.001"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Stepover for a target scallop = 2·√(R² − (R−h)²). Express it as a percent of the tool diameter to carry across jobs — fine finishing runs ~4–10 % of diameter. A bigger ball reaches the same finish at a wider stepover, so a large finishing ball is faster than a small one for the same smoothness.","inputs":{"tool_diameter_in":0.5,"target_scallop_in":0.001},"stepover_in":0.04468,"stepover_pct_of_dia":8.9},"meta":{"timestamp":"2026-06-06T23:53:58.224Z","request_id":"ea2562e4-483c-46c3-9af1-280cf5df3cbb"},"status":"ok","message":"Stepover","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"Inches & ipm, ball-nose tools. h = R − √(R²−(so/2)²); so = 2√(R²−(R−h)²); passes = ⌈width/stepover⌉+1. For cutting speed/feed/rpm use a machining API.","service":"cncfinish-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/passes":"Passes and travel to surface a width, with optional time at a feed.","GET /v1/scallop":"Scallop (cusp) height from tool diameter and stepover.","GET /v1/stepover":"Stepover for a target scallop height."},"description":"CNC surface-finishing maths: scallop height from a ball-nose and stepover, the stepover for a target finish, and the passes/time to surface an area."},"meta":{"timestamp":"2026-06-06T23:53:58.299Z","request_id":"93e551a8-2b9e-4b74-a49e-c7f3cd6b9dfd"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":500,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":545,"monthly_call_quota":13100,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1770,"monthly_call_quota":82500,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5200,"monthly_call_quota":266000,"rps_limit":36,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/cncfinish-api"}