A minimal, dependency-free CLI for the GoDaddy REST API. Pure bash + curl + python3 (stdlib only).
godaddy domains list
godaddy dns set example.com A @ 1.2.3.4 --ttl 600
godaddy dns add example.com TXT _verify "abc123"
godaddy domain availability foo.com bar.comIn early 2024, GoDaddy restricted public API access. To get working API keys, your account must meet at least one of:
- 50 or more domains registered on the account, or
- $1,000+ annual spend with GoDaddy
Below either threshold, your keys still generate at developer.godaddy.com/keys, but most endpoints (DNS records, domain operations) return 403 Forbidden. This affects every GoDaddy CLI and library equally — it's an account-level restriction, not a tool limitation.
If you don't qualify, consider Cloudflare for DNS (free, unrestricted API) or move DNS to another provider while keeping registration at GoDaddy.
Run godaddy auth-check after configuring keys to verify your account has API access.
One-liner (recommended):
curl -fsSL https://raw.githubusercontent.com/softorize/godaddy-cli/main/install.sh | bashManual:
git clone https://github.com/softorize/godaddy-cli.git
cd godaddy-cli
install -m 0755 godaddy ~/.local/bin/godaddyMake sure ~/.local/bin is on your PATH.
- Generate a production API key + secret at developer.godaddy.com/keys.
- Drop them in
~/.godaddy/credentials:
mkdir -p ~/.godaddy
cat > ~/.godaddy/credentials <<'EOF'
GODADDY_KEY=your-key-here
GODADDY_SECRET=your-secret-here
GODADDY_ENV=prod
EOF
chmod 600 ~/.godaddy/credentialsGODADDY_ENV=ote switches to the OTE (sandbox) environment — api.ote-godaddy.com — which has its own separate keys.
- Verify:
godaddy auth-checkA 403 Forbidden here means your account is below the gating threshold (see top of README).
godaddy whoami Show env + masked key
godaddy auth-check Verify keys work
godaddy domains list List all domains
godaddy domain get <domain> Show full record
godaddy domain renew <domain> Renew (1 year)
godaddy domain availability <d> [...] Check availability
godaddy dns list <domain> [type] [name] List records (filters optional)
godaddy dns get <domain> <type> <name> Get specific record(s)
godaddy dns set <domain> <type> <name> <value> [--ttl N] Replace records
godaddy dns add <domain> <type> <name> <value> [--ttl N] Append a record
godaddy dns delete <domain> <type> <name> Delete records
godaddy raw <METHOD> <path> [curl args...] Direct API call
# List all your domains and pluck just the names
godaddy domains list | jq -r '.[].domain'
# Point apex A record to a new IP
godaddy dns set example.com A @ 203.0.113.42 --ttl 600
# Add a TXT record for domain verification (does NOT replace existing TXT)
godaddy dns add example.com TXT _acme-challenge "abc123"
# Check 3 names at once
godaddy domain availability foo.com bar.io baz.dev
# Raw call to any endpoint
godaddy raw GET '/v1/domains/suggest?query=cannabis&limit=5'set—PUTs the new value, replacing all existing records of that<type>/<name>. Use this when you want exactly one record (e.g. a single A record on the apex).add— fetches existing records, appends the new one, thenPUTs the merged list back. Use this when you want multiple records of the same type (e.g. severalTXTrecords, MX fanout).
GoDaddy's API has no native "append" endpoint; dns add simulates it.
- The credentials file should be mode
0600(the install steps above set this). - Don't commit
~/.godaddy/to git. - Use OTE keys (
GODADDY_ENV=ote) for testing destructive operations.
PRs welcome. Run shellcheck before pushing — CI runs it on every PR.
MIT. See LICENSE.
Not affiliated with GoDaddy. "GoDaddy" is a trademark of GoDaddy Operating Company, LLC.