{"openapi":"3.1.0","info":{"title":"Jam & Preserve API","version":"1.0.0","description":"Jam and preserve maths as an API, computed locally and deterministically — the sugar, setting-point and yield numbers a jam maker, preserver or recipe app works a batch to. The sugar endpoint sets the sugar from the sugar-to-fruit ratio: a traditional full-sugar jam is 1:1, so 1 kg of fruit takes 1 kg of sugar for a 2 kg batch at 50 % sugar, while lower ratios (0.6–0.75) make a softer, fresher, less-sweet preserve that needs added pectin and keeps less well — the sugar both preserves and helps the gel. The setting-point endpoint gives the gel temperature adjusted for altitude: jam sets at about 4.5 °C (8 °F) above the temperature water boils at — 104.5 °C at sea level — but because water boils lower as you climb (roughly 1 °C per 285 m), the target falls to near 99 °C at 1500 m, so cooking to the sea-level figure up a mountain over-boils the batch. The yield endpoint boils the batch down to a target soluble-solids (Brix): jam keeps at about 65 % Brix, the finished weight = the solids (sugar plus the fruit's own ~10 % dry matter) ÷ the target Brix, and the rest evaporates as water — 1 kg sugar and 1 kg fruit boils down to about 1690 g of jam, losing roughly 310 g of water. Everything is computed locally and deterministically, so it is instant and private. Ideal for preserving and recipe tools, homestead and kitchen apps, and food-production calculators. Pure local computation — no key, no third-party service, instant. Gel chemistry, not canning safety. 3 compute endpoints. For processing-time altitude adjustment use a canning API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/jam-api","description":"oanor gateway"}],"tags":[{"name":"Jam"},{"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/setting-point":{"get":{"operationId":"get_v1_setting_point","tags":["Jam"],"summary":"Gel point adjusted for altitude","description":"","parameters":[{"name":"altitude_m","in":"query","required":false,"description":"Altitude (m, default 0)","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Jam gels at about 4.5 °C (8 °F) above the temperature water boils at — 104.5 °C at sea level. Because water boils lower as you climb (roughly 1 °C per 285 m), the setting point falls too: at 1500 m it is near 99 °C, not 104.5 °C. Cooking to the sea-level figure at altitude over-boils the jam; always set the thermometer target to the boil point for your elevation plus ~4.5 °C, or use the wrinkle/cold-plate test.","inputs":{"altitude_m":0},"jam_setting_point_c":104.5,"water_boiling_point_c":100},"meta":{"timestamp":"2026-06-07T08:17:51.829Z","request_id":"75ba93e1-51ab-4eea-b3e6-e66c0b5ac23e"},"status":"ok","message":"Setting point","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/sugar":{"get":{"operationId":"get_v1_sugar","tags":["Jam"],"summary":"Sugar from sugar-to-fruit ratio","description":"","parameters":[{"name":"fruit_weight_g","in":"query","required":true,"description":"Fruit weight (g)","schema":{"type":"string"},"example":"1000"},{"name":"sugar_ratio","in":"query","required":false,"description":"Sugar : fruit ratio (default 1.0)","schema":{"type":"string"},"example":"1.0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Jam sugar is set by the sugar-to-fruit ratio: a traditional full-sugar jam is 1:1 (equal sugar and fruit), so 1 kg of fruit takes 1 kg of sugar for a 2 kg batch at 50 % sugar. Lower ratios (0.6–0.75) make a softer, fresher, less-sweet preserve but need added pectin and shorter keeping; the sugar is what preserves and helps the set, so dropping it changes both shelf life and gel.","inputs":{"sugar_ratio":1,"fruit_weight_g":1000},"sugar_g":1000,"sugar_pct":50,"total_batch_g":2000},"meta":{"timestamp":"2026-06-07T08:17:51.931Z","request_id":"532ebaa7-2c00-4e8e-8f47-5d430e285bc5"},"status":"ok","message":"Sugar","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/yield":{"get":{"operationId":"get_v1_yield","tags":["Jam"],"summary":"Finished jam weight at a target Brix","description":"","parameters":[{"name":"sugar_g","in":"query","required":true,"description":"Sugar (g)","schema":{"type":"string"},"example":"1000"},{"name":"fruit_g","in":"query","required":true,"description":"Fruit (g)","schema":{"type":"string"},"example":"1000"},{"name":"fruit_solids_pct","in":"query","required":false,"description":"Fruit dry-matter (%, default 10)","schema":{"type":"string"},"example":"10"},{"name":"target_brix_pct","in":"query","required":false,"description":"Target soluble solids (%, default 65)","schema":{"type":"string"},"example":"65"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Jam keeps when boiled down to about 65 % soluble solids (Brix). The solids are the sugar plus the fruit's own dry matter (~10 % for most fruit); the finished weight = solids ÷ (target Brix/100), and the rest boils off as water. 1 kg sugar + 1 kg fruit (~1100 g solids) boils down to about 1690 g of jam at 65 %, evaporating roughly 310 g of water. Higher Brix keeps longer but sets firmer and sweeter.","inputs":{"fruit_g":1000,"sugar_g":1000,"target_brix_pct":65,"fruit_solids_pct":10},"soluble_solids_g":1100,"starting_weight_g":2000,"final_jam_weight_g":1692.31,"water_to_evaporate_g":307.69},"meta":{"timestamp":"2026-06-07T08:17:52.021Z","request_id":"d28e2fab-ca69-4998-8ddc-3514fc32024a"},"status":"ok","message":"Yield","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":{"notes":"Grams, metres, °C, % Brix. sugar = fruit·ratio; boil = 100 − alt/285; set = boil + 4.5; yield = solids/(brix/100). Gel chemistry, not canning safety — for processing-time altitude adjustment use a canning API.","service":"jam-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/sugar":"Sugar weight and batch total from a sugar-to-fruit ratio.","GET /v1/yield":"Finished jam weight and water to evaporate at a target Brix.","GET /v1/setting-point":"Water boiling point and jam gel point for an altitude."},"description":"Jam / preserve maths: sugar from a sugar-to-fruit ratio, altitude-adjusted setting point, and finished yield at a target Brix."},"meta":{"timestamp":"2026-06-07T08:17:52.100Z","request_id":"f6b1156d-4e2e-44ef-98b6-5236e038fa12"},"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":6300,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":660,"monthly_call_quota":55000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2260,"monthly_call_quota":239000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7250,"monthly_call_quota":1090000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/jam-api"}