Awatif linear frame solver API POST https://awatif.co/api/solve Content-Type: application/json No API key. Free demo endpoint: linear static analysis of 3D frames. Limits: at most 100 nodes and 200 elements per call, 1 MB body, 2-node frame elements only. Units: any consistent set, returned as sent. Recommended: m, N, N·m, Pa. Request body { "nodes": [[x, y, z], ...], // node i = index i "elements": [[startNode, endNode], ...], // element i = index i "supports": [[node, [ux, uy, uz, rx, ry, rz]], ...], // true = restrained "loads": [[node, [Fx, Fy, Fz, Mx, My, Mz]], ...], "elementsProps": [[element, { "elasticity", "area", "momentInertiaZ", "momentInertiaY", "shearModulus", "torsionalConstant" }], ...], // one per element "releases": [[element, [startMy, startMz, endMy, endMz]], ...] // optional, true = moment released } Response 200 { "positions": [x1, y1, z1, x2, y2, z2, ...], // deformed node positions, flat "internalForces": [[element, { "N": [start, end], "Vy": [...], "Vz": [...], "Mx": [...], "My": [...], "Mz": [...] }], ...], "iterationCount": 1 // linear: always one solve } Section forces: N compression-positive; My and Mz sagging-negative, Vy and Vz signed with them. Local axes follow the Awatif convention. Errors: {"error": "..."} with 400 (invalid model), 413 (body too large), 422 (unstable model: check supports and releases), 405 (other methods). Example: a 6 m simply supported beam, 1 kN/m lumped to the midspan node curl -X POST https://awatif.co/api/solve -H 'Content-Type: application/json' -d '{ "nodes": [[0,0,0],[3,0,0],[6,0,0]], "elements": [[0,1],[1,2]], "supports": [[0,[true,true,true,true,false,false]],[2,[false,true,true,false,false,false]]], "loads": [[1,[0,0,-3000,0,0,0]]], "elementsProps": [[0,{"elasticity":2.1e11,"area":0.00538,"momentInertiaZ":8.36e-5,"momentInertiaY":6.04e-6,"shearModulus":8.1e10,"torsionalConstant":2e-7}], [1,{"elasticity":2.1e11,"area":0.00538,"momentInertiaZ":8.36e-5,"momentInertiaY":6.04e-6,"shearModulus":8.1e10,"torsionalConstant":2e-7}]] }'