{
  "title": "DNS TTL migration planner",
  "human_url": "https://happytails.ai/en/developer-tools/dns-ttl-migration-planner/",
  "agent_url": "https://happytails.ai/agents/en/developer-tools/dns-ttl-migration-planner/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/developer-tools/dns-ttl-migration-planner.md",
  "content": "DNS TTL migration planner\nBuild a DNS change timeline from positive and negative TTLs, authority lag and your cache assumptions.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use DNS TTL migration planner\nSet the UTC time for publishing the new TTL and enter old and new positive TTLs and SOA values.\nEnter authority lag, any resolver minimum retention, extra stale-answer retention and a safety margin.\nReview the suggested change and retirement times, or supply an earlier change time to inspect remaining cache exposure.\nUseful next steps\nDNS zone diff\nDNS name length checker\nHTTP cache policy analyzer\nWait out records cached under the old TTL\nThe waiting period begins after the last authority is assumed to publish the new TTL. Old records could have been fetched just before that point. Negative-cache TTL uses the lesser of the SOA TTL and SOA MINIMUM. If you choose an earlier record change, the report retains the old high-TTL expiry in its retirement calculation.\nTreat the schedule as a bounded scenario\nAuthority lag, resolver retention and extra stale-answer time are assumptions you provide. Outages, application caches, delegation changes, DNSSEC and unbounded stale-answer behavior may exceed them. The output is a UTC timeline, not a measurement of global propagation or a guarantee that every client has updated.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "DNS zone diff",
      "url": "https://happytails.ai/en/developer-tools/dns-zone-diff/"
    },
    {
      "name": "DNS name length checker",
      "url": "https://happytails.ai/en/developer-tools/dns-name-length-checker/"
    },
    {
      "name": "HTTP cache policy analyzer",
      "url": "https://happytails.ai/en/developer-tools/http-cache-policy-analyzer/"
    }
  ],
  "tool": {
    "id": "dns-ttl-migration-planner",
    "category": "developer-tools",
    "built": true,
    "requirements": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
    "implementation": {
      "fields": [
        {
          "key": "lowerTtlAt",
          "label": "Publish the new TTL at (UTC)",
          "value": "2026-10-15T00:00:00Z",
          "type": "text",
          "maxLength": 24,
          "help": "Enter an exact UTC timestamp with seconds, such as 2026-10-15T00:00:00Z. No local-time conversion is inferred."
        },
        {
          "key": "oldTtlSeconds",
          "label": "Old positive TTL (s)",
          "value": "86400",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 2147483647."
        },
        {
          "key": "newTtlSeconds",
          "label": "New positive TTL (s)",
          "value": "300",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 2147483647."
        },
        {
          "key": "oldSoaTtlSeconds",
          "label": "Old SOA TTL (s)",
          "value": "3600",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 2147483647."
        },
        {
          "key": "oldSoaMinimumSeconds",
          "label": "Old SOA MINIMUM (s)",
          "value": "900",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
        },
        {
          "key": "newSoaTtlSeconds",
          "label": "New SOA TTL (s)",
          "value": "300",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 2147483647."
        },
        {
          "key": "newSoaMinimumSeconds",
          "label": "New SOA MINIMUM (s)",
          "value": "60",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
        },
        {
          "key": "authorityLagSeconds",
          "label": "Authority publication lag (s)",
          "value": "120",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
        },
        {
          "key": "resolverFloorSeconds",
          "label": "Assumed resolver minimum retention (s)",
          "value": "0",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
        },
        {
          "key": "serveStaleSeconds",
          "label": "Assumed extra stale-answer retention (s)",
          "value": "0",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
        },
        {
          "key": "safetySeconds",
          "label": "Additional safety margin (s)",
          "value": "60",
          "type": "text",
          "inputMode": "decimal",
          "maxLength": 24,
          "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
        },
        {
          "key": "changeAt",
          "label": "Publish the changed record at (UTC), optional",
          "value": "",
          "type": "text",
          "maxLength": 24,
          "help": "Optional. Leave empty to use the earliest modeled time; otherwise enter an exact UTC timestamp such as 2026-10-16T00:00:00Z."
        }
      ],
      "registrationFamily": "network-planning",
      "input": false,
      "presentation": "metrics",
      "note": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
      "inputMaxLength": 500000,
      "inputErrorCode": "NETWORK_PLANNING_INPUT",
      "example": {
        "input": "",
        "options": {
          "lowerTtlAt": "2026-10-15T00:00:00Z",
          "oldTtlSeconds": "86400",
          "newTtlSeconds": "300",
          "oldSoaTtlSeconds": "3600",
          "oldSoaMinimumSeconds": "900",
          "newSoaTtlSeconds": "300",
          "newSoaMinimumSeconds": "60",
          "authorityLagSeconds": "120",
          "resolverFloorSeconds": "0",
          "serveStaleSeconds": "0",
          "safetySeconds": "60",
          "changeAt": ""
        }
      },
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 500000,
        "inputMode": "text",
        "label": "Your text",
        "placeholder": "Type or paste your input…",
        "help": "Up to 500,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# DNS TTL migration planner\n\n- Human page: https://happytails.ai/en/developer-tools/dns-ttl-migration-planner/\n- Markdown: https://happytails.ai/en/developer-tools/dns-ttl-migration-planner.md\n- Structured JSON: https://happytails.ai/agents/en/developer-tools/dns-ttl-migration-planner/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `dns-ttl-migration-planner` |\n| Category | developer-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nWait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.\n\n### Inputs and settings\n\nNo free-text input is required. Use the file inputs and/or settings below.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `lowerTtlAt` | Publish the new TTL at (UTC) | text | \"2026-10-15T00:00:00Z\" |  |\n| `oldTtlSeconds` | Old positive TTL (s) | text | \"86400\" |  |\n| `newTtlSeconds` | New positive TTL (s) | text | \"300\" |  |\n| `oldSoaTtlSeconds` | Old SOA TTL (s) | text | \"3600\" |  |\n| `oldSoaMinimumSeconds` | Old SOA MINIMUM (s) | text | \"900\" |  |\n| `newSoaTtlSeconds` | New SOA TTL (s) | text | \"300\" |  |\n| `newSoaMinimumSeconds` | New SOA MINIMUM (s) | text | \"60\" |  |\n| `authorityLagSeconds` | Authority publication lag (s) | text | \"120\" |  |\n| `resolverFloorSeconds` | Assumed resolver minimum retention (s) | text | \"0\" |  |\n| `serveStaleSeconds` | Assumed extra stale-answer retention (s) | text | \"0\" |  |\n| `safetySeconds` | Additional safety margin (s) | text | \"60\" |  |\n| `changeAt` | Publish the changed record at (UTC), optional | text | \"\" |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nWait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"dns-ttl-migration-planner\",\n  \"category\": \"developer-tools\",\n  \"built\": true,\n  \"requirements\": \"Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"lowerTtlAt\",\n        \"label\": \"Publish the new TTL at (UTC)\",\n        \"value\": \"2026-10-15T00:00:00Z\",\n        \"type\": \"text\",\n        \"maxLength\": 24,\n        \"help\": \"Enter an exact UTC timestamp with seconds, such as 2026-10-15T00:00:00Z. No local-time conversion is inferred.\"\n      },\n      {\n        \"key\": \"oldTtlSeconds\",\n        \"label\": \"Old positive TTL (s)\",\n        \"value\": \"86400\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 2147483647.\"\n      },\n      {\n        \"key\": \"newTtlSeconds\",\n        \"label\": \"New positive TTL (s)\",\n        \"value\": \"300\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 2147483647.\"\n      },\n      {\n        \"key\": \"oldSoaTtlSeconds\",\n        \"label\": \"Old SOA TTL (s)\",\n        \"value\": \"3600\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 2147483647.\"\n      },\n      {\n        \"key\": \"oldSoaMinimumSeconds\",\n        \"label\": \"Old SOA MINIMUM (s)\",\n        \"value\": \"900\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM.\"\n      },\n      {\n        \"key\": \"newSoaTtlSeconds\",\n        \"label\": \"New SOA TTL (s)\",\n        \"value\": \"300\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 2147483647.\"\n      },\n      {\n        \"key\": \"newSoaMinimumSeconds\",\n        \"label\": \"New SOA MINIMUM (s)\",\n        \"value\": \"60\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM.\"\n      },\n      {\n        \"key\": \"authorityLagSeconds\",\n        \"label\": \"Authority publication lag (s)\",\n        \"value\": \"120\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value.\"\n      },\n      {\n        \"key\": \"resolverFloorSeconds\",\n        \"label\": \"Assumed resolver minimum retention (s)\",\n        \"value\": \"0\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value.\"\n      },\n      {\n        \"key\": \"serveStaleSeconds\",\n        \"label\": \"Assumed extra stale-answer retention (s)\",\n        \"value\": \"0\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value.\"\n      },\n      {\n        \"key\": \"safetySeconds\",\n        \"label\": \"Additional safety margin (s)\",\n        \"value\": \"60\",\n        \"type\": \"text\",\n        \"inputMode\": \"decimal\",\n        \"maxLength\": 24,\n        \"help\": \"Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value.\"\n      },\n      {\n        \"key\": \"changeAt\",\n        \"label\": \"Publish the changed record at (UTC), optional\",\n        \"value\": \"\",\n        \"type\": \"text\",\n        \"maxLength\": 24,\n        \"help\": \"Optional. Leave empty to use the earliest modeled time; otherwise enter an exact UTC timestamp such as 2026-10-16T00:00:00Z.\"\n      }\n    ],\n    \"registrationFamily\": \"network-planning\",\n    \"input\": false,\n    \"presentation\": \"metrics\",\n    \"note\": \"Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.\",\n    \"inputMaxLength\": 500000,\n    \"inputErrorCode\": \"NETWORK_PLANNING_INPUT\",\n    \"example\": {\n      \"input\": \"\",\n      \"options\": {\n        \"lowerTtlAt\": \"2026-10-15T00:00:00Z\",\n        \"oldTtlSeconds\": \"86400\",\n        \"newTtlSeconds\": \"300\",\n        \"oldSoaTtlSeconds\": \"3600\",\n        \"oldSoaMinimumSeconds\": \"900\",\n        \"newSoaTtlSeconds\": \"300\",\n        \"newSoaMinimumSeconds\": \"60\",\n        \"authorityLagSeconds\": \"120\",\n        \"resolverFloorSeconds\": \"0\",\n        \"serveStaleSeconds\": \"0\",\n        \"safetySeconds\": \"60\",\n        \"changeAt\": \"\"\n      }\n    },\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 500000,\n      \"inputMode\": \"text\",\n      \"label\": \"Your text\",\n      \"placeholder\": \"Type or paste your input…\",\n      \"help\": \"Up to 500,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nBuild a DNS change timeline from positive and negative TTLs, authority lag and your cache assumptions.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use DNS TTL migration planner\n\n1. Set the UTC time for publishing the new TTL and enter old and new positive TTLs and SOA values.\n2. Enter authority lag, any resolver minimum retention, extra stale-answer retention and a safety margin.\n3. Review the suggested change and retirement times, or supply an earlier change time to inspect remaining cache exposure.\n\n## Useful next steps\n\n- [DNS zone diff](https://happytails.ai/en/developer-tools/dns-zone-diff/) ([Markdown](https://happytails.ai/en/developer-tools/dns-zone-diff.md))\n\n- [DNS name length checker](https://happytails.ai/en/developer-tools/dns-name-length-checker/) ([Markdown](https://happytails.ai/en/developer-tools/dns-name-length-checker.md))\n\n- [HTTP cache policy analyzer](https://happytails.ai/en/developer-tools/http-cache-policy-analyzer/) ([Markdown](https://happytails.ai/en/developer-tools/http-cache-policy-analyzer.md))\n\n## Wait out records cached under the old TTL\n\nThe waiting period begins after the last authority is assumed to publish the new TTL. Old records could have been fetched just before that point. Negative-cache TTL uses the lesser of the SOA TTL and SOA MINIMUM. If you choose an earlier record change, the report retains the old high-TTL expiry in its retirement calculation.\n\n### Treat the schedule as a bounded scenario\n\nAuthority lag, resolver retention and extra stale-answer time are assumptions you provide. Outages, application caches, delegation changes, DNSSEC and unbounded stale-answer behavior may exceed them. The output is a UTC timeline, not a measurement of global propagation or a guarantee that every client has updated.\n"
}