Secondary Production Calculator for Population Biomass
Secondary production describes the new animal or consumer biomass generated by a population over a defined period.
Run — free
This calculator combines biomass gained through individual growth with biomass committed to reproduction, then reports both the total production and the rate per unit of time. It also separates the percentage contributed by each pathway. Enter measurements in one consistent biomass unit and choose any time unit appropriate to the study; the output preserves those implied units without forcing a conversion.
What the calculation represents
Secondary production is the formation of new heterotrophic biomass within a population. In a cohort, benthic sample, insect population, fish stock, or other consumer group, that formation can be divided into two pathways: tissue added as organisms grow and biomass allocated to offspring or reproductive products. The calculator adds those measured quantities to obtain total secondary production for the observation interval. It then divides the total by the interval length to produce an interval-normalized rate. This is a biomass balance, not a standing-stock estimate. Biomass present at one sampling date may include material formed earlier, while production counts only new biomass formed during the interval under study. Likewise, mortality and emigration can reduce observed standing biomass without erasing production that already occurred. For that reason, the inputs should come from a growth and reproduction assessment rather than from simply subtracting final standing biomass from initial standing biomass. The two biomass inputs must use the same unit so their sum has a valid ecological meaning.
Choose a consistent interval and units
Enter growth biomass and reproductive biomass in one shared unit, such as grams of dry mass, milligrams of carbon, kilograms of wet mass, or energy equivalents. Enter the duration as a positive number in the time unit you want the rate to use. For example, biomass values in grams and an interval in days produce total secondary production in grams and a production rate in grams per day. If the interval is twelve months, the rate is per month unless you first convert the duration to years. The calculator deliberately does not guess or convert units because ecological datasets differ in whether they report wet mass, dry mass, ash-free dry mass, carbon, or energy. Mixing these bases would create a precise-looking but invalid result. Reproductive biomass should follow the accounting boundary of the study and should not be counted twice. If gonad growth is already included in measured somatic or whole-body growth, add it again only when the study method explicitly treats released offspring or reproductive output as a separate production term. Record that decision with the result so later comparisons use the same boundary.
Interpret totals, rates, and contributions
The secondary production result is the total biomass generated during the full interval. The production rate expresses the same total per interval unit, which makes results from unequal observation durations easier to compare when the underlying sampling and unit definitions are compatible. The growth and reproductive contribution percentages show how the total is partitioned. A high growth share indicates that most recorded production entered larger individual bodies, while a high reproductive share indicates that offspring or reproductive material accounted for more of the new biomass. These percentages describe allocation within the supplied production terms; they do not measure reproductive success, recruitment, survival, consumption, or ecological efficiency. A zero total is valid when both biomass inputs are zero, and both contribution percentages are then reported as zero because no production exists to partition. Comparisons among sites, seasons, or species should retain the same biomass basis, interval convention, life stages, and treatment of reproduction. If sampling uncertainty is important, calculate plausible lower and upper inputs separately rather than treating this deterministic point estimate as an uncertainty model.
What you can do with it
Summarize cohort production
Combine measured somatic growth and reproductive output for a cohort over a season or life-stage interval.
Compare population allocation
Compare the percentage of production routed through growth and reproduction across populations using a consistent accounting method.
Normalize field-study results
Convert total production observed over a known duration into a rate expressed per chosen unit of time.
FAQ
What is the formula for secondary production?
Secondary production equals biomass gained through growth plus biomass allocated to reproduction during the stated interval. The production rate is that sum divided by the interval length.
Which biomass units can I use?
Any biomass or energy-equivalent unit is acceptable, provided both biomass inputs use the same basis. The total keeps that unit, and the rate uses that unit per chosen time unit.
Does mortality need to be subtracted?
No. Production measures biomass formed, even if some of it is later lost through mortality. Use growth and reproductive production estimates that already follow your study's accounting method.
What happens when both biomass inputs are zero?
The total and rate are zero. Both contribution percentages are also zero because there is no production to divide between pathways.
What does API use cost?
Each request costs $0.002. The calculation is also available in the browser for interactive use.
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/bio/secondary-production \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"growth_biomass":120,"reproductive_biomass":30,"time_interval":12}'const res = await fetch("https://api.kit.forhosting.com/bio/secondary-production", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"growth_biomass": 120,
"reproductive_biomass": 30,
"time_interval": 12
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/secondary-production",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"growth_biomass": 120,
"reproductive_biomass": 30,
"time_interval": 12
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/secondary-production", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"growth_biomass":120,"reproductive_biomass":30,"time_interval":12}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"growth_biomass":120,"reproductive_biomass":30,"time_interval":12}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/secondary-production", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"growth_biomass": 120,
"reproductive_biomass": 30,
"time_interval": 12
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.secondary_production",
"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. |