SatsDNS

Authoritative DNS, paid in sats

Host your domain's DNS on two nameservers, signed with DNSSEC and managed through an API. Add dynamic-DNS hostnames and secondary DNS, or register a .com, .net or .org name. Pay each order on its own with bitcoin, over Lightning or on-chain. No subscription, and no email address or identity check for DNS hosting.

Hosted zones

Your domain on its own pair of nameservers under ns1.satsdns.com and ns2.satsdns.com. DNSSEC signing from day one, CDS and CDNSKEY published, a 60-second minimum TTL for ACME DNS-01 and other fast changes, a JSON record API.

500 sats / 30 days, 5,000 sats / year

Secondary DNS

Keep your own primary. Our nameservers transfer your zone with a TSIG key and follow your NOTIFYs. Signed zones are served as you sign them.

500 sats / 30 days, 5,000 sats / year

Dynamic DNS

A hostname such as myhost.dynkite.com with A, AAAA, TXT and HTTPS records at a 60-second TTL. Update it from a script, or from a router or ddclient over the dyndns2 protocol.

200 sats / 30 days, 2,000 sats / year

Domain registration

.com, .net and .org names with WHOIS privacy included, ordered in the dashboard or through the API with a Nostr account. Add a year of DNS hosting for 3,000 sats more. Registered through our ICANN-accredited sponsoring registrar.

from 13,500 sats for the first year

Nostr accounts

Optional and free. Your Nostr key is your login: sign API calls with NIP-98, or sign in to the dashboard with a browser extension or a remote signer. Renewal reminders arrive as Nostr direct messages.

free

All prices, quotas and extras are on the pricing page.

How it works

  1. Ask for your nameservers. The free check gives each zone its own pair, such as k7qd.ns1.satsdns.com and m3x9.ns2.satsdns.com, and a ticket. Set the pair at your registrar; other providers' nameservers may stay listed next to ours. Nobody else can take over a domain that points at us.
  2. Order. Every order is checked for free first: the name, that nobody else hosts it, and that the domain is delegated to its nameservers. A request that would fail gets an error and no invoice.
  3. Pay. Without an account, the API answers 402 Payment Required with a Lightning (L402) invoice and a Cashu payment request; pay one and repeat the request. With a Nostr account, each order gets its own Lightning invoice, or a bitcoin address for orders of 5,000 sats or more.
  4. Manage. The answer carries a management token, shown once, and the DS record for your registrar. Edit records with the token, with your Nostr key, with an account API key or in the dashboard.

Example: host a zone, no account

# 1. Ask for the zone's nameservers (free).
curl -i -X POST https://api.satsdns.com/v1/zones/create/30d \
  -H "Content-Type: application/json" -d '{"zone": "example.org"}'
#   HTTP/2 409  delegation_missing: detail.expected_ns = your pair, detail.ns_ticket = "nst_..."
#   Set that pair as the domain's nameservers at your registrar, wait for the registry, then:
curl -i -X POST https://api.satsdns.com/v1/zones/create/30d \
  -H "Content-Type: application/json" -d '{"zone": "example.org", "ns_ticket": "nst_..."}'
#   HTTP/2 402
#   www-authenticate: L402 macaroon="AGIAJEem...", invoice="lnbc5u1..."

# 2. Pay the 500-sat invoice with any Lightning wallet and keep the preimage.

# 3. Repeat with the proof. The answer holds the zone token (once) and the DS record.
curl -X POST https://api.satsdns.com/v1/zones/create/30d \
  -H "Authorization: L402 AGIAJEem...:<preimage-hex>" \
  -H "Content-Type: application/json" -d '{"zone": "example.org", "ns_ticket": "nst_..."}'

# 4. Add a record with the token.
curl -X POST https://api.satsdns.com/v1/zones/example.org/records \
  -H "Authorization: Bearer jdz_..." -H "Content-Type: application/json" \
  -d '{"name": "www", "type": "A", "ttl": 300, "records": ["203.0.113.10"]}'

Paying

What you do not need

Rules

Full terms: terms of service, registration agreement, acceptable use, privacy. Report abuse: abuse@satsdns.com.

For agents