Public NTP time service
Free public NTP for anyone who wants it. Also intended for the NTP Pool. Browsers cannot speak NTP — use the HTTPS API.
https://ntp.webservice.digital/api/time
Point your NTP client at the hostname. Keep a second independent source in production.
chrony
server ntp.webservice.digital iburst
File: /etc/chrony/chrony.conf or /etc/chrony/sources.d/*.sources, then sudo systemctl restart chrony.
ntpd / ntpsec
server ntp.webservice.digital iburst
File: /etc/ntp.conf or /etc/ntpsec/ntp.conf, then restart ntp / ntpsec.
systemd-timesyncd
[Time] NTP=ntp.webservice.digital
File: /etc/systemd/timesyncd.conf, then sudo systemctl restart systemd-timesyncd.
This host is provided as-is, with no SLA. Prefer the NTP Pool if you need redundancy.
Time API for web apps
CORS is open (Access-Control-Allow-Origin: *). No key required. JSON, no cache.
Endpoints
GET /api catalog GET /api/time full JSON (canonical) GET /api/v1/time same as /api/time GET /api/now same as /api/time GET /api/unix unix / unix_ms / unix_us GET /api/iso ISO-8601 UTC (text/plain) GET /api/health synced, stratum, leap
Example response
{
"ok": true,
"iso": "2026-08-16T22:24:13.915459Z",
"unix": 1786919053,
"unix_ms": 1786919053915,
"timezone": "UTC",
"stratum": 2,
"synced": true,
"server": "ntp.webservice.digital"
}
JavaScript / fetch
const t0 = performance.now();
const res = await fetch('https://ntp.webservice.digital/api/time', { cache: 'no-store' });
const t1 = performance.now();
const data = await res.json();
const offsetMs = data.unix_ms + (t1 - t0) / 2 - Date.now();
const now = () => new Date(Date.now() + offsetMs);
Compensate RTT with the midpoint of the request. Re-sync every minute.
curl / bash
curl -sS https://ntp.webservice.digital/api/time curl -sS https://ntp.webservice.digital/api/iso curl -sS https://ntp.webservice.digital/api/health
PowerShell
$t = Invoke-RestMethod https://ntp.webservice.digital/api/time $t.iso $t.unix_ms [DateTimeOffset]::FromUnixTimeMilliseconds($t.unix_ms).UtcDateTime
This is HTTP time, not NTP. Good for browsers and apps. For OS clocks use UDP 123. Soft limit: 30 requests/second/IP.
Install and use chrony
sudo apt update && sudo apt install -y chrony echo 'server ntp.webservice.digital iburst' | sudo tee /etc/chrony/sources.d/webservice.sources sudo systemctl restart chrony chronyc tracking chronyc sources -v
One-shot query (does not change the clock)
chronyd -Q -t 8 'server ntp.webservice.digital iburst'
Older tools
# Debian/Ubuntu: apt install ntpsec-ntpdate or ntpdate ntpdate -q ntp.webservice.digital # sntp (ntpsec) sntp -d ntp.webservice.digital
Is the clock in sync?
timedatectl chronyc tracking date -u
Test without changing the clock
w32tm /stripchart /computer:ntp.webservice.digital /dataonly /samples:5
Prints offset samples. If this times out, UDP 123 is blocked (Windows Firewall or upstream).
Point Windows Time at this server
w32tm /config /manualpeerlist:"ntp.webservice.digital,0x8" /syncfromflags:manual /update Restart-Service w32time w32tm /resync /force w32tm /query /status w32tm /query /peers
Run PowerShell as Administrator. 0x8 is client mode (typical for a workstation).
Query status later
w32tm /query /status w32tm /query /source Get-Date Get-Date -AsUTC
These check reachability and offset. They do not (or should not) step the system clock.
HTTPS API
curl -sS https://ntp.webservice.digital/api/time curl -sS https://ntp.webservice.digital/api/health
bash — NTP (recommended)
chronyd -Q -t 8 'server ntp.webservice.digital iburst'
Success looks like System clock wrong by … seconds (ignored). A hang or timeout means UDP 123 never came back.
bash — ntpdate / ntpq
ntpdate -q ntp.webservice.digital ntpq -c rv ntp.webservice.digital ntpq -p ntp.webservice.digital
bash — is UDP 123 even open?
nc -u -vz -w 3 ntp.webservice.digital 123
NTP will not speak a banner. Use the chronyd / ntpdate queries for a real protocol test.
PowerShell — recommended
w32tm /stripchart /computer:ntp.webservice.digital /dataonly /samples:5 Invoke-RestMethod https://ntp.webservice.digital/api/time
PowerShell — compare local time to UTC
Get-Date Get-Date -AsUTC w32tm /tz
Test-NetConnection -Port 123 uses TCP. NTP is UDP, so that test is the wrong protocol.
What good output looks like
Offset should be milliseconds, not seconds. This host is stratum 2 (synced to PTB). If you see “no server suitable” or repeated timeouts, check outbound UDP 123 and that you are not going through an HTTP proxy or Cloudflare orange-cloud.