{"openapi":"3.1.0","info":{"title":"Proof API","version":"0.1.0","description":"A fully local baking-science calculator toolkit: baker's percentages, hydration, recipe scaling, yeast conversion, oven temp/gas mark conversion, proofing-time estimates, starter feeding ratios, ingredient substitutions, pan-size conversion, and a baking glossary.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://proof.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/proof/docs"},"termsOfService":"https://connectorbay.com/proof/terms"},"servers":[{"url":"https://proof.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/proof/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/bakers_percentage":{"post":{"operationId":"bakers_percentage","summary":"Compute baker's percentages: each ingredient's weight as a percentage of total flour weight (the","description":"Compute baker's percentages: each ingredient's weight as a percentage of total flour weight (the\n    professional baking convention, where flour always sums to 100%), plus total dough weight and overall\n    hydration if a water-like ingredient is present. Use for \"what are the baker's percentages for my dough\",\n    \"is my formula's hydration too low\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ingredients":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"description":"Either a {ingredient_name: grams} object, or a list of {name, grams} objects (optionally with is_flour/is_liquid booleans to override name-based detection). Flour ingredients are auto-detected by 'flour' appearing in the name unless is_flour is given explicitly.","examples":[{"bread flour":500,"salt":10,"water":350,"yeast":5}],"title":"Ingredients"}},"required":["ingredients"],"title":"bakers_percentageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/hydration_calculator":{"post":{"operationId":"hydration_calculator","summary":"Dough hydration percentage from flour and liquid weights, with a plain-language note on what hydration","description":"Dough hydration percentage from flour and liquid weights, with a plain-language note on what hydration\n    range typically suits what bread style (lean bread ~60-65%, ciabatta/focaccia ~75-85%+, ...). Use for \"what's\n    my dough's hydration\", \"is 350g water with 500g flour a wet dough\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"flour_g":{"description":"Total flour weight in grams.","exclusiveMinimum":0,"title":"Flour G","type":"number"},"water_g":{"description":"Water weight in grams.","minimum":0,"title":"Water G","type":"number"},"other_liquid_g":{"default":0.0,"description":"Any other liquid weight in grams (milk, eggs counted as liquid, etc).","minimum":0,"title":"Other Liquid G","type":"number"}},"required":["flour_g","water_g"],"title":"hydration_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/scale_recipe":{"post":{"operationId":"scale_recipe","summary":"Scale a full ingredient list proportionally to a new target flour weight, or to a new serving count. Use","description":"Scale a full ingredient list proportionally to a new target flour weight, or to a new serving count. Use\n    for \"double this recipe\", \"scale this bread recipe to 1kg of flour\", \"make this serve 12 instead of 4\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ingredients":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"description":"Either a {ingredient_name: grams} object, or a list of {name, grams} objects (optionally with is_flour/is_liquid booleans to override name-based detection). Flour ingredients are auto-detected by 'flour' appearing in the name unless is_flour is given explicitly.","examples":[{"bread flour":500,"salt":10,"water":350,"yeast":5}],"title":"Ingredients"},"target_flour_g":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Scale so total flour weight becomes this many grams.","title":"Target Flour G"},"target_servings":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Scale to this many servings (requires current_servings).","title":"Target Servings"},"current_servings":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The recipe's current serving count, required when using target_servings.","title":"Current Servings"}},"required":["ingredients"],"title":"scale_recipeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/yeast_conversion":{"post":{"operationId":"yeast_conversion","summary":"Convert an amount of yeast between fresh (cake), active dry, and instant yeast, using a published weight","description":"Convert an amount of yeast between fresh (cake), active dry, and instant yeast, using a published weight\n    ratio (fresh:active dry:instant ≈ 2:1:0.75, cross-checked against King Arthur Baking and Red Star Yeast\n    guidance). Use for \"I have fresh yeast but the recipe wants active dry\", \"convert 7g instant to fresh\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"amount":{"description":"Amount of the source yeast type (grams, or any consistent unit).","minimum":0,"title":"Amount","type":"number"},"from_type":{"description":"fresh | active_dry | instant","title":"From Type","type":"string"},"to_type":{"description":"fresh | active_dry | instant","title":"To Type","type":"string"}},"required":["amount","from_type","to_type"],"title":"yeast_conversionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/oven_temp_convert":{"post":{"operationId":"oven_temp_convert","summary":"Convert an oven temperature between Fahrenheit, Celsius and UK gas mark, using the standard published","description":"Convert an oven temperature between Fahrenheit, Celsius and UK gas mark, using the standard published\n    gas-mark table. Use for \"what's gas mark 4 in Fahrenheit\", \"convert 180C to Fahrenheit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"temp":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The temperature (a number for F/C, or a gas mark like '4' or '1/2').","title":"Temp"},"from_unit":{"description":"f | c | gas","title":"From Unit","type":"string"},"to_unit":{"description":"f | c | gas","title":"To Unit","type":"string"}},"required":["temp","from_unit","to_unit"],"title":"oven_temp_convertArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/proofing_time_estimate":{"post":{"operationId":"proofing_time_estimate","summary":"A rough, clearly-caveated estimate of first-rise proofing time from dough/room temperature and yeast","description":"A rough, clearly-caveated estimate of first-rise proofing time from dough/room temperature and yeast\n    percentage, hand-derived from general published baking-science guidance (not a precise lab model — treat\n    the dough, not the clock, as the final judge). Use for \"how long will my dough take to double at 22C\",\n    \"will my dough rise faster with more yeast\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dough_temp_c":{"description":"The dough's own temperature in Celsius.","title":"Dough Temp C","type":"number"},"room_temp_c":{"description":"The ambient room/proofing temperature in Celsius.","title":"Room Temp C","type":"number"},"yeast_pct":{"description":"Yeast as a baker's percentage of flour weight, e.g. 1.0 for 1%.","exclusiveMinimum":0,"title":"Yeast Pct","type":"number"}},"required":["dough_temp_c","room_temp_c","yeast_pct"],"title":"proofing_time_estimateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/starter_feeding_ratio":{"post":{"operationId":"starter_feeding_ratio","summary":"Sourdough starter feeding calculator: given a starter amount and a target starter:flour:water ratio,","description":"Sourdough starter feeding calculator: given a starter amount and a target starter:flour:water ratio,\n    compute how much flour and water to add. Use for \"I have 50g starter, how much flour and water for a 1:2:2\n    feed\", \"feed my starter 1:5:5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"starter_g":{"description":"Grams of starter you're feeding (or keeping back to feed).","exclusiveMinimum":0,"title":"Starter G","type":"number"},"target_ratio":{"default":"1:1:1","description":"starter:flour:water ratio, e.g. '1:1:1' or '1:5:5'.","title":"Target Ratio","type":"string"}},"required":["starter_g"],"title":"starter_feeding_ratioArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/substitution_guide":{"post":{"operationId":"substitution_guide","summary":"Common baking ingredient substitutions (buttermilk, cake flour, egg replacements, leaveners, sweeteners,","description":"Common baking ingredient substitutions (buttermilk, cake flour, egg replacements, leaveners, sweeteners,\n    dairy, chocolate/cocoa, thickeners, and more) with ratios and notes. Use for \"what can I use instead of\n    buttermilk\", \"substitute for cake flour\", \"egg replacement for baking\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ingredient":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An ingredient to find a substitute for; omit to list all covered ingredients.","title":"Ingredient"}},"title":"substitution_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/pan_size_convert":{"post":{"operationId":"pan_size_convert","summary":"Convert a recipe between pan shapes/sizes using real area-ratio geometry — e.g. a 9-inch round pan's","description":"Convert a recipe between pan shapes/sizes using real area-ratio geometry — e.g. a 9-inch round pan's\n    batter scaled for an 8x8 square pan. Omit target_dimensions to get the closest common pan size in the\n    target shape suggested automatically. Use for \"convert my 9-inch round cake recipe to a 9x13 pan\", \"what\n    square pan is closest to a 10-inch round\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"shape":{"description":"round | square | rectangle","title":"Shape","type":"string"},"dimensions":{"additionalProperties":{"type":"number"},"description":"round: {diameter}; square: {side}; rectangle: {length, width}.","examples":[{"diameter":9}],"title":"Dimensions","type":"object"},"target_shape":{"description":"round | square | rectangle","title":"Target Shape","type":"string"},"target_dimensions":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"Same shape as target_shape's dimensions; omit to get the closest common pan size suggested instead.","title":"Target Dimensions"},"unit":{"default":"in","description":"in | cm — only affects the suggested-size catalog when target_dimensions is omitted; the scale factor itself is unit-independent.","title":"Unit","type":"string"}},"required":["shape","dimensions","target_shape"],"title":"pan_size_convertArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/baking_glossary":{"post":{"operationId":"baking_glossary","summary":"Definitions of common baking terms (autolyse, lamination, gluten development, oven spring, Maillard","description":"Definitions of common baking terms (autolyse, lamination, gluten development, oven spring, Maillard\n    reaction, retarding, scoring, windowpane test, poolish, biga, levain, degassing, blind baking, tempering,\n    creaming method). Use for \"what's autolyse\", \"what does oven spring mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"baking_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}