Use this server

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.

ntp.webservice.digital  ·  UDP 123
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.

HTTPS API

Time API for web apps

CORS is open (Access-Control-Allow-Origin: *). No key required. JSON, no cache.

GET https://ntp.webservice.digital/api/time

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.

Linux / bash

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
Windows / PowerShell

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
Test a server

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.