--- name: vercel-dns description: Manage DNS records for domains hosted on Vercel using the Vercel CLI license: MIT compatibility: opencode metadata: service: vercel category: infrastructure --- ## What I Do Manage DNS records for domains hosted on Vercel, including: - List existing DNS records - Add new DNS records (A, AAAA, CNAME, TXT, MX, etc.) - Remove DNS records - Switch between Vercel teams/accounts ## Prerequisites - Vercel CLI installed: `npm i -g vercel` or `brew install vercel-cli` - Logged in: `vercel login` - Domain must be on Vercel nameservers or have Vercel as DNS provider ## 0 Finance Project For the 0 Finance project, always use `--scope prologe`: ```bash vercel dns ls 0.finance --scope prologe vercel logs www.0.finance --scope prologe ``` ## Common Commands ### Check Login & Team ```bash # Check who you're logged in as vercel whoami # List available teams vercel teams ls # Switch to a specific team (use slug, not display name) vercel switch # Or use --scope flag instead of switching vercel domains ls --scope prologe ``` ### List Domains & Records ```bash # List all domains in current team/account vercel domains ls --scope prologe # List DNS records for a specific domain vercel dns ls --scope prologe ``` ### Add DNS Records ```bash # Add A record vercel dns add A # Add CNAME record vercel dns add CNAME # Add TXT record (use quotes for values with special chars) vercel dns add TXT '' # Add MX record with priority # NOTE: MX priority is a separate argument (not embedded in the value) vercel dns add MX # Add record at apex (root domain) - use empty string or @ vercel dns add '' TXT '' vercel dns add @ MX mail.example.com 10 ``` ### Remove DNS Records ```bash # First list to get record ID vercel dns ls # Remove by record ID vercel dns rm # Remove with confirmation skip vercel dns rm --yes ``` ## Examples ### Add Email DNS Records (MX + SPF) ```bash # Add MX record for receiving email # WARNING: Setting MX at the apex (root) will route *all* inbound mail for the domain. # If the domain already uses Google Workspace / Fastmail / etc, prefer a dedicated subdomain. vercel dns add example.com '' MX inbound-smtp.us-east-1.amazonaws.com 10 # Safer: use a subdomain for inbound routing vercel dns add example.com inbound MX inbound-smtp.us-east-1.amazonaws.com 10 # Add SPF record vercel dns add example.com '' TXT 'v=spf1 include:amazonses.com ~all' ``` ### Add DKIM Records for Email Authentication ```bash # DKIM CNAME records (common for SES, Google Workspace, etc.) vercel dns add example.com selector._domainkey CNAME selector.dkim.provider.com ``` ### Add Domain Verification TXT Record ```bash # Google/AWS/other service verification vercel dns add example.com _amazonses TXT 'verification-token-here' vercel dns add example.com '' TXT 'google-site-verification=token' ``` ### Subdomain Setup ```bash # Point subdomain to a service vercel dns add example.com api CNAME api.service.com vercel dns add example.com app A 192.0.2.1 ``` ## Troubleshooting ### "You don't have permission to list the domain record" The domain is in a different team. List teams and switch: ```bash vercel teams ls vercel switch ``` ### Domain Not Listed - Domain might be in a different team/account - Domain might not have Vercel as nameservers - Check with `vercel domains ls` ### Record Not Propagating - DNS propagation can take up to 48 hours (usually 5-30 minutes) - Check propagation: `dig +short ` or use dnschecker.org - Verify record was added: `vercel dns ls ` ## Token Saving Tips ### Fast Verification With `dig` When a third-party UI says "Looking for DNS records", verify what the public internet sees: ```bash dig +short TXT resend._domainkey.example.com dig +short TXT send.example.com dig +short MX send.example.com dig +short TXT example.com ``` ## Tips 1. Always check which team you're in before making changes 2. Use single quotes around TXT values to preserve special characters 3. For apex/root domain records, use empty string `''` as subdomain 4. Record IDs are shown in `vercel dns ls` output - needed for removal 5. Some records (like those added by Vercel automatically) cannot be removed