{"openapi":"3.1.0","info":{"title":"Standing Wave API","version":"1.0.0","description":"Standing-wave and resonance maths for strings and air columns as an API, computed locally and deterministically. The string endpoint models a string fixed at both ends: from its length and the wave speed — given directly or as the tension and the linear mass density (which you can supply directly, or have computed from a mass and length, or from a wire diameter and material density) — it returns the wave speed v = √(T/μ), the fundamental frequency f₁ = v/(2L) and the harmonic series f_n = n·f₁, each with its wavelength and node and antinode count; it can also solve the tension needed to tune the string to a target fundamental. The pipe endpoint does the same for an air column: an open pipe (both ends open) resonates at all harmonics f_n = n·v/(2L) while a closed (stopped) pipe resonates only at the odd harmonics f_n = (2n−1)·v/(4L), with the speed of sound given directly or worked out from the air temperature, v = 331.3·√(1 + θ/273.15). The harmonics endpoint generates the harmonic series from a fundamental frequency, or from a wave speed and a length, for a string, an open pipe or a closed pipe. Everything is computed locally and deterministically, so it is instant and private. Ideal for musical-instrument and luthier tools, acoustics and audio apps, organ-pipe and wind-instrument design, and physics education. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is mechanical standing waves and resonance; for note-to-frequency music theory use a music-note API and for electromagnetic wavelength λ = c/f use a wavelength API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/standingwave-api","description":"oanor gateway"}],"tags":[{"name":"Standing Wave"},{"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/harmonics":{"get":{"operationId":"get_v1_harmonics","tags":["Standing Wave"],"summary":"Harmonic series","description":"","parameters":[{"name":"fundamental","in":"query","required":false,"description":"Fundamental frequency (Hz)","schema":{"type":"string"},"example":"100"},{"name":"wave_speed","in":"query","required":false,"description":"Or wave speed (m/s) with length","schema":{"type":"string"}},{"name":"length","in":"query","required":false,"description":"Length (m)","schema":{"type":"string"}},{"name":"system","in":"query","required":false,"description":"string | open | closed","schema":{"type":"string"},"example":"string"},{"name":"harmonics","in":"query","required":false,"description":"Number of harmonics (default 6)","schema":{"type":"string"},"example":"6"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"system":"string / open pipe (all harmonics)","formula":"f_n = n·f₁ (all harmonics).","harmonics":[{"index":1,"frequency_hz":100,"harmonic_number":1},{"index":2,"frequency_hz":200,"harmonic_number":2},{"index":3,"frequency_hz":300,"harmonic_number":3},{"index":4,"frequency_hz":400,"harmonic_number":4},{"index":5,"frequency_hz":500,"harmonic_number":5},{"index":6,"frequency_hz":600,"harmonic_number":6}],"fundamental_frequency_hz":100},"meta":{"timestamp":"2026-06-04T10:18:52.501Z","request_id":"2965a633-c33b-4256-babf-b642b92e1540"},"status":"ok","message":"Harmonic series","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/pipe":{"get":{"operationId":"get_v1_pipe","tags":["Standing Wave"],"summary":"Air-column resonance","description":"","parameters":[{"name":"length","in":"query","required":true,"description":"Pipe length (m)","schema":{"type":"string"},"example":"0.5"},{"name":"type","in":"query","required":false,"description":"open (open-open) or closed (stopped)","schema":{"type":"string"},"example":"open"},{"name":"speed_of_sound","in":"query","required":false,"description":"Speed of sound (m/s)","schema":{"type":"string"}},{"name":"temperature","in":"query","required":false,"description":"Or air temperature (°C) → speed","schema":{"type":"string"},"example":"20"},{"name":"harmonics","in":"query","required":false,"description":"Number of harmonics (default 6)","schema":{"type":"string"},"example":"6"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"system":"open pipe (both ends open — all harmonics)","formula":"f_n = n·v/(2L); open pipes resonate at all harmonics.","length_m":0.5,"harmonics":[{"index":1,"nodes":2,"antinodes":1,"frequency_hz":343.214623,"wavelength_m":1,"harmonic_number":1},{"index":2,"nodes":3,"antinodes":2,"frequency_hz":686.429245,"wavelength_m":0.5,"harmonic_number":2},{"index":3,"nodes":4,"antinodes":3,"frequency_hz":1029.643868,"wavelength_m":0.33333333,"harmonic_number":3},{"index":4,"nodes":5,"antinodes":4,"frequency_hz":1372.858491,"wavelength_m":0.25,"harmonic_number":4},{"index":5,"nodes":6,"antinodes":5,"frequency_hz":1716.073113,"wavelength_m":0.2,"harmonic_number":5},{"index":6,"nodes":7,"antinodes":6,"frequency_hz":2059.287736,"wavelength_m":0.16666667,"harmonic_number":6}],"speed_source":"air at 20°C","speed_of_sound_ms":343.214623,"fundamental_frequency_hz":343.214623,"fundamental_wavelength_m":1},"meta":{"timestamp":"2026-06-04T10:18:52.599Z","request_id":"ff2eb46f-fef4-4516-8fbd-ad476e2472d6"},"status":"ok","message":"Air-column resonance","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/string":{"get":{"operationId":"get_v1_string","tags":["Standing Wave"],"summary":"Vibrating-string harmonics","description":"","parameters":[{"name":"length","in":"query","required":true,"description":"String length (m)","schema":{"type":"string"},"example":"0.65"},{"name":"tension","in":"query","required":false,"description":"Tension (N)","schema":{"type":"string"},"example":"80"},{"name":"linear_density","in":"query","required":false,"description":"Linear mass density μ (kg/m)","schema":{"type":"string"},"example":"0.0005"},{"name":"mass","in":"query","required":false,"description":"Or mass to derive μ (kg)","schema":{"type":"string"}},{"name":"diameter","in":"query","required":false,"description":"Or wire diameter (m) with density","schema":{"type":"string"}},{"name":"material_density","in":"query","required":false,"description":"Material density (kg/m³)","schema":{"type":"string"}},{"name":"target_frequency","in":"query","required":false,"description":"Solve tension for this fundamental (Hz)","schema":{"type":"string"}},{"name":"harmonics","in":"query","required":false,"description":"Number of harmonics (default 6)","schema":{"type":"string"},"example":"6"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"system":"string (fixed at both ends)","formula":"v = √(T/μ); f_n = n·v/(2L); λ_n = 2L/n.","length_m":0.65,"harmonics":[{"index":1,"nodes":2,"antinodes":1,"frequency_hz":307.692308,"wavelength_m":1.3,"harmonic_number":1},{"index":2,"nodes":3,"antinodes":2,"frequency_hz":615.384615,"wavelength_m":0.65,"harmonic_number":2},{"index":3,"nodes":4,"antinodes":3,"frequency_hz":923.076923,"wavelength_m":0.43333333,"harmonic_number":3},{"index":4,"nodes":5,"antinodes":4,"frequency_hz":1230.769231,"wavelength_m":0.325,"harmonic_number":4},{"index":5,"nodes":6,"antinodes":5,"frequency_hz":1538.461538,"wavelength_m":0.26,"harmonic_number":5},{"index":6,"nodes":7,"antinodes":6,"frequency_hz":1846.153846,"wavelength_m":0.21666667,"harmonic_number":6}],"tension_n":80,"wave_speed_ms":400,"linear_density_kg_m":0.0005,"linear_density_source":"given","fundamental_frequency_hz":307.692308,"fundamental_wavelength_m":1.3},"meta":{"timestamp":"2026-06-04T10:18:52.706Z","request_id":"e851d804-f5ac-4f82-99cb-be4362a7ed2c"},"status":"ok","message":"Vibrating-string harmonics","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":"standingwave","note":"Standing-wave / resonance maths (strings & air columns) — computed locally and deterministically, no key, no third-party service.","endpoints":["/v1/string","/v1/pipe","/v1/harmonics","/v1/meta"]},"meta":{"timestamp":"2026-06-04T10:18:52.804Z","request_id":"a4b609a0-0c54-467d-819d-bcd12da16a3a"},"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":500,"monthly_call_quota":30000,"rps_limit":5,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1500,"monthly_call_quota":200000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":4900,"monthly_call_quota":1500000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/standingwave-api"}