{"openapi":"3.1.0","info":{"title":"Ice Cream API","version":"1.0.0","description":"Ice-cream and gelato batch maths as an API, computed locally and deterministically — the overrun, yield and solids numbers a gelatiere, ice-cream maker or production planner balances a mix by. The overrun endpoint measures the air whipped into the mix during freezing by the weight method: from the same container filled first with mix and then with frozen ice cream, overrun = (mix weight − frozen weight) ÷ frozen weight × 100 — a cup that drops from 1000 g to 625 g ran 60 % overrun. Dense gelato sits around 20–35 %, premium ice cream 25–50 %, soft-serve and economy tubs 50–100 %+; more air means a lighter, cheaper, faster-melting product. The yield endpoint turns a mix volume and an overrun into the frozen volume (mix × (1 + overrun/100)) and the number of scoops at a given scoop size, so 2 litres of mix at 60 % overrun yields 3.2 litres and about 53 sixty-millilitre scoops — which is why overrun is a direct cost lever. The total-solids endpoint balances a recipe: total solids (sugar + fat + milk-solids-not-fat + other) as a percent of the mix weight, with the fat, sugar, MSNF and water percentages — a typical ice cream runs 36–42 % total solids, gelato lower in fat, and balancing solids against water is what keeps the texture smooth rather than icy. Everything is computed locally and deterministically, so it is instant and private. Ideal for gelateria and creamery tools, recipe-balancing apps, and food-production calculators. Pure local computation — no key, no third-party service, instant. 3 compute endpoints. For general cooking measure conversions use a cooking API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/icecream-api","description":"oanor gateway"}],"tags":[{"name":"IceCream"},{"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/overrun":{"get":{"operationId":"get_v1_overrun","tags":["IceCream"],"summary":"Overrun from mix and frozen weights","description":"","parameters":[{"name":"mix_weight_g","in":"query","required":true,"description":"Mix weight in the container (g)","schema":{"type":"string"},"example":"1000"},{"name":"frozen_weight_g","in":"query","required":true,"description":"Frozen weight, same container (g)","schema":{"type":"string"},"example":"625"}],"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/total-solids":{"get":{"operationId":"get_v1_total_solids","tags":["IceCream"],"summary":"Total-solids balance of a mix","description":"","parameters":[{"name":"water_g","in":"query","required":false,"description":"Water (g)","schema":{"type":"string"},"example":"600"},{"name":"sugar_g","in":"query","required":false,"description":"Sugar (g)","schema":{"type":"string"},"example":"200"},{"name":"fat_g","in":"query","required":false,"description":"Fat (g)","schema":{"type":"string"},"example":"100"},{"name":"msnf_g","in":"query","required":false,"description":"Milk solids-not-fat (g)","schema":{"type":"string"},"example":"90"},{"name":"other_solids_g","in":"query","required":false,"description":"Other solids (g)","schema":{"type":"string"},"example":"10"}],"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/yield":{"get":{"operationId":"get_v1_yield","tags":["IceCream"],"summary":"Frozen volume and scoops","description":"","parameters":[{"name":"mix_volume_ml","in":"query","required":true,"description":"Mix volume (ml)","schema":{"type":"string"},"example":"2000"},{"name":"overrun_pct","in":"query","required":true,"description":"Overrun (%)","schema":{"type":"string"},"example":"60"},{"name":"scoop_ml","in":"query","required":false,"description":"Scoop size (ml, default 60)","schema":{"type":"string"},"example":"60"}],"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":6600,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":680,"monthly_call_quota":57000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2280,"monthly_call_quota":242000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7300,"monthly_call_quota":1120000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/icecream-api"}