{"openapi":"3.1.0","info":{"title":"Hammock Hang API","version":"1.0.0","description":"Hammock-hang maths as an API, computed locally and deterministically — the suspension-force, ridgeline and strap-height numbers a camper or hammock hanger sets up by. It all comes back to the 30-degree rule. The force endpoint shows why: the tension in each suspension line is the occupant weight ÷ (2 × sin of the hang angle), so at a 30° hang each strap carries about one body weight, but flatten the hang to 15° and it jumps to roughly 1.9 times — which is what over-stresses straps, trees and your back when people pull a hammock drum-tight. The ridgeline endpoint sizes a structural ridgeline at about 83 % of the hammock length, the fixed line that reproduces that ~30° lay and the right sag on any pair of trees. The strapheight endpoint estimates how high to attach the straps from the distance between the trees and the seat height you want, since trees farther apart need higher anchor points to hold the angle. Everything is computed locally and deterministically, so it is instant and private. Ideal for camping, backpacking, outdoor-gear and hammock app developers, hang-calculator and trip-planning tools, and adventure software. Pure local computation — no key, no third-party service, instant. Weight and lengths in your own unit. Live, nothing stored. 3 compute endpoints.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/hammock-api","description":"oanor gateway"}],"tags":[{"name":"Hammock"},{"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/force":{"get":{"operationId":"get_v1_force","tags":["Hammock"],"summary":"Suspension force at an angle","description":"","parameters":[{"name":"weight","in":"query","required":true,"description":"Occupant weight","schema":{"type":"string"},"example":"200"},{"name":"hang_angle_deg","in":"query","required":false,"description":"Hang angle from horizontal (default 30)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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/ridgeline":{"get":{"operationId":"get_v1_ridgeline","tags":["Hammock"],"summary":"Structural ridgeline length","description":"","parameters":[{"name":"hammock_length","in":"query","required":true,"description":"Hammock length","schema":{"type":"string"},"example":"132"},{"name":"ridgeline_percent","in":"query","required":false,"description":"Ridgeline % of length (default 83)","schema":{"type":"string"},"example":"83"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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/strapheight":{"get":{"operationId":"get_v1_strapheight","tags":["Hammock"],"summary":"Strap attach height","description":"","parameters":[{"name":"tree_distance","in":"query","required":true,"description":"Distance between trees","schema":{"type":"string"},"example":"144"},{"name":"sit_height","in":"query","required":false,"description":"Desired seat height (default 18)","schema":{"type":"string"},"example":"18"},{"name":"hang_angle_deg","in":"query","required":false,"description":"Hang angle (default 30)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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"},"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":6960,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":436,"monthly_call_quota":55300,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1196,"monthly_call_quota":227300,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3792,"monthly_call_quota":1337000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/hammock-api"}