Corrected endurance limit calculator
A machined 32 mm shaft in bending, with a 345 MPa baseline and 690 MPa tensile strength, keeps a corrected endurance limit of about 235 MPa. You see the surface, size and loading factors behind it. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Se prime
- 345
- Sut
- 690
- Surface
- Machined
- Loading
- Bending
- Diameter
- 32
- Stress unit
- MPa MPa
- Surface coeff a
- 4.51
- Surface exponent b
- -0.265
- Ka
- 0.7977770394
A polished rotating-beam specimen reports an endurance limit that a real shaft, bolt, or spring will never see. Surface finish, the size of the stressed volume, and whether the cycle is bending, axial, or torsion each cut that laboratory baseline, and machine-design practice multiplies the three Marin factors before any safety factor is applied. This corrected endurance limit calculator takes the base endurance limit Se-prime, the ultimate tensile strength, a surface class, a loading mode, and an optional critical diameter, then returns the surface factor ka, the size factor kb, the loading factor kc, and the product Se equals ka times kb times kc times Se-prime in the same stress unit you supplied.
What the Marin correction is and how Se = ka · kb · kc · Se′ is built
The endurance limit quoted for a steel in a handbook is almost always the rotating-beam value Se-prime of a small, highly polished specimen tested in fully reversed bending. A production part is larger, rougher, and often loaded axially or in torsion, so its long-life fatigue strength Se is smaller. Joseph Marin collected those knockdowns as multiplicative modifying factors, and the form used in Shigley-style machine design is Se equals ka times kb times kc times Se-prime.
The surface factor ka comes from a power law ka equals a times Sut to the power b, with coefficients a and b tabulated for ground, machined or cold-drawn, hot-rolled, and as-forged finishes in both megapascal and kilopound-per-square-inch tables; a polished finish is defined as ka equals one because that is the laboratory baseline.
The size factor kb is one for axial loading and for a small rotating specimen; otherwise it follows the piecewise Shigley rule on critical diameter, one below 2.79 millimetres, 1.24 times d to the minus 0.107 up to 51 millimetres, 1.51 times d to the minus 0.157 up to 254 millimetres, and 0.6 beyond that. The loading factor kc is 1.00 in bending, 0.85 in axial tension-compression, and 0.59 in torsion.
Temperature, reliability, and miscellaneous factors exist in the full Marin set; this capability applies the three geometric and loading factors that dominate a first-pass shaft or fastener check and leaves those extras to a later safety-factor step.
Who needs a corrected endurance limit
Machine-element courses and professional-engineer reviews routinely ask for the Marin-corrected endurance limit of a shaft given Sut, a finish, a diameter, and a loading mode; a deterministic oracle marks inverted units and unknown finish names instead of silently using ka equals one. Shaft and axle designers convert a rotating-beam Se-prime into a working Se before applying a fatigue stress-concentration factor and a safety factor, and they need the same ka, kb, and kc that the textbook table would have produced.
Laboratory benches that teach rotating-beam theory versus real-part knockdowns can pin se in continuous integration against the same pure module students use in the browser. Invalid input is not billed.
What you can do with it
Shaft and axle first-pass fatigue checks
Convert a rotating-beam Se-prime into a working endurance limit for a machined or ground shaft of known diameter before applying stress-concentration and safety factors.
Classroom and PE exam Marin-factor drills
Let students submit Sut, finish, diameter, and loading and verify ka, kb, kc, and Se against the Shigley tables without a spreadsheet that silently uses the wrong unit coefficients.
Fastener and spring design worksheets
Batch-correct stored Se-prime values when finish or load type changes, keeping one coefficient table for homework, LMS plugins, and production sizing scripts.
FAQ
How is the corrected endurance limit Se computed?
The surface factor ka is a·Sut^b from the Shigley finish table (polished is 1). The size factor kb is 1 for axial loading or a missing diameter, otherwise the piecewise function of critical diameter. The loading factor kc is 1.00 in bending, 0.85 axial, and 0.59 in torsion.
When is the size factor kb equal to one?
kb is 1 when loading is axial, when diameter is omitted (small rotating specimen), or when the critical diameter is at most 2.79 millimetres (0.11 inch). Larger diameters use the mid, large, or very-large Shigley pieces.
Do I have to supply diameter?
No. Diameter is optional. Omit it to keep kb at 1, which is the usual first estimate for a small specimen or when only surface and loading knockdowns are needed.
Which loading factor applies in bending, axial loading and torsion?
Bending uses 1.00, axial tension and compression use 0.85, and torsion uses 0.59. Axial loading also keeps the size factor at one, whatever diameter you enter.
Which surface finishes can I choose?
Polished, ground, machined or cold-drawn, hot-rolled and as-forged. Polished counts as one because it matches the laboratory specimen; rougher finishes reduce the limit more as the tensile strength rises.
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/eng/endurance-limit \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"se_prime":345,"sut":690,"surface":"machined","loading":"bending"}'const res = await fetch("https://api.kit.forhosting.com/eng/endurance-limit", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"se_prime": 345,
"sut": 690,
"surface": "machined",
"loading": "bending"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/eng/endurance-limit",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"se_prime": 345,
"sut": 690,
"surface": "machined",
"loading": "bending"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/eng/endurance-limit", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"se_prime":345,"sut":690,"surface":"machined","loading":"bending"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"se_prime":345,"sut":690,"surface":"machined","loading":"bending"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/eng/endurance-limit", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"se_prime": 345,
"sut": 690,
"surface": "machined",
"loading": "bending"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "eng.endurance_limit",
"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
Missing fields, non-positive strengths, or an unknown finish or loading mode fail with invalid_input and are not billed.
What the Marin correction is and how Se = ka · kb · kc · Se′ is built
The product of ka, kb, and kc is returned as marin_product so you can see how much of Se-prime survives before multiplying by the baseline.
Input contract, units, response shape, and error behaviour
Results are rounded to twelve decimal places for stable goldens. POST a JSON body with four required fields: se_prime (aliases se, Se, Se_prime, se_base, base_endurance, endurance_limit), the positive rotating-beam baseline; sut (aliases Sut, su, ultimate, ultimate_strength, tensile_strength), the positive ultimate tensile strength in the same stress unit; surface (aliases finish, surface_finish, ka_surface), one of polished, ground, machined, hot_rolled, or as_forged; and loading (aliases load, load_type, kc_loading), one of bending, axial, or torsion. Optional diameter (aliases d, dia, size, diameter_mm) is the critical diameter used by kb; omit it to keep kb at one. Optional diameter_unit is mm by default or in, and optional stress_unit is MPa by default or kpsi—the latter selects the matching Shigley a and b table so you must not mix a megapascal Sut with a kilopound coefficient set. Fields may arrive as JSON numbers or numeric strings; hyphenated finish names such as hot-rolled are accepted and normalized. Missing fields, non-finite values, non-positive se_prime or sut, a non-positive diameter, or a value outside the surface, loading, or unit enumerations fail with invalid_input naming the field and are not billed. On success the body echoes the cleaned inputs, reports surface_coeff_a and surface_exponent_b, returns ka, kb, kc, marin_product, size_regime, and the corrected endurance limit se in the same unit as se_prime, plus formula, method marin_endurance_limit, and a short message. Example: se_prime 345 megapascals, sut 690, machined surface, 32 millimetre diameter, bending, yields ka near 0.80, kb near 0.86, kc of 1, and Se near 235 megapascals.
Where a corrected endurance limit API earns its keep
Fastener and spring worksheets that already store Sut and a finish class can call this endpoint instead of embedding a second copy of the Shigley coefficients that will drift when the next edition retunes a and b. Keep requests small, pin the rounded se and marin_product fields in tests, and you get reproducible Marin corrections for LMS plugins, edge workers, and design notebooks without standing up a full fatigue-life solver.
Technical questions
Which surface finishes does the calculator accept?
polished, ground, machined (including cold-drawn), hot_rolled, and as_forged. Hyphenated names such as hot-rolled are normalized. The MPa and kpsi tables use different a and b, so set stress_unit to match Sut and se_prime.
What does the corrected endurance limit calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.