Tide Height Rule of Twelfths Calculator
The tide height rule of twelfths calculator estimates the water level at a chosen clock time between a predicted high tide and low tide.
Run — free
Enter both tide heights, their times, the target time, and whether the tide is falling or rising. The calculator divides the full interval into six equal periods and applies the traditional 1–2–3–3–2–1 pattern. It is useful for quick planning when a full harmonic curve or official real-time gauge is not available.
What the rule of twelfths estimates
The rule of twelfths is a practical approximation for the change in water height during a roughly sinusoidal tide. It divides the time from one tidal extreme to the next into six equal intervals. During those intervals, the water is assumed to move by one twelfth, two twelfths, three twelfths, three twelfths, two twelfths, and one twelfth of the total tidal range. Those shares add to twelve twelfths, so the estimate reaches the opposite extreme at the end time. This calculator also interpolates inside each interval instead of forcing the target time onto an interval boundary. For example, halfway through an interval assigned three twelfths, it applies one and a half twelfths for that interval. The result is a deterministic estimate expressed in the same unit used for the two heights. If the predictions are in metres, the answer is in metres; if they are in feet, the answer is in feet. No unit conversion is performed, which prevents an accidental mixture of unlike measurements from looking authoritative.
Enter tide times and direction correctly
Use the predicted high-water and low-water heights from the same station and the same tide cycle. Enter clock times in 24-hour HH:MM form. Choose high_to_low when high water occurs first and the target lies on the falling tide; choose low_to_high when low water occurs first and the target lies on the rising tide. When the second event has an earlier clock reading than the first, the calculator treats it as occurring on the following day. This makes windows such as a late-evening low followed by an early-morning high work without dates. The target time follows the same rollover rule and must fall inside the selected event window. The reported interval length is the actual high-to-low or low-to-high duration divided by six, rather than an assumed fixed hour. That matters because published tide events are seldom separated by exactly six hours. Check the direction carefully: identical heights and times describe two different curves depending on whether the sea is rising or falling.
Use the estimate with appropriate caution
Treat the result as a planning estimate, not as a navigation clearance or a replacement for official predictions. The rule works best where the tide curve is broadly regular and the supplied high and low predictions are reliable. Wind, atmospheric pressure, river flow, harbour geometry, shallow-water effects, and mixed or strongly asymmetric tides can make the observed level depart from this simplified curve. Compare the result with local notices, gauges, chart datums, and safety margins whenever depth matters. Also confirm that both published heights use the same chart datum; subtracting values tied to different reference levels produces a meaningless range. The output includes the tidal range, elapsed minutes, interval length, percentage progress, and cumulative twelfths so the calculation can be audited. API automation costs $0.002 per request, while the browser calculation uses the same pure arithmetic. For consequential boating, coastal access, diving, or engineering decisions, consult the responsible hydrographic or harbour authority and account for current conditions.
What you can do with it
Plan shore access
Estimate the water level around a causeway, beach, or tidal path between published tide events.
Prepare a boating estimate
Add an approximate tidal height to a cautious depth calculation before checking official local information.
Check field observations
Compare a simple theoretical tide curve with gauge readings or survey notes at intermediate times.
FAQ
What is the rule of twelfths?
It approximates the change between consecutive high and low water as 1, 2, 3, 3, 2, and 1 twelfths of the tidal range over six equal time intervals.
Does the calculator assume each interval is one hour?
No. It divides the actual duration between the entered tide events into six equal intervals.
Can the tide window cross midnight?
Yes. If the ending tide time is earlier on the clock than the starting tide time, it is treated as occurring the next day.
Which height units can I use?
Any consistent unit is accepted. Use the same unit and chart datum for both heights; the result remains in that unit.
Is this suitable for navigation?
It is only an approximation. Use official tide predictions, current observations, local guidance, and an appropriate safety margin for navigation or other safety-critical decisions.
What does an API calculation cost?
Each API request costs $0.002.
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/travel/tide-rule-of-twelfths \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"high_water_height":5.8,"low_water_height":1,"high_water_time":"06:00","low_water_time":"12:00","target_time":"08:30"}'const res = await fetch("https://api.kit.forhosting.com/travel/tide-rule-of-twelfths", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"high_water_height": 5.8,
"low_water_height": 1,
"high_water_time": "06:00",
"low_water_time": "12:00",
"target_time": "08:30"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/tide-rule-of-twelfths",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"high_water_height": 5.8,
"low_water_height": 1,
"high_water_time": "06:00",
"low_water_time": "12:00",
"target_time": "08:30"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/tide-rule-of-twelfths", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"high_water_height":5.8,"low_water_height":1,"high_water_time":"06:00","low_water_time":"12:00","target_time":"08:30"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"high_water_height":5.8,"low_water_height":1,"high_water_time":"06:00","low_water_time":"12:00","target_time":"08:30"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/tide-rule-of-twelfths", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"high_water_height": 5.8,
"low_water_height": 1,
"high_water_time": "06:00",
"low_water_time": "12:00",
"target_time": "08:30"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.tide_rule_of_twelfths",
"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. |