Daily sodium limit calculator
Most people know salt should be limited, but few can name a personal daily sodium ceiling in milligrams or translate that number into teaspoons of table salt.
Run — free
Public-health tables give upper limits by age; hypertension guidance often tightens the same number further; and nutrition labels report sodium, not salt, so a conversion is required before shopping or cooking. This daily sodium limit calculator accepts age and optional hypertension and guideline flags, applies an Institute of Medicine style age-band upper limit with optional WHO or ideal caps, and converts the resulting milligrams of sodium into grams of table salt using the sodium to sodium-chloride molecular-weight ratio. The same pure JavaScript module powers the free browser widget and the prepaid API, so meal planners, coaching apps, and homework checks never disagree on the arithmetic. Missing age or non-finite inputs fail with invalid_input and are not billed. Results are educational estimates only and do not replace medical advice for kidney disease, heart failure, or clinician-prescribed sodium restrictions.
How to use it
Enter your values in the form above. The tool checks them before calculating and shows the result on the same page.
Check your inputs
Use the labels and units shown next to each field. If something is missing or outside the allowed range, the page points to the field to fix.
Use it again or automate it
Use the browser tool for individual checks and the API when you need the same capability in an automated workflow.
What you can do with it
Get an answer now
Enter one set of values and see the result without building a spreadsheet or script.
Compare scenarios
Change one value at a time and rerun the calculation to understand what affects the result.
Automate repeated work
Use the API when the same calculation needs to run inside your product or workflow.
FAQ
How is the daily sodium limit calculated?
Age selects an upper-limit band (1500–2300 mg). Optional guideline who or ideal caps at 2000 or 1500 mg. Hypertension true also caps at 1500 mg. Salt grams use NaCl molecular weights: salt_g = sodium_limit_mg × 58.44 / (22.99 × 1000).
What fields are required?
Only age (whole years 1–120) is required. Hypertension defaults to false; guideline defaults to standard. Missing age returns invalid_input and is not billed.
How do you convert sodium milligrams to table salt grams?
Table salt is NaCl. Using atomic weights Na 22.99 and NaCl 58.44, salt_g = sodium_limit_mg × 58.44 / (22.99 × 1000). The API also returns salt_mg for the same conversion.
Does this replace medical advice?
No. Results are educational estimates from public-style tables. People with kidney disease, heart failure, pregnancy, or clinician-prescribed limits should follow professional guidance, not this calculator alone.
What does the daily sodium 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.
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/sodium-limit \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"age":40}'const res = await fetch("https://api.kit.forhosting.com/health/sodium-limit", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"age": 40
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/sodium-limit",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"age": 40
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/sodium-limit", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"age":40}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"age":40}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/sodium-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
{
"age": 40
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.sodium_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. |