RER substrate calculator
At an RER of 0.85, half of your energy comes from carbohydrate and half from fat. Enter one measured respiratory exchange ratio between 0.70 and 1.00 and get the fuel split in percent. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Rer
- 0.85
- Carbohydrates (%)
- 50
- Fat (%)
- 50
- Carb fraction
- 0.5
- Fat fraction
- 0.5
Respiratory exchange ratio, often written RER and defined as carbon dioxide production divided by oxygen consumption, is a core readout of indirect calorimetry in exercise labs, metabolic carts, and many wearable-linked research protocols. When protein oxidation is neglected or already accounted for, RER between pure fat oxidation near zero point seven and pure carbohydrate oxidation near one maps linearly onto the fraction of energy coming from each substrate. Coaches, sports scientists, and physiology students need that split quickly and reproducibly from a single measured number. This respiratory exchange ratio substrate calculator accepts a measured RER, validates that it sits in the classic non-protein window from zero point seven zero to one point zero zero, and returns carbohydrate and fat percentages plus matching fractions with a transparent formula string.
What RER substrate percentages mean and how the linear model works
Indirect calorimetry measures oxygen uptake and carbon dioxide output at the mouth or mask. Their ratio, RER equals VCO2 over VO2, reflects the mix of fuels being oxidized under steady aerobic conditions when protein contribution is small or measured separately. Pure fat oxidation yields an RER near zero point seven zero because fat molecules produce less carbon dioxide relative to the oxygen they consume.
Pure carbohydrate oxidation yields an RER of one point zero zero because the stoichiometry of glucose oxidation balances CO2 and O2 one to one. Between those anchors the classic classroom and lab approximation treats the non-protein RER as a linear mixture: the distance from zero point seven zero toward one point zero zero is the carbohydrate energy fraction, and the remaining distance is the fat energy fraction.
Explicitly, percent carbohydrate equals RER minus zero point seven zero, divided by zero point three zero, times one hundred; percent fat equals one point zero zero minus RER, divided by zero point three zero, times one hundred. At RER zero point eight five both percentages are fifty. At zero point eight two carbohydrate is forty percent and fat is sixty percent.
Values below zero point seven zero or above one point zero zero fall outside this two-substrate window: they may signal measurement error, hyperventilation, buffering, ketosis edge cases, or anaerobic contribution, and this capability rejects them rather than inventing percentages outside zero to one hundred. The model is educational and planning-oriented; it does not diagnose disease, replace a full metabolic cart report, or account for protein oxidation, alcohol, or unusual substrates without additional lab data.
Who uses it: labs, training apps and classrooms
Exercise physiology courses use a respiratory exchange ratio substrate calculator so students can convert a single cart readout into a fuel mix without hunting Lusk tables or hand-coding the linear map. Strength and endurance coaches who already log steady-state RER from a metabolic session can chart carbohydrate versus fat contribution across zones and weeks without rebuilding spreadsheet formulas in every language.
Keep clinical expectations honest: this is a transparent planning and education estimate under the classic non-protein bounds, not a medical device certification, and users with atypical metabolism, acute illness, or incomplete gas calibration should rely on professional interpretation of full calorimetry reports. Source retention follows the same rules as other KIT parse items; results are safe to cache and to assert in automated tests.
When your product already computes RER upstream, this capability is the last pure arithmetic step that turns that number into readable substrate percentages for dashboards, PDFs, and athlete feedback screens.
What you can do with it
Exercise physiology lab reports
Convert a measured steady-state RER from a metabolic cart into carbohydrate and fat energy percentages for student reports and coach-facing summaries.
FAQ
What RER values are accepted?
Only positive finite numbers from 0.70 (pure fat) through 1.00 (pure carbohydrate) inclusive.
Why is RER 0.85 special?
At 0.85 the linear model sits halfway between pure fat and pure carbohydrate, so both substrate percentages are 50%. It is a common textbook check point.
Does this account for protein oxidation?
No. The classic two-substrate map assumes non-protein RER. If you have urinary nitrogen or another protein correction, apply it upstream and send the non-protein ratio only if it still lies in [0.70, 1.00].
What does an RER of 0.82 mean?
It means about 40 % of your energy comes from carbohydrate and 60 % from fat. The closer the value sits to 0.70, the more fat you are burning; the closer to 1.00, the more carbohydrate.
How is the respiratory exchange ratio measured?
With indirect calorimetry: a mask or mouthpiece measures the carbon dioxide you breathe out and the oxygen you take up. RER is carbon dioxide divided by oxygen, read under steady aerobic conditions.
Related tools
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/health/rer-substrate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"rer":0.85}'const res = await fetch("https://api.kit.forhosting.com/health/rer-substrate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rer": 0.85
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/rer-substrate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"rer": 0.85
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/rer-substrate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"rer":0.85}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"rer":0.85}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/rer-substrate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"rer": 0.85
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.rer_substrate",
"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. |
Technical notes
Invalid, missing, non-finite, or non-positive inputs fail with invalid_input and are not billed.
What RER substrate percentages mean and how the linear model works
At the endpoints you recover pure fat or pure carbohydrate.
Input contract, response fields, validation, and error behaviour
Non-positive RER values are rejected explicitly because a ratio of gas exchange cannot be zero or negative in this model. Do not send protein-corrected non-protein RQ outside the documented window without understanding that the linear two-fuel map no longer applies as a simple percent split. POST a JSON body with required field rer: a finite number in the closed interval from zero point seven zero to one point zero zero inclusive. Numeric strings are accepted after trim; empty strings, null, missing fields, NaN, and Infinity fail with invalid_input naming the field. Aliases respiratory_exchange_ratio, r, rq, and respiratory_quotient are accepted for the same value so clients that already store respiratory quotient under a different key do not need a rename step. Values strictly below zero point seven zero or strictly above one point zero zero are rejected with a message that cites the classic two-substrate bounds, so API clients can surface a clear validation hint instead of clamping silently. On success the response echoes rer, then carb_percent and fat_percent as percentages that sum to one hundred within stable rounding, carb_fraction and fat_fraction as unit-interval fractions for chart libraries, formula restating both percentage identities, method set to linear_rer_substrate, and model_bounds documenting pure_fat_rer and pure_carb_rer. Failed validation does not consume prepaid balance. Pair this endpoint with your own VO2 and VCO2 pipeline: this capability does not compute RER from raw gas flows; it only maps an already measured RER into substrate percentages.
Where an RER substrate API earns its keep in labs, apps, and teaching
Fitness and sports-science products that store RER from paired VO2 and VCO2 sensors call a deterministic prepaid endpoint at $0.002 per successful item instead of reimplementing validation and rounding on each client.
Integration use cases
Sports science and training apps
Apps that already store RER from VO2 and VCO2 sensors call a stable prepaid endpoint for substrate percentages instead of reimplementing the linear map on every client.
Classroom demos and automated tests
Teachers and CI pipelines pin deterministic JSON for known RER values (for example 0.85 → 50% carbohydrate / 50% fat) without network or model variance.
Technical questions
How do I estimate carbohydrate and fat use from RER?
Send a finite RER in [0.70, 1.00]. The API returns %CHO = ((RER − 0.70) / 0.30) × 100 and %fat = ((1.00 − RER) / 0.30) × 100, plus matching fractions.
What does the RER substrate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.