{"openapi":"3.1.0","info":{"title":"Aquascape API","version":"1.0.0","description":"Planted-aquarium and aquascaping maths as an API, computed locally and deterministically — the dosing and water numbers a high-tech planted tank runs on, not the rolls of a dice. The co2 endpoint gives the dissolved CO2 concentration from pH and carbonate hardness using the classic relationship CO2 (ppm) ≈ 3 × KH (dKH) × 10^(7 − pH), and flags it against the 15–30 ppm window plants want — at pH 6.6 and KH 4 you are at about 30 ppm, the top of the safe zone, while pH 7.0 and KH 3 is a carbon-limited 9 ppm. The fertilizer endpoint turns a dry-salt dose into the nutrient ppm it adds, the heart of Estimative Index dosing: ppm = grams × the nutrient mass fraction × 1000 ÷ tank litres, so 1 g of KNO3 in 100 litres adds 6.1 ppm nitrate and 3.9 ppm potassium, and it knows KNO3, KH2PO4, K2SO4, MgSO4 (Epsom) and Ca(NO3)2. The substrate endpoint sizes the substrate from the footprint and target depth — a 60 × 30 cm tank at 6 cm deep needs 10.8 litres, two 9-litre aquasoil bags. Everything is computed locally and deterministically, so it is instant and private. Ideal for aquascaping and planted-tank apps, fertiliser-dosing calculators, CO2-rig tools, and aquarium-shop and hobby sites. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 compute endpoints. For a tank water volume or fish stocking use an aquarium API; for pool chemistry use a pool API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/aquascape-api","description":"oanor gateway"}],"tags":[{"name":"Aquascape"},{"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/co2":{"get":{"operationId":"get_v1_co2","tags":["Aquascape"],"summary":"Dissolved CO2 from pH and KH","description":"","parameters":[{"name":"ph","in":"query","required":true,"description":"Tank pH","schema":{"type":"string"},"example":"6.6"},{"name":"kh_dkh","in":"query","required":true,"description":"Carbonate hardness in dKH","schema":{"type":"string"},"example":"4"}],"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/fertilizer":{"get":{"operationId":"get_v1_fertilizer","tags":["Aquascape"],"summary":"Nutrient ppm from a dry-salt dose","description":"","parameters":[{"name":"salt","in":"query","required":true,"description":"kno3 | kh2po4 | k2so4 | mgso4 | cano3","schema":{"type":"string"},"example":"kno3"},{"name":"grams","in":"query","required":true,"description":"Grams dosed","schema":{"type":"string"},"example":"1"},{"name":"tank_liters","in":"query","required":true,"description":"Net tank volume in litres","schema":{"type":"string"},"example":"100"}],"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/substrate":{"get":{"operationId":"get_v1_substrate","tags":["Aquascape"],"summary":"Substrate volume and bags","description":"","parameters":[{"name":"length_cm","in":"query","required":true,"description":"Footprint length in cm","schema":{"type":"string"},"example":"60"},{"name":"width_cm","in":"query","required":true,"description":"Footprint width in cm","schema":{"type":"string"},"example":"30"},{"name":"depth_cm","in":"query","required":false,"description":"Target depth in cm (default 6)","schema":{"type":"string"},"example":"6"},{"name":"bag_liters","in":"query","required":false,"description":"Bag size in litres (default 9)","schema":{"type":"string"},"example":"9"}],"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":300,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":520,"monthly_call_quota":9000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1740,"monthly_call_quota":60000,"rps_limit":14,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5180,"monthly_call_quota":210000,"rps_limit":34,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/aquascape-api"}