{"openapi":"3.1.0","info":{"title":"Bolt Circle API","version":"1.0.0","description":"Bolt-circle (bolt pattern / PCD) geometry as an API, computed locally and deterministically. The coordinates endpoint lays out a set of equally spaced holes on a circle: from the bolt-circle diameter (or radius), the number of holes, an optional start angle, centre offset and direction, it returns the X and Y coordinate and angle of every hole, the angular step (360 ÷ number of holes) and the chord between adjacent holes — exactly what a CNC or drawing needs. The chord endpoint gives the straight-line distance between any two holes on the pattern using chord = 2·R·sin(central angle ÷ 2), taking the shorter way around. The diameter endpoint works in reverse: from a measured distance between two holes and the number of holes it recovers the bolt-circle diameter, so you can reverse-engineer an existing flange or wheel. Lengths are unit-agnostic — the output is in whatever unit you supply. Everything is computed locally and deterministically, so it is instant and private. Ideal for CNC and CAD tools, machining and fabrication apps, flange, wheel and hub design, and drilling-jig and robotics projects. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is bolt-circle geometry; for screw-thread pitch and tap drill use a thread API and for spur-gear geometry use a gear API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/boltcircle-api","description":"oanor gateway"}],"tags":[{"name":"BoltCircle"},{"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/chord":{"get":{"operationId":"get_v1_chord","tags":["BoltCircle"],"summary":"Distance between two holes","description":"","parameters":[{"name":"bolt_circle_diameter","in":"query","required":false,"description":"BCD (or radius)","schema":{"type":"string"},"example":"100"},{"name":"radius","in":"query","required":false,"description":"Or radius","schema":{"type":"string"}},{"name":"holes","in":"query","required":true,"description":"Number of holes","schema":{"type":"string"},"example":"4"},{"name":"hole_a","in":"query","required":false,"description":"First hole (default 1)","schema":{"type":"string"},"example":"1"},{"name":"hole_b","in":"query","required":false,"description":"Second hole (default 2)","schema":{"type":"string"},"example":"3"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Chord = 2·R·sin(central angle / 2). Central angle = (holes apart) × 360/N.","holes":4,"hole_a":1,"hole_b":3,"steps_apart":2,"adjacent_chord":70.71068,"chord_distance":100,"central_angle_deg":180,"bolt_circle_diameter":100},"meta":{"timestamp":"2026-06-04T01:59:06.132Z","request_id":"4e2d19c3-aa60-4c7e-8b10-b39759bc6c52"},"status":"ok","message":"Distance between two holes","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/coordinates":{"get":{"operationId":"get_v1_coordinates","tags":["BoltCircle"],"summary":"Hole positions on a bolt circle","description":"","parameters":[{"name":"bolt_circle_diameter","in":"query","required":false,"description":"BCD/PCD (or radius)","schema":{"type":"string"},"example":"100"},{"name":"radius","in":"query","required":false,"description":"Or radius","schema":{"type":"string"}},{"name":"holes","in":"query","required":true,"description":"Number of holes","schema":{"type":"string"},"example":"4"},{"name":"start_angle","in":"query","required":false,"description":"Start angle deg (default 0)","schema":{"type":"string"},"example":"0"},{"name":"center_x","in":"query","required":false,"description":"Centre X (default 0)","schema":{"type":"string"},"example":"0"},{"name":"center_y","in":"query","required":false,"description":"Centre Y (default 0)","schema":{"type":"string"},"example":"0"},{"name":"direction","in":"query","required":false,"description":"ccw|cw (default ccw)","schema":{"type":"string"},"example":"ccw"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Holes equally spaced by 360/N. x = cx + R·cos θ, y = cy + R·sin θ. Adjacent chord = 2·R·sin(π/N).","holes":4,"center":{"x":0,"y":0},"radius":50,"direction":"ccw","coordinates":[{"x":50,"y":0,"hole":1,"angle_deg":0},{"x":0,"y":50,"hole":2,"angle_deg":90},{"x":-50,"y":0,"hole":3,"angle_deg":180},{"x":0,"y":-50,"hole":4,"angle_deg":270}],"adjacent_chord":70.71068,"angle_step_deg":90,"start_angle_deg":0,"bolt_circle_diameter":100},"meta":{"timestamp":"2026-06-04T01:59:06.237Z","request_id":"54eb2292-92e3-49be-8bf9-d6bc8d5761cc"},"status":"ok","message":"Hole positions on a bolt circle","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/diameter":{"get":{"operationId":"get_v1_diameter","tags":["BoltCircle"],"summary":"BCD from a measured chord","description":"","parameters":[{"name":"holes","in":"query","required":true,"description":"Number of holes","schema":{"type":"string"},"example":"4"},{"name":"chord","in":"query","required":true,"description":"Measured distance between holes","schema":{"type":"string"},"example":"70.71"},{"name":"steps_apart","in":"query","required":false,"description":"Holes apart measured (default 1)","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"R = chord / (2·sin(central angle / 2)). Use steps_apart for non-adjacent measured holes.","holes":4,"radius":49.99952,"steps_apart":1,"adjacent_chord":70.71,"measured_chord":70.71,"central_angle_deg":90,"bolt_circle_diameter":99.99904},"meta":{"timestamp":"2026-06-04T01:59:06.328Z","request_id":"b03bd7ec-341a-4cae-8187-2edf93a32b69"},"status":"ok","message":"Bolt circle diameter from a chord","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":{"api":"boltcircle","note":"Bolt-circle (PCD) geometry — computed locally and deterministically, no key, no third-party service. Lengths are unit-agnostic (output matches input).","endpoints":["/v1/coordinates","/v1/chord","/v1/diameter","/v1/meta"]},"meta":{"timestamp":"2026-06-04T01:59:06.396Z","request_id":"c2b02f10-ce47-4b5e-a025-f2c221754edc"},"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":2000,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":900,"monthly_call_quota":20000,"rps_limit":5,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2400,"monthly_call_quota":150000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7500,"monthly_call_quota":1000000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/boltcircle-api"}