关于 namecheap-domains
namecheap-domains 是通过 Namecheap API 管理账户域名的技能,适用于需要处理注册和域名设置的用户。它涵盖 DNS、名称服务器及域名转移,并说明 API 凭据与常见操作注意事项。
主要功能
- 01检查域名可用性并注册
- 02查看和更新域名联系人信息
- 03配置 DNS 主机记录及邮件转发
- 04管理名称服务器
- 05发起并跟踪域名转移
适用场景
- 01检查域名并完成注册
- 02更新 DNS 记录或名称服务器
- 03将域名转入 Namecheap
- 04查看账户域名及转移状态
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ clasen/ skills --skill namecheap-domains安装后在 Claude Code 中输入/namecheap-domains确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-dns.mdapi-domains.mdapi-nameservers.mdapi-transfers.md详细介绍
Namecheap 域名
用于通过 Namecheap API 管理域名的技能。涵盖域名注册、DNS 配置、名称服务器管理和域名转移。
这些方法仅适用于在 Namecheap 注册且存在于用户账户中的域名。
先决条件
用户需要将以下凭据配置为环境变量:
| 变量 | 描述 |
|---|---|
NAMECHEAP_API_USER | API 用户名 |
NAMECHEAP_API_KEY | Namecheap 账户中的 API 密钥 |
NAMECHEAP_USERNAME | Namecheap 账户用户名(通常与 API 用户名相同) |
NAMECHEAP_CLIENT_IP | 已加入白名单的 API 访问 IP 地址 |
如果缺少任何凭据,请让用户进行设置。必须在 Namecheap 账户控制面板中启用 API 访问,并将客户端 IP 加入白名单。
API 基础知识
基础 URL: https://api.namecheap.com/xml.response
沙盒 URL: https://api.sandbox.namecheap.com/xml.response
每个请求都需要以下全局参数:
| 参数 | 描述 |
|---|---|
ApiUser | 访问 API 所需的用户名 |
ApiKey | API 密钥 |
UserName | 账户用户名(管理自己的账户时使用 ApiUser) |
ClientIp | 已加入白名单的 IP 地址 |
Command | 要运行的 API 命令(例如,namecheap.domains.getList) |
发起请求
读取操作使用 HTTP GET,写入操作使用 HTTP POST(尤其是参数较多的 domains.create)。
# GET example — list domains
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&\
ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&\
ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.getList"
# POST example — create domain
curl -s -X POST "https://api.namecheap.com/xml.response" \
-d "ApiUser=${NAMECHEAP_API_USER}" \
-d "ApiKey=${NAMECHEAP_API_KEY}" \
-d "UserName=${NAMECHEAP_USERNAME}" \
-d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
-d "Command=namecheap.domains.create" \
-d "DomainName=example.com" \
-d "Years=1" \
# ... additional parameters
解析 XML 响应
所有响应均为 XML。请检查 ApiResponse 上的 Status 属性:
<ApiResponse Status="OK">
<ApiResponse Status="ERROR">
使用 xmllint 提取值:
# Check response status
echo "$response" | xmllint --xpath "string(//ApiResponse/@Status)" -
# Extract error messages
echo "$response" | xmllint --xpath "//Errors/Error/text()" - 2>/dev/null
# Extract specific attributes
echo "$response" | xmllint --xpath "string(//DomainCreateResult/@Registered)" -
如果没有 xmllint,请使用 grep 和 sed 进行基本提取,或使用 Python 的 xml.etree.ElementTree。
API 快速参考
domains.*
| 命令 | 描述 |
|---|---|
namecheap.domains.getList | 列出账户中的域名 |
namecheap.domains.getContacts | 获取域名的联系信息 |
namecheap.domains.create | 注册新域名 |
namecheap.domains.getTldList | 列出可用的 TLD |
namecheap.domains.setContacts | 更新域名的联系信息 |
namecheap.domains.check | 检查域名是否可用 |
namecheap.domains.reactivate | 重新激活已过期的域名 |
namecheap.domains.renew | 续订即将到期的域名 |
namecheap.domains.getRegistrarLock | 获取锁定状态 |
namecheap.domains.setRegistrarLock | 设置锁定状态 |
namecheap.domains.getInfo | 获取域名详情 |
完整参数详情请参阅 references/api-domains.md。
domains.dns.*
| 命令 | 描述 |
|---|---|
namecheap.domains.dns.setDefault | 使用 Namecheap 默认 DNS 服务器 |
namecheap.domains.dns.setCustom | 使用自定义 DNS 服务器 |
namecheap.domains.dns.getList | 获取域名的 DNS 服务器 |
namecheap.domains.dns.getHosts | 获取 DNS 主机记录 |
namecheap.domains.dns.getEmailForwarding | 获取电子邮件转发设置 |
namecheap.domains.dns.setEmailForwarding | 设置电子邮件转发 |
namecheap.domains.dns.setHosts | 设置 DNS 主机记录 |
完整参数详情请参阅 references/api-dns.md。
domains.ns.*
| 命令 | 描述 |
|---|---|
namecheap.domains.ns.create | 创建名称服务器 |
namecheap.domains.ns.delete | 删除名称服务器 |
namecheap.domains.ns.getInfo | 获取名称服务器信息 |
namecheap.domains.ns.update | 更新名称服务器 IP |
完整参数详情请参阅 references/api-nameservers.md。
domains.transfer.*
| 命令 | 描述 |
|---|---|
namecheap.domains.transfer.create | 将域名转入 Namecheap |
namecheap.domains.transfer.getStatus | 检查转移状态 |
namecheap.domains.transfer.updateStatus | 更新/重新提交转移 |
namecheap.domains.transfer.getList | 列出域名转移记录 |
完整参数详情请参阅 references/api-transfers.md。
常见工作流
1. 检查可用性并注册域名
# Step 1: Check availability
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.check&DomainList=example.com,example.net"
# Look for: <DomainCheckResult Domain="example.com" Available="true" />
# Step 2: Register (use POST)
curl -s -X POST "https://api.namecheap.com/xml.response" \
-d "ApiUser=${NAMECHEAP_API_USER}" \
-d "ApiKey=${NAMECHEAP_API_KEY}" \
-d "UserName=${NAMECHEAP_USERNAME}" \
-d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
-d "Command=namecheap.domains.create" \
-d "DomainName=example.com" \
-d "Years=1" \
-d "RegistrantFirstName=John" \
-d "RegistrantLastName=Smith" \
-d "RegistrantAddress1=123 Main St" \
-d "RegistrantCity=San Francisco" \
-d "RegistrantStateProvince=CA" \
-d "RegistrantPostalCode=94102" \
-d "RegistrantCountry=US" \
-d "RegistrantPhone=+1.4155551234" \
-d "[email protected]" \
-d "TechFirstName=John" \
-d "TechLastName=Smith" \
-d "TechAddress1=123 Main St" \
-d "TechCity=San Francisco" \
-d "TechStateProvince=CA" \
-d "TechPostalCode=94102" \
-d "TechCountry=US" \
-d "TechPhone=+1.4155551234" \
-d "[email protected]" \
-d "AdminFirstName=John" \
-d "AdminLastName=Smith" \
-d "AdminAddress1=123 Main St" \
-d "AdminCity=San Francisco" \
-d "AdminStateProvince=CA" \
-d "AdminPostalCode=94102" \
-d "AdminCountry=US" \
-d "AdminPhone=+1.4155551234" \
-d "[email protected]" \
-d "AuxBillingFirstName=John" \
-d "AuxBillingLastName=Smith" \
-d "AuxBillingAddress1=123 Main St" \
-d "AuxBillingCity=San Francisco" \
-d "AuxBillingStateProvince=CA" \
-d "AuxBillingPostalCode=94102" \
-d "AuxBillingCountry=US" \
-d "AuxBillingPhone=+1.4155551234" \
-d "[email protected]" \
-d "AddFreeWhoisguard=yes" \
-d "WGEnabled=yes"
# Step 3: Verify
# Check response for: <DomainCreateResult Registered="true" />
用户提供一次联系信息后,除非用户指定不同联系人,否则将其用于全部四种联系人类型(注册人、技术联系人、管理员、辅助账单联系人)。
2. 配置 DNS 记录
# Step 1: Verify domain uses Namecheap DNS
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.dns.getList&SLD=example&TLD=com"
# If using custom nameservers, switch to default first (required for host records)
# Command=namecheap.domains.dns.setDefault&SLD=example&TLD=com
# Step 2: Get current records
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.dns.getHosts&SLD=example&TLD=com"
# Step 3: Set all records (setHosts replaces ALL records — include existing ones)
curl -s -X POST "https://api.namecheap.com/xml.response" \
-d "ApiUser=${NAMECHEAP_API_USER}" \
-d "ApiKey=${NAMECHEAP_API_KEY}" \
-d "UserName=${NAMECHEAP_USERNAME}" \
-d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
-d "Command=namecheap.domains.dns.setHosts" \
-d "SLD=example" \
-d "TLD=com" \
-d "HostName1=@" \
-d "RecordType1=A" \
-d "Address1=1.2.3.4" \
-d "TTL1=1800" \
-d "HostName2=www" \
-d "RecordType2=CNAME" \
-d "Address2=example.com" \
-d "TTL2=1800"
重要: setHosts 会替换所有现有记录。务必先用 getHosts 获取当前记录,然后在调用 setHosts 时将它们与新记录一并传入。省略现有记录会导致它们被删除。
3. 将域名转入 Namecheap
# Step 1: Initiate transfer
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.transfer.create&\
DomainName=example.com&Years=1&EPPCode=AUTH_CODE_HERE"
# Step 2: Monitor transfer status
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.transfer.getStatus&TransferID=TRANSFER_ID"
可转移的 TLD:.biz、.ca、.cc、.co、.co.uk、.com、.com.es、.com.pe、.es、.in、.info、.me、.me.uk、.mobi、.net、.net.pe、.nom.es、.org、.org.es、.org.pe、.org.uk、.pe、.tv、.us
重要说明
- SLD/TLD 拆分: 许多端点要求将
SLD和TLD作为单独参数。对于example.com,SLD=example,TLD=com。对于example.co.uk,SLD=example,TLD=co.uk。 - 电话格式: 始终使用
+NNN.NNNNNNNNNN(例如+1.4155551234)。 - IDN 域名: 以 Punycode 格式发送域名(例如
xn--sdkhjsdhfkdh.com),并包含IdnCode参数。 - 高级域名: 设置
IsPremiumDomain=True,并提供PremiumPrice,还可选择提供EapFee。 - 速率限制: Namecheap 可能会限制请求频率。如果收到错误,请等待一段时间后重试。
- 沙盒: 使用沙盒 URL 进行测试。沙盒凭据与生产环境凭据不同。
错误处理
XML 响应中的常见错误模式:
<ApiResponse Status="ERROR">
<Errors>
<Error Number="2016166">Domain is not associated with your account</Error>
</Errors>
</ApiResponse>
处理结果前,务必检查 Status="OK"。如果 Status="ERROR":
- 提取错误编号和消息
- 查看相关参考文件中列出的错误代码
- 常见问题:
- 身份验证错误: 验证凭据和已列入白名单的 IP
- 未找到域名(2019166): 检查域名和账户关联情况
- 电话号码无效(2015182): 使用格式
+NNN.NNNNNNNNNN - 域名不可用(3019166/4019166): 域名已被注册
- 不支持的 TLD(2030280): 检查受支持的 TLD
故障排除
错误:连接被拒绝或超时
原因:客户端 IP 未列入白名单,或未启用 API 访问权限。
解决方案:检查 Namecheap 控制面板 → 个人资料 → 工具 → API 访问权限。确认该 IP 与 NAMECHEAP_CLIENT_IP 一致。
错误:响应为空或格式错误
原因:缺少必需参数。
解决方案:确认所有全局参数均已提供。检查 Command 值的拼写是否正确。
错误:DNS 更改未生效
原因:域名可能使用的是自定义名称服务器,而非 Namecheap 默认名称服务器。
解决方案:先调用 domains.dns.setDefault,然后设置主机记录。URL 转发、邮件转发和动态 DNS 仅在使用 Namecheap 默认名称服务器时有效。