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
| Registrar | Product name | Adapter | Auth |
|---|---|---|---|
| Namecheap | Cheap Sync | namecheap | API user + key + IP allow-list |
| GoDaddy | Daddy Sync | godaddy | Production API key + secret |
| Porkbun | Pork Sync | porkbun | API key + secret (per-domain opt-in) |
| IONOS | IONOS Sync | ionos | Public prefix + secret API key |
| Cloudflare Registrar | Flare Sync | cloudflare | Scoped API token (Zone.DNS edit) |
Namecheap — Cheap Sync
- Sign in to Namecheap.
- Open Profile → Tools → Namecheap API Access.
- Toggle API Access on.
- Copy the generated
API Keyand yourUsername, then whitelist your host's public IPv4.
registrars: namecheap: api_user: yourusername api_key: 16c0de5f9b7d4e08a12a4d38b8cbe3c7 username: yourusername use_sandbox: falsezones: - 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
- Sign in to developer.godaddy.com/keys.
- Create a Production key (OTE keys cannot edit real zones).
- Copy both the
Keyand theSecret.
registrars: godaddy: api_key: dLeXJ1g3_b5fT4K2f8hYq5rJw api_secret: s3cr3tV4lu3H3r3 shopper_id: 123456789zones: - 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
- Open Account → API Access on porkbun.com.
- Click Create API Key and store both the
API KeyandSecret API Key. - For each domain you want managed, enable API Access on the domain details page.
registrars: porkbun: api_key: pk1_2f8d4e6a8c0b1d3f5a7c9e1b3d5f7a9c secret_api_key: sk1_9a7c5e3b1d9f8a6c4e2b0d8f6a4c2e0bzones: - 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
- Open the IONOS Developer portal.
- Create a new API key and copy both the
Public PrefixandSecret. - Ensure the key has the DNS scope enabled.
registrars: ionos: public_prefix: a1b2c3d4e5f6 secret: 7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2vzones: - 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
- Open My Profile → API Tokens on dash.cloudflare.com.
- Click Create Token and start from the Edit zone DNS template.
- Scope the token to the specific zones you want Flare Sync to manage. Copy the token once — it is shown a single time.
registrars: cloudflare: api_token: 2f8d4e6a8c0b1d3f5a7c9e1b3d5f7a9c1e3b5d7fzones: - 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.
| Type | Notes |
|---|---|
| A | IPv4 address |
| AAAA | IPv6 address |
| CNAME | Alias to another hostname |
| MX | Requires priority |
| TXT | SPF / DKIM / DMARC / verification tokens |
Dry run & apply
Preview the diff before touching the authoritative zone.
$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:
$killthehost dns apply example.comScheduling
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.
sync: interval_minutes: 15 on_failure: retry # retry | alert | stop backoff_seconds: 60