Integrations

Domain Sync

Keep DNS records for every domain you own in lockstep with services running under KillTheHost. One pipeline — five registrars.

Overview

Domain Sync reconciles A, AAAA, CNAME, MX, and TXT records defined in KillTheHost with the authoritative records at your registrar. It only pushes changes when upstream state differs from the desired state, so a run with no drift is a no-op.

The configuration format is identical across all registrars — the adapter is selected per-zone, so you can mix GoDaddy, Porkbun, IONOS, Cloudflare and Namecheap domains in the same config/domains.yml file.

Supported registrars

RegistrarProduct nameAdapterAuth
NamecheapCheap SyncnamecheapAPI user + key + IP allow-list
GoDaddyDaddy SyncgodaddyProduction API key + secret
PorkbunPork SyncporkbunAPI key + secret (per-domain opt-in)
IONOSIONOS SyncionosPublic prefix + secret API key
Cloudflare RegistrarFlare SynccloudflareScoped API token (Zone.DNS edit)

Namecheap — Cheap Sync

  1. Sign in to Namecheap.
  2. Open Profile → Tools → Namecheap API Access.
  3. Toggle API Access on.
  4. Copy the generated API Key and your Username, then whitelist your host's public IPv4.
config/domains.yml (namecheap)
registrars:
namecheap:
api_user: yourusername
api_key: 16c0de5f9b7d4e08a12a4d38b8cbe3c7
username: yourusername
use_sandbox: false
zones:
- domain: example.com
registrar: namecheap
records:
- { type: A, host: '@', value: '203.0.113.42', ttl: 300 }
- { type: CNAME, host: 'app', value: 'killthehost.cfargotunnel.com', ttl: 300 }

GoDaddy — Daddy Sync

  1. Sign in to developer.godaddy.com/keys.
  2. Create a Production key (OTE keys cannot edit real zones).
  3. Copy both the Key and the Secret.
config/domains.yml (godaddy)
registrars:
godaddy:
api_key: dLeXJ1g3_b5fT4K2f8hYq5rJw
api_secret: s3cr3tV4lu3H3r3
shopper_id: 123456789
zones:
- domain: example.com
registrar: godaddy
records:
- { type: A, host: '@', value: '203.0.113.42', ttl: 600 }
- { type: CNAME, host: 'app', value: 'killthehost.cfargotunnel.com', ttl: 600 }

Porkbun — Pork Sync

  1. Open Account → API Access on porkbun.com.
  2. Click Create API Key and store both the API Key and Secret API Key.
  3. For each domain you want managed, enable API Access on the domain details page.
config/domains.yml (porkbun)
registrars:
porkbun:
api_key: pk1_2f8d4e6a8c0b1d3f5a7c9e1b3d5f7a9c
secret_api_key: sk1_9a7c5e3b1d9f8a6c4e2b0d8f6a4c2e0b
zones:
- domain: example.com
registrar: porkbun
records:
- { type: A, host: '@', value: '203.0.113.42', ttl: 600 }
- { type: TXT, host: '@', value: 'v=spf1 mx ~all', ttl: 3600 }

IONOS — IONOS Sync

  1. Open the IONOS Developer portal.
  2. Create a new API key and copy both the Public Prefix and Secret.
  3. Ensure the key has the DNS scope enabled.
config/domains.yml (ionos)
registrars:
ionos:
public_prefix: a1b2c3d4e5f6
secret: 7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v
zones:
- domain: example.com
registrar: ionos
records:
- { type: A, host: '@', value: '203.0.113.42', ttl: 3600 }
- { type: CNAME, host: 'app', value: 'killthehost.cfargotunnel.com', ttl: 3600 }

Cloudflare Registrar — Flare Sync

  1. Open My Profile → API Tokens on dash.cloudflare.com.
  2. Click Create Token and start from the Edit zone DNS template.
  3. Scope the token to the specific zones you want Flare Sync to manage. Copy the token once — it is shown a single time.
config/domains.yml (cloudflare)
registrars:
cloudflare:
api_token: 2f8d4e6a8c0b1d3f5a7c9e1b3d5f7a9c1e3b5d7f
zones:
- domain: example.com
registrar: cloudflare
records:
- { type: A, host: '@', value: '203.0.113.42', ttl: 1, proxied: true }
- { type: CNAME, host: 'app', value: 'killthehost.cfargotunnel.com', ttl: 1, proxied: true }
- { type: TXT, host: '@', value: 'v=spf1 mx ~all', ttl: 300, proxied: false }

Supported record types

Domain Sync currently understands the following record types. Anything outside this list is left untouched, so existing MX chains, SRV records and DNSSEC keys survive a sync run unharmed.

TypeNotes
AIPv4 address
AAAAIPv6 address
CNAMEAlias to another hostname
MXRequires priority
TXTSPF / DKIM / DMARC / verification tokens

Dry run & apply

Preview the diff before touching the authoritative zone.

bash
$killthehost dns plan example.com
+ A app.example.com 203.0.113.42 (new)
~ TXT @.example.com v=spf1 mx ~all (update)
- CNAME old.example.com example.com (remove)

Apply the changes once you're happy:

bash
$killthehost dns apply example.com

Scheduling

The control panel runs a reconciliation loop every 15 minutes when Domain Sync is enabled. To change the cadence, edit sync.interval_minutes in config/domains.yml.

config/domains.yml
sync:
interval_minutes: 15
on_failure: retry # retry | alert | stop
backoff_seconds: 60