{"openapi":"3.1.0","info":{"title":"Mohr Circle Stress API","version":"1.0.0","description":"Mohr's circle and 2D (plane) stress transformation as an API, computed locally and deterministically. The principal endpoint takes a plane-stress state — the normal stresses σx and σy and the shear stress τxy — and returns the principal stresses σ1 and σ2 = (σx+σy)/2 ± √(((σx−σy)/2)² + τxy²), the maximum in-plane shear stress, the orientation of the principal and maximum-shear planes, the centre and radius of Mohr's circle, and the von Mises and Tresca equivalent stresses (treating plane stress with the third principal σ3 = 0). The transform endpoint rotates the stress state onto a plane at any angle θ, returning σx', σy' and τx'y' using the standard transformation equations, and confirms the σx+σy invariant. The safety endpoint computes the factor of safety against a material's yield strength under either the von Mises (distortion-energy) or the Tresca (maximum-shear) criterion, from a full stress state or from principal stresses directly. Everything is computed locally and deterministically, so it is instant and private. Ideal for mechanical, structural and aerospace engineering tools, finite-element pre- and post-processing, machine-design and stress-analysis apps, and engineering education. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is stress-state analysis; for fillet-weld throat sizing use a weld API and for helical-spring rates use a spring API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/mohr-api","description":"oanor gateway"}],"tags":[{"name":"Stress"},{"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/principal":{"get":{"operationId":"get_v1_principal","tags":["Stress"],"summary":"Principal stresses & Mohr circle","description":"","parameters":[{"name":"sigma_x","in":"query","required":true,"description":"Normal stress σx","schema":{"type":"string"},"example":"100"},{"name":"sigma_y","in":"query","required":true,"description":"Normal stress σy","schema":{"type":"string"},"example":"20"},{"name":"tau_xy","in":"query","required":false,"description":"Shear stress τxy (default 0)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"input":{"tau_xy":30,"sigma_x":100,"sigma_y":20},"formula":"σ1,2 = (σx+σy)/2 ± √(((σx−σy)/2)² + τxy²); τmax = R; θp = ½·atan2(2τxy, σx−σy).","sigma_1":110,"sigma_2":10,"mohr_circle":{"center":60,"radius":50},"tresca_stress":110,"von_mises_stress":105.356538,"max_in_plane_shear":50,"max_shear_angle_deg":-26.565051,"principal_angle_deg":18.434949,"sigma_3_plane_stress":0},"meta":{"timestamp":"2026-06-04T10:18:51.236Z","request_id":"e9d498a2-e6ed-4925-bf66-34b53f5c8567"},"status":"ok","message":"Principal stresses & Mohr 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/safety":{"get":{"operationId":"get_v1_safety","tags":["Stress"],"summary":"Factor of safety vs yield","description":"","parameters":[{"name":"yield_strength","in":"query","required":true,"description":"Yield strength Sy","schema":{"type":"string"},"example":"250"},{"name":"criterion","in":"query","required":false,"description":"von-mises | tresca (default von-mises)","schema":{"type":"string"},"example":"von-mises"},{"name":"sigma_x","in":"query","required":false,"description":"Normal stress σx","schema":{"type":"string"},"example":"100"},{"name":"sigma_y","in":"query","required":false,"description":"Normal stress σy","schema":{"type":"string"},"example":"20"},{"name":"tau_xy","in":"query","required":false,"description":"Shear stress τxy","schema":{"type":"string"},"example":"30"},{"name":"sigma_1","in":"query","required":false,"description":"Or principal σ1 directly","schema":{"type":"string"}},{"name":"sigma_2","in":"query","required":false,"description":"And principal σ2","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"formula":"FoS = Sy / σvm; σvm = √(σ1² − σ1σ2 + σ2²).","sigma_1":110,"sigma_2":10,"criterion":"von-mises","tresca_stress":110,"yield_strength":250,"factor_of_safety":2.372895,"von_mises_stress":105.356538,"equivalent_stress":105.356538},"meta":{"timestamp":"2026-06-04T10:18:51.336Z","request_id":"ecacc07f-a5e9-4917-933f-85ceb5e1b5c9"},"status":"ok","message":"Factor of safety","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/transform":{"get":{"operationId":"get_v1_transform","tags":["Stress"],"summary":"Stresses on a rotated plane","description":"","parameters":[{"name":"sigma_x","in":"query","required":true,"description":"Normal stress σx","schema":{"type":"string"},"example":"100"},{"name":"sigma_y","in":"query","required":true,"description":"Normal stress σy","schema":{"type":"string"},"example":"20"},{"name":"tau_xy","in":"query","required":false,"description":"Shear stress τxy (default 0)","schema":{"type":"string"},"example":"30"},{"name":"angle","in":"query","required":true,"description":"Rotation angle θ (degrees)","schema":{"type":"string"},"example":"30"},{"name":"angle_unit","in":"query","required":false,"description":"deg|rad (default deg)","schema":{"type":"string"},"example":"deg"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"input":{"angle":30,"tau_xy":30,"sigma_x":100,"sigma_y":20,"angle_unit":"deg"},"formula":"σx' = C + ((σx−σy)/2)·cos2θ + τxy·sin2θ; τx'y' = −((σx−σy)/2)·sin2θ + τxy·cos2θ.","tau_xy_prime":-19.641016,"sigma_x_prime":105.980762,"sigma_y_prime":14.019238,"sum_invariant":120},"meta":{"timestamp":"2026-06-04T10:18:51.424Z","request_id":"bbc5691a-92bc-47d4-af2b-8d2f574e9b98"},"status":"ok","message":"Rotated-plane stresses","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":"mohr","note":"Mohr's circle / 2D stress transformation — computed locally and deterministically, no key, no third-party service.","endpoints":["/v1/principal","/v1/transform","/v1/safety","/v1/meta"]},"meta":{"timestamp":"2026-06-04T10:18:51.498Z","request_id":"eec52f07-7f7b-46ac-8252-bfab2bdbb5b3"},"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":1500,"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":7400,"monthly_call_quota":1000000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/mohr-api"}