Sous Vide Poultry Pasteurization Time Calculator
This sous vide poultry pasteurization time calculator gives a repeatable planning estimate from two measurements: the water-bath temperature in Celsius and the food's maximum thickness in millimeters.
Run — free
It uses a fixed table rather than a changing model or an opaque formula. Choose one supported temperature, measure the thickest part of the sealed poultry, and receive the table time in minutes and hours. The calculator rounds thickness upward to the next available band, making the lookup explicit and reproducible.
Measure thickness and select the bath temperature
Set the water bath to one of the temperatures offered by the calculator, then measure the poultry at its thickest point before it enters the bath. Thickness matters more than weight because heat must travel from the surface to the center. A wide, thin portion can heat faster than a compact piece with the same mass. Enter the maximum thickness in millimeters, including both sides of a folded or stacked piece if it will remain folded or stacked while cooking. Do not enter the bag width, the package weight, or an average taken from several portions. If pieces differ, calculate using the thickest piece or separate the batch into groups. The accepted temperature rows are 55, 57.5, 60, 62.5, 65, 67.5, and 70 degrees Celsius. The table is limited to pieces no thicker than 60 millimeters. Keeping the temperature on an exact supported row avoids giving interpolation a precision that the underlying schedule does not claim.
Understand the fixed-table lookup
The calculator first validates both values, finds the exact bath-temperature row, and then rounds the entered thickness upward to the next ten-millimeter band. For example, a 28-millimeter piece uses the 30-millimeter column, while a 30-millimeter piece remains in that same column. The returned thickness_band_mm field shows which column was used, so the estimate can be audited later. The response also gives the scheduled time in whole minutes and in hours rounded to two decimal places. No network request, random value, current date, or user history affects the answer. Identical inputs therefore produce identical outputs. The time represents the complete fixed schedule associated with that temperature and thickness band, including the table's allowance for the center to heat and remain under the pasteurization schedule. It is not merely a holding time that should be started after an unmeasured core temperature is reached. Values between table bands are deliberately rounded up rather than averaged down.
Apply the estimate safely in a real kitchen
Treat the result as a planning estimate for intact poultry handled with sound food-safety practices, not as a substitute for a validated process in a regulated kitchen. Begin timing only after the bath has recovered to its set temperature, keep pieces fully submerged, avoid crowding that blocks circulation, and use intact heat-safe bags with as little trapped air as practical. The calculator cannot inspect bath calibration, starting temperature, pathogens, stuffing, bones, mechanically tenderized meat, bag contact, chilling, storage, or cross-contamination. Those conditions can require a different process or expert review. A reliable thermometer and a properly circulating bath remain essential. Do not use the table for temperatures outside the listed rows, food thicker than 60 millimeters, whole birds, rolled preparations, or non-poultry foods. If local health rules, your equipment manufacturer, or an approved food-safety plan specifies a longer time or higher temperature, follow that requirement. After cooking, serve promptly or chill rapidly using an appropriate controlled method before refrigerated storage.
What you can do with it
Plan chicken breast service
Estimate a repeatable bath schedule from the thickest breast portion before coordinating the rest of a meal.
Standardize batch instructions
Record one supported temperature, thickness band, and table time for similarly portioned poultry.
Check portioning decisions
Compare table bands to see whether dividing an unusually thick piece produces a more practical schedule.
FAQ
What does an API request cost?
Each API request costs $0.002; the same deterministic lookup can also run in the browser.
Why must I choose one of the listed temperatures?
The capability uses fixed table rows and does not invent interpolated schedules between them.
How is thickness rounded?
Thickness is rounded upward to the next 10-millimeter band, up to the 60-millimeter limit.
Does the result include heating time?
Yes. It returns the complete time from the fixed schedule, not a separate hold time to begin after the center heats.
Can I use it for a whole chicken or stuffed poultry?
No. Whole birds, stuffed products, rolled preparations, and pieces thicker than 60 millimeters need a separately validated process.
Does this guarantee food safety?
No. Safe results also depend on accurate equipment, handling, packaging, circulation, chilling, and compliance with applicable food-safety guidance.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/cook/sousvide-pasteurize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"bath_temperature_c":60,"thickness_mm":28}'const res = await fetch("https://api.kit.forhosting.com/cook/sousvide-pasteurize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"bath_temperature_c": 60,
"thickness_mm": 28
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/cook/sousvide-pasteurize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"bath_temperature_c": 60,
"thickness_mm": 28
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/cook/sousvide-pasteurize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"bath_temperature_c":60,"thickness_mm":28}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"bath_temperature_c":60,"thickness_mm":28}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/cook/sousvide-pasteurize", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"bath_temperature_c": 60,
"thickness_mm": 28
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "cook.sousvide_pasteurize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |