Sediment Accumulation Rate Calculator
The sediment accumulation rate calculator divides the thickness deposited between two dated horizons by their elapsed age interval.
Run — free
Enter thickness in meters and both horizon ages in years before present. It returns the average rate in meters per year and millimeters per year, together with the interval used in the calculation. The older horizon must have a greater age than the younger horizon; equal or reversed ages are rejected because they do not define a positive depositional interval.
What the sediment accumulation rate represents
A sediment accumulation rate expresses how much material was added, on average, during a known span of time. This calculator uses the stratigraphic thickness between two dated horizons as the numerator and the difference between their ages as the denominator. Ages are entered in years before present, so the older horizon must carry the larger number. For example, horizons dated to 18,500 and 6,000 years before present enclose 12,500 years. If 12.5 meters of sediment separates them, the average rate is 0.001 meter per year, or 1 millimeter per year. The result is a time-averaged value for the complete interval, not a claim that deposition proceeded continuously at exactly that speed. Short episodes of rapid deposition, pauses, erosion, and compaction can all be hidden inside the average. Treat the value as a concise summary of the dated stratigraphic interval and interpret it alongside the sedimentary evidence available at the site.
How to enter horizons and thickness correctly
Measure deposited thickness along the stratigraphic direction appropriate to the section and enter that thickness in meters. Enter both dates on the same age scale and in years before present. Do not mix calendar years, thousands of years, or millions of years without converting them first, because the calculator deliberately accepts one explicit unit system to prevent silent scale errors. The older horizon age must exceed the younger horizon age. Their difference is the elapsed time over which the entered thickness accumulated. A zero difference is undefined for this calculation, while a negative difference indicates that the horizons were reversed or their ages were entered incorrectly; both cases produce an error. Zero thickness is accepted and produces a zero average rate, which can represent no net preserved accumulation during a positive interval. All values must be finite and ages cannot be negative. Before using the result, confirm that both dates refer to the boundaries of the same measured thickness.
Interpreting the average and its limitations
The calculation is thickness divided by elapsed time, with a direct conversion from meters per year to millimeters per year. It does not correct for porosity loss, burial compaction, hiatuses, erosion, bioturbation, age uncertainty, or changes in depositional environment. Consequently, a compacted core records preserved thickness rather than the original loose-sediment thickness, and its calculated rate may be lower than the initial depositional rate. Likewise, an unconformity can place a long missing interval between horizons and make the average appear unusually slow. When dates have uncertainty ranges, calculate plausible low and high scenarios separately by varying the horizon ages and thickness within defensible bounds. Compare rates only when the measurement conventions and age scales are compatible. The output is most useful for screening calculations, core summaries, field notes, and reproducible workflows where the assumptions are stated. API requests cost $0.002; the deterministic calculation uses no network service and returns the same result for the same numeric inputs.
What you can do with it
Summarize a sediment core interval
Convert the measured thickness between two radiometrically or biostratigraphically dated markers into an average preserved accumulation rate.
Compare stratigraphic sections
Calculate rates with consistent units for several sections before examining differences in depositional setting, hiatuses, or compaction.
Check age-depth models
Use a simple interval rate as a transparent baseline when reviewing more detailed age-depth reconstructions or identifying implausible segments.
FAQ
What formula does the calculator use?
It subtracts the younger horizon age from the older horizon age, then divides deposited thickness in meters by that positive elapsed time in years.
Why must the older age be larger?
Ages are expressed as years before present. An older horizon therefore has a larger numeric age, and subtracting the younger age must produce a positive interval.
Can I enter ages in thousands or millions of years?
Convert them to years before entering them. Using a single declared unit prevents an unnoticed factor-of-one-thousand or factor-of-one-million error.
Does the result account for sediment compaction?
No. It uses the preserved thickness you enter. Apply an independently justified decompaction correction before calculation if your analysis requires original depositional thickness.
What happens when the two horizon ages are equal?
The calculator returns an invalid-input error because division by a zero time interval cannot define an accumulation rate.
How much does an API calculation cost?
Each API request costs $0.002. The same deterministic calculator can also run in the browser.
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/earth/sedimentation-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"deposited_thickness_m":12.5,"older_horizon_age_years":18500,"younger_horizon_age_years":6000}'const res = await fetch("https://api.kit.forhosting.com/earth/sedimentation-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"deposited_thickness_m": 12.5,
"older_horizon_age_years": 18500,
"younger_horizon_age_years": 6000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/sedimentation-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"deposited_thickness_m": 12.5,
"older_horizon_age_years": 18500,
"younger_horizon_age_years": 6000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/sedimentation-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"deposited_thickness_m":12.5,"older_horizon_age_years":18500,"younger_horizon_age_years":6000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"deposited_thickness_m":12.5,"older_horizon_age_years":18500,"younger_horizon_age_years":6000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/sedimentation-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"deposited_thickness_m": 12.5,
"older_horizon_age_years": 18500,
"younger_horizon_age_years": 6000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.sedimentation_rate",
"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. |